今までは、プログラム作るときにすべてはじめから書いてましたが、多少なりともきれいに書けるようになってきたので、最近は使いまわししたいなーって思うようになってきました。
そこで、前回作っていたゲームにて土台作りに専念することにしました。
てなわけで、とりあえず、今まで大して変更もないくせに毎回同じものを書いていたKeyクラスを使いまわすことにしました。
ですが、自分ではこんなもんかなーって思っていてもほかの人から見たら、「ないわー」ってものだったら後々困ってきます。
そこで、ここはこう書いたほうがいいよ。って部分があったら教えてほしいです。
え?根本的にそりゃまずくない?って部分あったら特に...
では、以下プログラムになります。
[Key.h]
► スポイラーを表示
CODE:
#ifndef DEF_KEY_H
#define DEF_KEY_H
class c_Key{
public:
enum Input_enum{
INPUT_START, //PAKO0813:START ?
INPUT_SELECT, //PAKO0813:SELECT ?
INPUT_L1, //PAKO0813:L1 ?
INPUT_L2, //PAKO0813:L2 ?
INPUT_R1, //PAKO0813:R1 ?
INPUT_R2, //PAKO0813:R2 ?
INPUT_UP, //上
INPUT_RIGHT, //右
INPUT_DOWN, //下
INPUT_LEFT, //左
INPUT_A, //○ Z ボタン
INPUT_B, //× X ボタン
INPUT_X, //△ S ボタン
INPUT_Y, //□ A ボタン
INPUT_MAX, //配列の大きさ(使用するボタンの数)
};
public:
c_Key();
~c_Key();
private:
int key[INPUT_MAX];
int KeyName[INPUT_MAX];
int PadName[INPUT_MAX];
public:
void KeyIni(void); //入力状態の初期化
void KeyNameIni(void); //入力ボタンの設置
int KeyGet(Input_enum); //入力状態のチェック
int KeyTouch(void); //入力があるかのチェック
void KeyInput(void); //入力状態を得る
};
#endif /* DEF_KEY_H */
[Key.cpp]
► スポイラーを表示
CODE:
#include "DxLib.h"
#include "KEY.h"
c_Key::c_Key(){
KeyIni();
KeyNameIni();
}
c_Key::~c_Key(){
}
/////////////////////////
int c_Key::KeyGet(Input_enum data){
return key[data];
}
///////////////////////////////////////////////////////////////////////////
//入力状態を得る
void c_Key::KeyInput(void){
int PadData=GetJoypadInputState( DX_INPUT_PAD1 );
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<INPUT_MAX;i++){
if(GetHitKeyStateAll_Key[ KeyName[i] ]==1 || (PadData&PadName[i])!=0){
key[i]++;
}
else key[i]=0;
}
return;
}
int c_Key::KeyTouch(void){
for(int i=0;i<INPUT_MAX;i++){
if(key[i]==1)return 1;
}
return 0;
}
/////////////////////////////////////////////////////////////////////////
/* 入力状態の初期化 */
void c_Key::KeyIni(void){
for(int i=0;i<INPUT_MAX;i++){
key[i]=0;
}
return;
}
//入力ボタンの設置
void c_Key::KeyNameIni(void){
KeyName[ INPUT_L1 ]=KEY_INPUT_D;
KeyName[ INPUT_L2 ]=KEY_INPUT_LCONTROL;
KeyName[ INPUT_R1 ]=KEY_INPUT_F;
KeyName[ INPUT_R2 ]=KEY_INPUT_C;
KeyName[ INPUT_START ]=KEY_INPUT_SPACE;
KeyName[ INPUT_SELECT]=KEY_INPUT_ESCAPE;
KeyName[ INPUT_UP ]=KEY_INPUT_UP;
KeyName[ INPUT_RIGHT ]=KEY_INPUT_RIGHT;
KeyName[ INPUT_DOWN ]=KEY_INPUT_DOWN;
KeyName[ INPUT_LEFT ]=KEY_INPUT_LEFT;
KeyName[ INPUT_A ]=KEY_INPUT_Z;
KeyName[ INPUT_B ]=KEY_INPUT_X;
KeyName[ INPUT_X ]=KEY_INPUT_S;
KeyName[ INPUT_Y ]=KEY_INPUT_A;
PadName[ INPUT_L1 ]=0x0400;
PadName[ INPUT_L2 ]=0x0100;
PadName[ INPUT_R1 ]=0x0800;
PadName[ INPUT_R2 ]=0x0200;
PadName[ INPUT_START ]=0x1000;
PadName[ INPUT_SELECT]=0x2000;
PadName[ INPUT_UP ]=0x0008;
PadName[ INPUT_RIGHT ]=0x0004;
PadName[ INPUT_DOWN ]=0x0001;
PadName[ INPUT_LEFT ]=0x0002;
PadName[ INPUT_A ]=0x0020;
PadName[ INPUT_B ]=0x0040;
PadName[ INPUT_X ]=0x0080;
PadName[ INPUT_Y ]=0x0010;
return;
}
後は、ファイルからボタン設定できるようにしようかなーって思ってたり(思ってるだけでまだやってない...ってかやる気配がないw)
あとはコメントが少ないぐらいかな?って自分では思っているのですが、どうでしょうか?
皆さんは、どんな風にKeyの管理してますか?
*このプログラムは、キーボード入力とパッド入力を同時に受け付けます。
(書いてて気がついたけど、パッドがはまってない時は処理を行わせないほうがいいでしょうか?)