基于数组的游戏(棋盘游戏):
一旦棋盘上哪方出现3个在一行或一列或对角线上时就结束游戏,那哪一方赢了。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define XS 3
#define YS 3
void init_plate(char arr[XS][YS])/*初始化数组arr[][]*/
{
int i,j;
for(i=0;i<XS;i++)
{
for(j=0;j<YS;j++)
{
arr[i][j]=' ';
}
}
}
void print_plate(char arr[XS][YS])/*打印棋盘*/
{
int i;
for(i=0;i<XS;i++)
{
printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);
if(i!=2)
{
printf("---|---|---\n");
}
}
}
void play_game(char arr[XS][YS])/*游戏中玩家下棋子的位置*/
{
int line,list;
printf("请输入要下棋子的位置(行和列在1~3之间)>");
scanf("%d%d",&line,&list);
if(arr[line-1][list-1]!=' ')
{
printf("输入有误\n");
play_game(arr);/*输入错误时,重新输入下棋的位置*/
}
else arr[line-1][list-1]='X';
}
void computer_game(char arr[XS][YS])/*游戏中电脑下棋子的位置*/
{
int i,j;
printf("电脑下棋>\n");
for(i=0;i<XS;i++)
{
for(j=0;j<YS;j++)
{
if(arr[i][j]==' ')
{
arr[i][j]='+';
goto flag;/*goto语句跳出整个两层循环*/
}
}
}
flag:
if(i*j==9)
{
printf("平局");
}
}
char judge_win(char arr[XS][YS])/*游戏中判断输赢,返回一个char类型的值*/
{
int i;
for(i=0;i<XS;i++)
{
if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2])
return arr[i][0];
}
for(i=0;i<YS;i++)
{
if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i])
return arr[0][i];
}
if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2])
{
return arr[0][0];
}
else if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0])
{
return arr[1][1];
}
else return ' ';
}
int main()/*主函数*/
{
char arr[XS][YS];
int turn;
init_plate(arr);
print_plate(arr);
do
{
play_game(arr);
turn=judge_win(arr);
if(turn!=' ')
{
break;
}
computer_game(arr);
print_plate(arr);
turn=judge_win(arr);
}while(turn==' ');/*没有空格或某方已经赢得比赛就结束*/
printf("游戏结束界面:\n");
print_plate(arr);
if(turn=='X')
{
printf("玩家赢\n");
}
else if(turn=='+')
{
printf("电脑赢\n");
}
system("pause");
return 0;
}
转载于:https://blog.51cto.com/luoyafei/1705982