继上次扫雷游戏后,这次的#字棋游戏来啦,整体跟扫雷游戏差不多,有一些细微差别,但是比扫雷小游戏简单,ok 不废话 上代码。
首先还是头文件跟变量的使用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
接着就是主函数的内容,跟扫雷游戏差不多
int main()
{
int input;
srand((unsigned int)time(NULL));
do{
menu();
printf("1 进行游玩\n0 退出游戏\n");
printf("请您选择:");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
default :
printf("选择错误,请重新选择\n");
break;
}
}while(input);
return 0;
}
main中的menu函数跟game函数
void menu()
{
printf("----------------\n");
printf("-----1.PLAY-----\n");
printf("-----0.EXIT-----\n");
printf("----------------\n");
}
void game()
{
char board[ROW][COL];
CSboard(board,ROW,COL);//初始化棋盘
Playboard(board,ROW,COL);//打印棋盘
char res;
while(true)//设计成死循环,知道比赛出现输赢或者平局才跳出循环
{
//既然是我们设计的游戏 肯定是我们先手啦QWQ
Playermove(board,ROW,COL);
Playboard(board,ROW,COL);
//每下一次棋都要判断一次输赢
res=Orwin(board,ROW,COL);
if(res!='C')
break;
//笨蛋电脑下棋
Computermove(board,ROW,COL);
Playboard(board,ROW,COL);
//同上
res=Orwin(board,ROW,COL);
if(res!='C')
break;
}
if(res=='*')
printf("玩家胜!!!\n");
else if(res=='#')
printf("电脑胜!!!\n");
else printf("实力相当,平局\n");
}
剩下的就是处理#字棋游戏的各种函数啦,注释都写在代码里咯
void CSboard(char board[ROW][COL],int row,int col)
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
board[i][j]=' ';
}
}
void Playboard(char board[ROW][COL],int row,int col)
{
for(int i=0;i<row;i++)
{ //此行打印数据
printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
//此行打印棋盘的分割线
if(i<row-1)
printf("---|---|---\n");
}
}
void Playermove(char board[ROW][COL],int row,int col)
{
int x;
int y;
printf("请大神下棋:");
while(true)
{
printf("请输入下棋的坐标,中间使用空格");
scanf("%d %d",&x,&y);
if(x >= 1 && x <= row && y >= 1 && y <= col)
{
if(board[x-1][y-1]==' ')//因为初始化棋盘时 下标是从0开始的 0 1 2 而此时输入的坐标范围是1-3。
{
board[x-1][y-1]='*';
break;
}
else
printf("坐标被占用,请重新输入坐标\n");
}
else
printf("坐标越界,请重新输入");
}
}
void Computermove(char board[ROW][COL],int row,int col)
{
int x;
int y;
printf("电脑下棋\n");
while(true)
{
x=rand() % row;//0-2范围内的随机数字
y=rand() % col;//同上
if(board[x][y]==' ')
{
board[x][y]='#';
break;
}
}
}
int Isfull(char board[ROW][COL],int row,int col)
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(board[i][j]==' ')
return 0;//棋盘没有被下满
}
}
return 1;//棋盘被下满了,游戏平局
}
char Orwin(char board[ROW][COL],int row,int col)
{
//行赢了
for(int i=0;i<row;i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
{
return board[i][0];
}
}
//列赢了
for(int j=0;j<col;j++)
{
if (board[j][0] == board[j][1] && board[j][1] == board[j][2] && board[j][0] != ' ')
{
return board[j][0];
}
}
//对角线赢了
//对角线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
return board[1][1];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
return board[1][1];
//谁都没赢,平局
if (Isfull(board, row, col) == 1)
{
return 'Q';
}
return 'C';//游戏没结束 继续游戏
}