--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2012/03/11

c++で15パズル

C++とDXライブラリで15パズル作ってみました。
game.hというヘッダファイルは自作。
といっても初期化処理、ループ処理をひとまとめにした関数やら、
キー入力関数を書いただけのファイルですが。
オセロとか倉庫番が難しかった分
思ったより簡単につくれてびっくりしました。

方向キーでカーソル移動。
Zキーで数字移動。

<画像は消えてしまったので無しですごめんなさい>

↓ダウンロード

http://www1.axfc.net/uploader/Sc/so/327128

↓ソース

#include "DxLib.h"
#include "game.h"

class puzzle15{
int masu[4][4];
int cx;
int cy;
public:
puzzle15(){
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
masu[i][j]=i+j*4+1;
}
}
cx=3;
cy=3;
randomize();
}
void play(){
while(loop()){
draw();
action();
}
}
void draw(){
int i,j;
DrawFormatString(100+cx*30,100+cy*30,RED,"□");
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(masu[i][j]!=16){
DrawFormatString(100+i*30,100+j*30,WHITE,"%d",masu[i][j]);
}
}
}
}
void action(){
if(Key[KEY_INPUT_UP]==1&&cy!=0){cy--;}
else if(Key[KEY_INPUT_DOWN]==1&&cy!=3){cy++;}
else if(Key[KEY_INPUT_LEFT]==1&&cx!=0){cx--;}
else if(Key[KEY_INPUT_RIGHT]==1&&cx!=3){cx++;}
else if(Key[KEY_INPUT_Z]==1){moveNum();}
}
void moveNum(){
int x,y;
x=cx;
y=cy;
if(cx+1<4&&masu[cx+1][cy]==16){x=cx+1;}
else if(cx-1>=0&&masu[cx-1][cy]==16){x=cx-1;}
else if(cy+1<4&&masu[cx][cy+1]==16){y=cy+1;}
else if(cy-1>=0&&masu[cx][cy-1]==16){y=cy-1;}
else {return;}
masu[x][y]=masu[cx][cy];
masu[cx][cy]=16;
}
void randomize(){
int i;
int r;
for(i=0;i<100;i++){
r=GetRand(3);
if(r==0&&cy!=0){cy--;}
else if(r==1&&cy!=3){cy++;}
else if(r==2&&cx!=0){cx--;}
else if(r==3&&cx!=3){cx++;}
moveNum();
}
}
};

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
init();
puzzle15 p;
p.play();
DxLib_End();
return 0;
}

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。