あみだくじ改 C++練習メモ 第4回
独習C++ 第4版やら、独習C 第4版やら、ゲームプログラマになる前に覚えておきたい技術を、少し見て、C言語適当練習日記 第9回で作った、あみだくじを少し変えてみた。
数か月ぐらい経って、これをもう一度、見返してみて、もっと効率のいい方法あるのに…って思えればいいかなという感じだ。
[crayon]// amidacon.cppで、本を踏まえてC++でコンソールあみだくじ 参考文献は記事の上に書いている。
#include
#include
#include
using namespace std;
#define STAGE_NUMBER_MAX 3
int selectNumber(char *message, int n_max);// 数字の選択
void readFile(char **buffer, int *size, int f_num);// ファイル読み込みなど。
void nextStep();// 何かキーを押すことで次に進むというもの
// 1次元配列を2次風味の表現にする
// 読んだ本に書いてあったことほぼそのまま流用。
template
A2D *mArray;
int mSize0;
int mSize1;
public:
Array2D() : mArray(0){}
~Array2D(){
delete[] mArray;
mArray = 0;
}
void setSize(int size0,int size1){
mSize0=size0;
mSize1=size1;
mArray =new A2D[size0 * size1];
}
A2D &operator()(int index0, int index1){
return mArray[index1 *mSize0 + index0];
}
const A2D &operator()(int index0, int index1) const{
return mArray[index1 *mSize0 + index0];
}
};
// 状態(State)で描画、画面遷移など。
class State{
// enumをマップチップ代わりに使用。本の受け売り。
enum Object{
OB_SPACE,
OB_ROAD,
OB_TURN_LEFT,
OB_TURN_RIGHT,
OB_BRIDGE,
OB_WIN,
OB_LOSE,
OB_PLAYER,
OB_NUM,
OB_ETC
};
void setSize(const char *mapData,int size); // マップの広さを見る
int mEnum,mEnum2; // Pと交換で保持するenumのやつ。
int mWidth,mHeight; // マップの広さ
int mKuji; // 選択できるくじの本数
bool clearFlag; // いわゆるクリアフラグ
Array2D
int main(){
// ステージ番号の選択
int filenum;
filenum = selectNumber("ステージ",STAGE_NUMBER_MAX);
// マップファイル読み込み
char *mapData;
int fileSize;
readFile(&mapData, &fileSize, filenum);
State *state = new State(mapData,fileSize);
state->draw();
state->pSet();
// メインループ 自機操作系今回は入らない。だって勝手に動くゲームだもの。
while(!(state->mapClear())){
state->draw();
state->update();
}
cout << "ゲーム終了です。" << endl;
delete[] mapData; //事後処理?
mapData = 0;
nextStep();
return 0;
}
// nextStepとselectNumberはクラスを作って承継ができるかもしれない。一応保留。
void nextStep(){
char ch;
cout << "何かボタンを押すと次に進みます。" << endl;
ch = _getche();
cout << endl;
}
int selectNumber(char *message, int n_max){
char ch;
int num=0;
while((num < 1) || (num > n_max)){
cout << "1から" << n_max << "までの" << message << "番号を入力してください" << endl;
ch = _getche();
num = atoi(&ch);
cout << endl;
}
return num;
}
void readFile(char **buffer, int *size, int f_num){
char filename[16];
sprintf_s(filename, 16,"mapdata%d.txt", f_num);
ifstream in(filename);
if(!in){
cout << "ファイルを開くことに失敗しました" << endl;
exit(1);
}
else{
in.seekg(0,ifstream::end);
*size = static_cast
in.seekg(0,ifstream::beg);
*buffer = new char[*size];
in.read(*buffer, *size);
}
in.close();
}
State::State(const char *mapData, int size){
// 初期化シリーズ。
mEnum = OB_ETC;
mEnum2 = OB_ETC;
clearFlag = false;
mKuji = 0;
setSize( mapData, size);
mObject.setSize(mWidth,mHeight);
for(int y=0;y やったときのログシリーズ、バッテリー交換編 バッテリー交換後編。Pick Up
Macbook air Mid2012 のバッテリー交換を行おうとして右往左往したときのログ(前編)
Macbook Air Mid2012 のバッテリー交換をしたときのメモ(後編)