Cプログラムで15パズルを作ってみたのですがうまく動作しません。何処が
Cプログラムで15パズルを作ってみたのですがうまく動作しません。何処が間違っているのかずっと考えているのですがいまだに解決策が見つかりません。ヒントでもいいのでお願します。
#include <stdio.h>
int init(void);
void show(void);
int chk_cmp(void);
char input(void);
int move(char cmd);
#define N 4
int panel[N][N] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 0},
{13, 14, 15, 12}
};
int x, y;
int main(void)
{
printf("これは15パズルです。\n"
"左上から右に向かって「1」から「15」が並ぶよう,\n"
"「0」を動かしてください。\n"
"操作はテンキーで行います。( 8(上),4(左),6(右),2(下) )\n");
if( !init() ) {
printf("パネルの初期化に失敗しました。「0」のパネルがありません。\n");
return 1;
}
while(1) {
show();
if( chk_cmp() ) {
printf("完成です!\n");
break;
}
while(1) {
if( move(input()) ) {
break;
}
else {
printf("そっちには動かせません。\n");
}
}
}
return 0;
}
int init(void)
{
int i,j;
for(i=0;i<=N-1;i++){
for(j=0;j<=N-1;j++){
if(panel[i][j]==0){
x=j;
y=i;
return 1;
}
}
}
return 0;
}
void show(void)
{
int i,j;
printf("---------------\n");
for(i=0;i<=N-1;i++){
for(j=0;j<=N-1;j++){
printf("%3d",panel[i][j]);
}
printf("\n");
}
printf("---------------\n\n");
}
int chk_cmp(void)
{
int i,j;
for(i=0;i<=N-1;i++){
for(j=0;j<=N-1;j++){
if(i==N-1&&j==N-1){
if(panel[i][j]!=0){
return 0;
}
}else{
if(panel[i][j]!=N*i+j+1){
return 0;
}
}
}
}
return 1;
}
char input(void)
{
int comand;
while(1){
scanf("%d",&comand);
if(comand==8||comand==4||comand==6||comand==2){
break;
}
printf("8(上),4(左),6(右),2(下)を入力してください。");
}
return comand;
}
int move(char cmd)
{
int dx=0, dy=0;
if(cmd==8){dy=-1;}//上
if(cmd==4){dx=-1;}//左
if(cmd==6){dx=1;}//右
if(cmd==2){dy=1;}//下
if(x+dx>=0&&x+dx<=N-1&&y+dy>=0&&y+dy<=N-1){
panel[y][x]==panel[y+dy][x+dx];
panel[y+dy][x+dx]==0;
y+=dy;
x+=dx;
return 1;
}
else{return 0;}
}