作为新手的我最近好久没写博客了,最近工作时间长,没什么特别多的时间学习,不过还是有一点练习的,写了个三子棋的代码。但是写的程序有点问题,int 返回字符类型没有执行,条件满足了不能返回,因为是自学,自检暂时也没解决这个问题,各位大佬要是看到请稍微指点指点。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void mune()
{
printf("*************************\n");
printf("**** 1.play 2.exit ****\n");
printf("*************************\n");
}
char mull(char 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]!=' ')
return 1;
}
}
return 0;
}
char judgeboard(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
if(board[i][0]==board[i][1] && board[i][0]==board[i][2])
return board[i][0] ;
}
for(i=0;i<col;i++)
{
if(board[0][i]==board[1][i] && board[0][i]==board[2][i])
return board[0][col];
}
if(board[0][0]==board[1][1] && board[0][0]==board[2][2])
return board[0][0];
if(board[0][2]==board[1][2] && board[2][0]==board[2][0])
return board[row][col];
if(1==mull(board,ROW,COL))
return 'c';
else
return 'd';
}
void computboard(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("电脑回合\n");
while(1)
{
x=rand()%COL+1;
y=rand()%COL+1;
if(x>=1 && x-1<=ROW && y>=1 && y-1<=COL)
{
if(board[x-1][y-1]==' ')
{
board[x-1][y-1]='#';
break;
}
}
}
}
void myboard(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("玩家回合\n");
while(1)
{
printf("请输入坐标:>");
scanf("%d%d",&x,&y);//玩家输入坐标
if(x>=1 && x-1<=ROW && y>=1 && y-1<=COL)
{
if(board[x-1][y-1]==' ')//当棋盘里的输入的坐标没有符号时
{
board[x-1][y-1]='*';//往棋盘坐标里赋*
break;
}
else
printf("请重新输入\n");
}
else
printf("该坐标非法\n");
}
}
void initBoard(char board[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<ROW;i++)//确定三子棋行数
{
int z=0;
for(j=0;j<COL;j++)//每一行的棋盘的具体情况
{
printf(" %c ",board[i][j]);
if(j<COL-1)
printf("|");
}
printf("\n");
for(z=0;z<COL;z++)
{
printf("---");
if(z<COL-1)
printf("|");
}
printf("\n");
}
}
void intboard(char 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]=' ';
}
}
}
void game()
{
char ret=0;
char board[ROW][COL]={0};
intboard(board,ROW,COL);//初始化三子棋
initBoard(board,ROW,COL);//打印三子棋棋盘
while(1)
{
myboard(board,ROW,COL);//玩家下棋
initBoard(board,ROW,COL);//打印棋盘
ret=judgeboard(board,ROW,COL);
if(ret=='c')
{
break;
}
else
printf("继续\n");
computboard(board,ROW,COL);//电脑下棋
initBoard(board,ROW,COL);//打印棋盘
ret=judgeboard(board,ROW,COL);
if(ret=='c')
{
break;
}
}
if(ret=='*')
printf("恭喜你获胜了\n");
if(ret=='#')
printf("小菜鸡,你输了\n");
if(ret=='d')
printf("平局\n");
}
int main()
{
int input=0;
srand((unsigned int)time(NULL));//根据时间随机显示一个数
do
{
mune();//三子棋游戏主页面
printf("请选择是否进入游戏:>(1/0)");//选择进游戏
scanf("%d",&input);
switch(input)//1进入游戏,0退出,其他选择重新进行选择
{
case 0:
printf("退出游戏");
break;
case 1:
game();//选择进去游戏跳转至游戏里
break;
default:
printf("选择错误,请重新选择");
}
}
while(input);
return 0;
}