実行画面はこんな感じです。 操作は
Rキー:リセット。全て白にする
Cキー:デタラメに黒にする
Bキー:端の性質を変える
Zキー:停止/再開
Sキー:サイズの変更(100*100、200*200、400*400)
左右キー:速度の変更
マウス左:黒にする
マウス右:白にする
となっています。
以下、コードです。
► スポイラーを表示
#include "DxLib.h"
typedef struct{
int x,y;
int left;
int right;
int wheel;
}mouse_t;
mouse_t mouse;
int Key[256];
char map_data[400+2][400+2];
char map_temp[400+2][400+2];
int gray_color;
int white_color;
int black_color;
int size;
int stop;
int speed;
int speed_frame[12]={1,2,3,4,5,6,10,12,15,20,30,60};
int count;
int border;//境界 0:常に0 1:反対側と同じ 2:常に1
void GetMouseState(){
mouse_t temp;
mouse_t *mp=&temp;
GetMousePoint(&mp->x,&mp->y);
if(mp->x>=0 && mp->xy>=0 && mp->yx;
mouse.y=mp->y;
}
//各ボタンを調べる
int MouseInput=GetMouseInput();
if(MouseInput & MOUSE_INPUT_LEFT){
mouse.left++;
}
else mouse.left=0;
if(MouseInput & MOUSE_INPUT_RIGHT){
mouse.right++;
}
else mouse.right=0;
mouse.wheel=GetMouseWheelRotVol();
}
void color_ini(){
gray_color= GetColor(127,127,127);
white_color=GetColor(255,255,255);
black_color=GetColor( 0, 0, 0);
size=4;
}
void map_ini(){
for(int x=1;x2){
border=0;
}
}
if(Key[KEY_INPUT_RIGHT]==1){
speed--;
if(speed==-1) speed=0;
}
if(Key[KEY_INPUT_LEFT]==1){
speed++;
if(speed==12) speed=11;
}
if(Key[KEY_INPUT_Z]==1){
if(stop==0) stop=1;
else stop=0;
}
if(Key[KEY_INPUT_S]==1){
switch(size){
case 4:
size=2;
break;
case 2:
size=1;
break;
case 1:
size=4;
break;
}
}
if(mouse.x>=120 && mouse.x=40 && mouse.y0){
map_data[(mouse.y-40)/size+1][(mouse.x-120)/size+1]=1;
}
else if(mouse.right>0){
map_data[(mouse.y-40)/size+1][(mouse.x-120)/size+1]=0;
}
}
}
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
color_ini();
map_ini();
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
GetMouseState();
map_control();
if(count%speed_frame[speed]==0){
if(stop==0) map_next();
}
map_graph();
count++;
ScreenFlip();
}
DxLib_End();
return 0;
}