#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 3
#define COL 3
//菜单函数
void menu();
//制作表格
void displayboard(int board[ROW][COL], int row, int col);
//游戏控制
void game();
//初始化函数
void zero(int board[ROW][COL], int row, int col);
//随机出数字
void casual(int board[ROW][COL], int row, int col);
//移动操作
void operate(int board[ROW][COL], int row, int col);
//查找0所在的列
int operate_j(int board[ROW][COL], int row, int col);
//查找0所在的行
int operate_i(int board[ROW][COL], int row, int col);
//检查是否结束
int check(int board[ROW][COL], int row, int col);
void zero(int board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = 0;
}
}
}
//随机出数字制作原始表格
void casual(int board[ROW][COL], int row, int col)
{
int i = 1;
board[2][2] = 1;
for (i = 1; i <= 8; i++)
{
for (;;)
{
int x = rand() % col;
int y = rand() % row;
//判断是否被占用
if (board[x][y] == 0)
{
board[x][y] = i;
break;
}
}
}
board[2][2] = 0;
}
int operate_j(int board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == 0)
{
return j;
}
}
}
}
int operate_i(int board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == 0)
{
return i;
}
}
}
}
//制作表格
void displayboard(int board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %d ", board[i][j]);
if (j < col - 1)
{
printf("|");//保证最后一列无|
}
}
printf("\n");
if (i < row - 1)
{
for (k = 0; k < col; k++)
{
printf("---");
if (k < col - 1)
{
printf("|");//保证最后一列无|
}
}
}
printf("\n");
}
}
//判断是否获胜
int check(int board[ROW][COL], int row, int col)
{
if (board[0][0]==1 && board[0][1] == 2 && board[0][2] == 3)
{
if (board[1][0] = 4 && board[1][1] == 5 && board[1][2] == 6 && board[2][0] == 7 && board[2][1] == 8)
{
return 1;
}
}
else
{
return 0;
}
}
//制作菜单
void menu()
{
printf("******************************\n");
printf("******************************\n");
printf("******************************\n");
printf("******************************\n");
printf("****** 1.play ************\n");
printf("****** 2.exit ************\n");
printf("******************************\n");
printf("******************************\n");
printf("******************************\n");
printf("******************************\n");
}
void game()
{
int input = 0;
int board[ROW][COL];
zero(board, ROW, COL);
displayboard(board, ROW, COL);
while (1)
{
printf("开始请按1:>");
scanf("%d", &input);
if (input == 1)
{
casual(board, ROW, COL);
displayboard(board, ROW, COL);
break;
}
else
{
printf("出错了,请重新输入\n");
}
}
while (1)
{
operate(board, ROW, COL);
displayboard(board, ROW, COL);
int ret = check(board, ROW, COL);
if (ret == 1)
{
break;
}
}
printf("恭喜,你赢了\n");
}
//玩家操作,控制数字移动
void operate(int board[ROW][COL], int row, int col)
{
int i = operate_i(board, ROW, COL);
int j = operate_j(board, ROW, COL);
printf("请输入:>");
while (1)
{
char ch = 0;
scanf("%c", &ch);
{
if (ch == 'w')
{
if (i - 1 >= 0)
{
board[i][j] = board[i - 1][j];
board[i - 1][j] = 0;
break;
}
}
else if (ch == 'a')
{
if (j - 1 >= 0)
{
board[i][j] = board[i][j - 1];
board[i][j - 1] = 0;
break;
}
}
else if (ch == 's')
{
if (i + 1 < col)
{
board[i][j] = board[i + 1][j];
board[i + 1][j] = 0;
break;
}
}
else if (ch == 'd')
{
if (j + 1 < row)
{
board[i][j] = board[i][j + 1];
board[i][j + 1] = 0;
break;
}
}
else
{
printf("输入错误,重新输入\n");
}
}
}
}
int main()
{
srand((int)time(NULL));//时间戳,添加任意时间
int input;
do
{
menu();//打印菜单
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (1);
return 0;
}
这个C语言代码好像有点问题,执行时每一步操作都被执行两遍,请问谁能能帮忙解决一下,不胜感激