クラスメンバの扱いに困っています。
Posted: 2011年4月30日(土) 23:52
こんにちは。現在、
・プレイヤーをNPCの二人でじゃんけんゲームを行う
・プレイヤーはキーボード入力で手を決める。
・NPCはランダムで手を決める。
・勝敗を判定する。
・プレイヤーの勝敗に応じた結果を表示する。
というような簡単なゲームを考えています。
プレイヤーとNPCはplayerクラスでのことを考えており、
勝敗の判断や画像の表示はzyanken_fieldクラスを想定しています。
しかしながら、勝敗の判断void zyanken_field::syouhai_handan()の中身がどうもうまくかけません。
また、if(player::te==GUU) DrawGraph(te_hyouzi_iti_x,te_hyouzi_iti_y,guu_img,FALSE);のような記述も不自然に思えます。
勝敗の判断はプレイヤーとNPCの手の値がどうしても必要になります。これをクラスで実現するにはどうすればよいでしょうか。
グローバル変数を使う、クラスを使わないなどの措置を行えば簡単に実装できますが、できる限りクラス内以外での変数は用いたくありません。(それとも、このような場合は通常クラスを用いないのでしょうか?)
よろしければアドバイスお願いします。
環境はVisualC++、windowsXPとなります。
・プレイヤーをNPCの二人でじゃんけんゲームを行う
・プレイヤーはキーボード入力で手を決める。
・NPCはランダムで手を決める。
・勝敗を判定する。
・プレイヤーの勝敗に応じた結果を表示する。
というような簡単なゲームを考えています。
プレイヤーとNPCはplayerクラスでのことを考えており、
勝敗の判断や画像の表示はzyanken_fieldクラスを想定しています。
しかしながら、勝敗の判断void zyanken_field::syouhai_handan()の中身がどうもうまくかけません。
また、if(player::te==GUU) DrawGraph(te_hyouzi_iti_x,te_hyouzi_iti_y,guu_img,FALSE);のような記述も不自然に思えます。
勝敗の判断はプレイヤーとNPCの手の値がどうしても必要になります。これをクラスで実現するにはどうすればよいでしょうか。
グローバル変数を使う、クラスを使わないなどの措置を行えば簡単に実装できますが、できる限りクラス内以外での変数は用いたくありません。(それとも、このような場合は通常クラスを用いないのでしょうか?)
よろしければアドバイスお願いします。
環境はVisualC++、windowsXPとなります。
#include "DxLib.h"
#define GUU 1
#define TYOKI 2
#define PAA 3
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
class player{
private:
public:
static int te;
void te_kettei();
};
int player::te=0;
void player::te_kettei(){
if( Key[KEY_INPUT_G] == 1 ) te=GUU;
if( Key[KEY_INPUT_T] == 1 ) te=TYOKI;
if( Key[KEY_INPUT_P] == 1 ) te=PAA;
}
class zyanken_field{
private:
int syohai;
int kati_img;
int make_img;
int aiko_img;
int guu_img;
int paa_img;
int tyoki_img;
int haikei_img;
int te_hyouzi_iti_x;
int te_hyouzi_iti_y;
public:
void te_hyouzi();
void syouhai_handan();
void syouhai_hyouzi();
void game_start();
void haikei_hyouzi();
void gazou_in();
void te_xy();
};
void zyanken_field::te_hyouzi(){
if(player::te==GUU) DrawGraph(te_hyouzi_iti_x,te_hyouzi_iti_y,guu_img,FALSE);
if(player::te==TYOKI) DrawGraph(te_hyouzi_iti_x,te_hyouzi_iti_y,tyoki_img,FALSE);
if(player::te==PAA) DrawGraph(te_hyouzi_iti_x,te_hyouzi_iti_y,paa_img,FALSE);
}
void zyanken_field::syouhai_handan(){
}
void zyanken_field::syouhai_hyouzi(){
DrawGraph(200,200,haikei_img,FALSE);
}
void zyanken_field::game_start(){
}
void zyanken_field::haikei_hyouzi(){
DrawGraph(0,0,haikei_img,FALSE);
}
void zyanken_field::gazou_in(){
guu_img = LoadGraph( "img/guu.bmp" );
tyoki_img = LoadGraph( "img/tyoki.bmp" );
paa_img = LoadGraph( "img/paa.bmp" );
haikei_img= LoadGraph( "img/haikei.bmp");
kati_img = LoadGraph( "img/kati.bmp");
make_img = LoadGraph( "img/make.bmp");
aiko_img = LoadGraph( "img/aiko.bmp");
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
WaitKey();
DxLib_End();
return 0;
}