ライフゲームを作ろうと思って
640×480の画面に64×48のマス目を描画しようと
#define FIELD_Y 47
//0~47
#define FIELD_X 63
//0~63
int field[FIELD_Y][FIELD_X] = {0};
このように初期化したのですが下段二行がチラホラとゼロクリアされていないようです。
FIELD_Yの値を49にすることで問題は回避できますが、
気になったので調べてみてもわかりませんでした。
初期化の仕方が間違っているのでしょうか。
ソースコードを載せますのでアドバイスいただけたら幸いです。ソースファイル名はtest.cppです。
#define FIELD_Y 47 //0~47 #define FIELD_X 63 //0~63 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); // ウィンドウモードに指定 if( DxLib_Init() == -1 ){return (-1);} // DXライブラリ初期化処理、 エラーが起きたら直ちに終了 int field[FIELD_Y][FIELD_X] = {0}; /* for(int j=1; j < FIELD_Y; ++j) { for(int i=1; i < FIELD_X; ++i) { field[j] = 1; } } */ SetDrawScreen(DX_SCREEN_BACK); //描画対象画面の指定 // メインループ while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0) { ClsDrawScreen(); //画面の消去 int x=0,y=0; int key=GetJoypadInputState(DX_INPUT_KEY_PAD1); /* if(key & PAD_INPUT_UP ) y-=8; if(key & PAD_INPUT_DOWN ) y+=8; if(key & PAD_INPUT_LEFT ) x-=8; if(key & PAD_INPUT_RIGHT) x+=8; */ for(int j=0; j <= FIELD_Y; ++j) { for(int i=0; i <= FIELD_X; ++i) { int x = i*10; int y = j*10; if(field[j] == 1) { DrawBox( x, y, x+9, y+9, GetColor(255,0,0) , TRUE ) ; // 赤い箱の描画 } else if(field[j] == 0) { DrawBox( x, y, x+9, y+9, GetColor(255,0,0) , FALSE ) ; // 赤い枠の描画 } else { DrawBox( x, y, x+9, y+9, GetColor(255,255,255) , FALSE ) ; // 白い箱の描画 } } } ScreenFlip(); //画面の切り替え } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // 終了 }