最近学到三子棋的编写,自己写的时候发现二维数组初始化无法完成,把数组元素转化为空格时变成了问号
代码:
void initboard(char board[ROW][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
board[i][j] = ' ';
}
}
}
调试显示:
运行结果:
有没有大手子能解答一下
是你输出的代码错了
48行,这时候i都是3了,越界了
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
int menu()
{
int input = 0;
printf("************************************\n");
printf("************1.开始游戏**************\n");
printf("************0.退出游戏**************\n");
printf("************************************\n");
printf("请选择(1/0):");
scanf("%d", &input);
return input;
}
void initboard(char board[ROW][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
board[i][j] = ' ';
}
}
}
void printboard(char board[ROW][COL])
{
int n = 0;
for (n = 0; n < ROW; n++)
{
int i = 0;
for (i = 0; i < COL; i++)
{
printf("+---");
}
printf("+\n");
int j = 0;
for (j = 0; j < COL; j++)
{
printf("| %c ", board[i][j]);
}
printf("|\n");
}
int m = 0;
for (m = 0; m < COL; m++)
{
printf("+---");
}
printf("+\n");
}
void playermove(char board[ROW][COL])
{
while (1)
{
int x = 0;
int y = 0;
printf("请输入落子点位[1,3]:");
scanf("%d %d", &x, &y);
if (x - 1 < 0 || x - 1 >= ROW || y - 1 < 0 || y - 1 >= COL)
{
printf("坐标不在范围内,请重新输入\n");
continue;
}
if (board[x - 1][y - 1] != ' ')
{
printf("该坐标已落子\n");
continue;
}
board[x - 1][y - 1] = '*';
break;
}
}
void computermove(char board[ROW][COL])
{
while (1)
{
int x = rand() % ROW;
int y = rand() % COL;
if (board[x][y] != ' ' && board[x][y] != '*')
{
board[x][y] = '#';
break;
}
}
}
int draw(char board[ROW][COL])
{
//和棋
int x = 0;
int y = 0;
for (x = 0; x < ROW; x++)
{
for (y = 0; y < COL; y++)
{
if (board[x][y] == ' ')
return 0;
}
}
return 1;
}
int whowin(char board[ROW][COL])
{
int x = 0;
int y = 0;
//赢棋
for (x = 0; x < 3; x++)
{
if (board[x][0] == board[x][1] && board[x][0] == board[x][2] && board[x][0] != ' ')
return board[x][0];
}
for (y = 0; y < 3; y++)
{
if (board[0][y] == board[1][y] && board[0][y] == board[2][y] && board[0][y] != ' ')
return board[0][y];
}
if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] != ' ')
return board[0][0];
if (draw(board))
{
return 'd';
}
return ' ';
}
void game()
{
char board[ROW][COL];
char winner = ' ';
initboard(board, ROW, COL);
printboard(board);
while (1)
{
system("cls");
printboard(board);
playermove(board);
printboard(board);
winner = whowin(board);
if (winner != ' ')
{
break;
}
computermove(board);
printboard(board);
winner = whowin(board);
if (winner != ' ')
{
break;
}
printboard(board);
if (winner == '*')
{
printf("恭喜您赢得胜利!\n");
}
if (winner == '#')
{
printf("电脑乱下都能赢你???\n");
}
if (winner == 'd')
{
printf("平局,建议remake\n");
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
input = menu();
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!