第一次写这么长的C语言代码,超级喜欢这样的游戏代码,难的不是写出来,难的是让写的电脑打败自己,这也算是智能代码吧。
在创建棋盘和判断输赢上做到了动态, 虽然对对手电脑的智商做了优化,但是优化的代码写的很粗糙,希望自己以后可以写出来更好的代码。
代码如下:
game.h (头文件代码)
#include
#define ROW 3
#define COL 3
#define COUNT 3
void init(char arr,int row ,int col); //初始化数组(棋盘)
void print(char arr,int row,int col); //打印棋盘
void playergame(char arr,int row,int col,int x,int y); //玩家选坐标
void computergame(char arr,int row,int col); //电脑选坐标
int IsWin(char arr,int row,int col); //判断输赢
int Tie(char arr,int row,int col); //平局
test.c (主函数代码)
#include "game.h"
int main()
{
char arr[ROW][COL] = {0};
while(1)
{
int num = 0;
init(arr,ROW,COL); //初始化数组(棋盘)
printf("*******************\n");
printf("**** 1.paly ****\n");
printf("**** 0.exit ****\n");
printf("*******************\n");
printf("请输入选项:\n");
scanf("%d",&num);
switch(num)
{
case 1:
while(1)
{
int r = 0,c = 0;
print(arr,ROW,COL);
printf("请玩家输入坐标:\n");
scanf("%d %d",&r,&c);
playergame(arr,ROW,COL,r,c); //玩家选坐标
if(IsWin(arr,ROW,COL) == 1) //判断输赢
{
print(arr,ROW,COL); //打印棋盘
printf("玩家赢!\n");
break;
}
if(Tie(arr,ROW,COL) == 0) //平局
{
print(arr,ROW,COL); //打印棋盘
printf("平局!\n");
break;
}
if(arr[r-1][c-1] != 'X')
{
continue;
}
print(arr,ROW,COL); //打印棋盘
printf("电脑走:\n");
computergame(arr,ROW,COL,r,c); //电脑选坐标
if(IsWin(arr,ROW,COL) == 0) //判断输赢
{
print(arr,ROW,COL); //打印棋盘
printf("电脑赢!\n");
break;
}
if(Tie(arr,ROW,COL) == 0) //平局
{
print(arr,ROW,COL); //打印棋盘
printf("平局!\n");
break;
}
}
break;
case 0:
return 0;
default:printf("输入错误,请重新输入:\n");
}
}
return 0;
}
game.h (外函数代码)
#include "game.h"
#include
#include
void init(char arr[ROW][COL],int row ,int col) //初始化数组(棋盘)
{
int i = 0, j = 0;
for(i=0 ;irow || x<1)
{
printf("输入的坐标有误,请重新输入;\n");
return 0;
}
if(y>col || y<1)
{
printf("输入的坐标有误,请重新输入;\n");
return 0;
}
if(arr[x-1][y-1] != ' ')
{
printf("输入的坐标已被填充,请重新输入;\n");
return 0;
}
arr[x-1][y-1] = 'X';
}
void computergame(char arr[ROW][COL],int row,int col) //电脑选坐标
{
int ret1 = 0, ret2 = 0;
int i = 0, j = 0;
//抢中间
if(arr[1][1] == ' ')
{
arr[1][1] = '0';
return 0;
}
//赢玩家
for(i=0 ;i=0)
{
tmp = tmp +arr[i+con][j-con];
}
}
if(tmp/COUNT == 'X')
{
return 1;
}
if(tmp/COUNT == '0')
{
return 0;
}
}
}
for(i=0 ;i0 && j+con<=COL)
{
tmp = tmp +arr[i-con][j+con];
}
}
if(tmp/COUNT == 'X')
{
return 1;
}
if(tmp/COUNT == '0')
{
return 0;
}
}
}
}
int Tie(char arr[ROW][COL],int row,int col) //平局
{
int i = 0, j = 0;
for(i=0 ;i|