8パズルプログラム

なんか悔しかったので作った。
1時間5分ほどで作り終えた。
スッキリした。

#include 
#include

#define SIZE 3

//初期化
void Syokika(char hairetsu[SIZE][SIZE]){
hairetsu[0][0]='2';
hairetsu[0][1]='5';
hairetsu[0][2]='4';
hairetsu[1][0]='3';
hairetsu[1][1]='*';
hairetsu[1][2]='1';
hairetsu[2][0]='8';
hairetsu[2][1]='7';
hairetsu[2][2]='6';
}

//配列の出力
void PrintHairetsu(char hairetsu[SIZE][SIZE]){
int i=0,j=0;
printf("-------\n");
for(i=0;i for(j=0;j printf(" %c",hairetsu[i][j]);
}
printf("\n");
}
printf("-------\n");
}

//char型の入力
char InputChar(void){
char ch[100];
char c;
printf("Input num ->");
fgets(ch,100,stdin);
sscanf(ch,"%1c",&c);
return c;
}

//char型の入力が0,1~8,その他のどれであるかを判断
int CheckNum(char c){
if(c=='0'){
return -1;
}else if('1'<=c && c<='8'){
return 1;
}else{
return 0;
}
}

//終了
void End(void){
exit (0);
}

//入力された数と*が隣接しているかの判断
int CheckRinsetsu(char hairetsu[SIZE][SIZE],char c){
int i=0,j=0;
int ai=0,aj=0;
int flag=0;

for(i=0;i for(j=0;j if(hairetsu[i][j]=='*'){
ai=i;
aj=j;
}
}
}

if(ai==0){
if(hairetsu[ai+1][aj]==c){
flag=1;
}
}
if(ai==1){
if(hairetsu[ai-1][aj]==c || hairetsu[ai+1][aj]==c ){
flag=1;
}
}
if(ai==2){
if(hairetsu[ai-1][aj]==c){
flag=1;
}
}
if(aj==0){
if(hairetsu[ai][aj+1]==c){
flag=1;
}
}
if(aj==1){
if(hairetsu[ai][aj-1]==c || hairetsu[ai][aj+1]==c ){
flag=1;
}
}
if(aj==2){
if(hairetsu[ai][aj-1]==c){
flag=1;
}
}
return flag;
}

//ゲームクリア状態かどうかの判断
int CheckGameClear(char hairetsu[SIZE][SIZE]){
if(hairetsu[0][0]=='1' && hairetsu[0][1]=='2' && hairetsu[0][2]=='3'
&& hairetsu[1][0]=='4' && hairetsu[1][1]=='5' && hairetsu[1][2]=='6'
&& hairetsu[2][0]=='7' && hairetsu[2][1]=='8' && hairetsu[2][2]=='*'){
return 1;
}else{
return 0;
}
}

//数字と*の入れ替え
void SwapNum(char hairetsu[SIZE][SIZE],char c){
int i=0,j=0;
int ai=0,aj=0;
int ci=0,cj=0;

for(i=0;i for(j=0;j if(hairetsu[i][j]=='*'){
ai=i;
aj=j;
}
if(hairetsu[i][j]==c){
ci=i;
cj=j;
}
}
}

hairetsu[ai][aj]=hairetsu[ci][cj];
hairetsu[ci][cj]='*';

}

//メイン
int main(void)
{
char hairetsu[SIZE][SIZE]={0};
char c;

Syokika(hairetsu);//初期化

while(1){//無限ループ
PrintHairetsu(hairetsu);//配列表示

if(CheckGameClear(hairetsu)==1){
printf("ゲームクリア\n");
break;//ゲームクリア状態なら無限ループからブレイク
}

INPUT://gotoの先。inputからやり直すため。
c=InputChar();

if(CheckNum(c)==-1){
printf("プログラムを終了します。\n");
End();//0が入力された場合、プログラムの終了
}
if(CheckNum(c)==0){//0以外の文字が入力された場合
printf("0~8の値を入力してください。\n");
goto INPUT;
}

if(CheckRinsetsu(hairetsu,c)==0){//隣接チェック
printf("入力された数が*と隣接していません。\n");
goto INPUT;
}

//数字と*を入れ替え
SwapNum(hairetsu,c);
}
return 0;
}
スポンサーサイト
プロフィール

hima_zinn(新社会人になってこれから忙しくなる暇人)

Author:hima_zinn(新社会人になってこれから忙しくなる暇人)
 
メインブログを移行しました。
http://hima-zinn.hatenablog.com/

Androidプログラマー。
ゲーム、マンガ、邦楽が大好き。
好きなゲーム…大神、ベヨネッタ、428、スマブラ、バーンアウト、クレタク、マリカー、VANQUISH、デビルメイクライ、デモンズ、ワンダと巨像、逆裁、NMH、勇なま、シレン、DiabloⅡ、ダンガンロンパ、ほか多数。
好きなゲーム会社はプラチナゲームズです。
好きなマンガ…イキガミ、デスノ、ONE PIECE、ハガレン、アライブ、GANTZ、エヴァ、バクマン、ONE OUTS、ほか多数。

最新記事
カテゴリ
最新コメント
最新トラックバック
月別アーカイブ
検索フォーム
カウンター
カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
RSSリンクの表示
リンク
QRコード
QR
ブロとも申請フォーム

この人とブロともになる