C语言实现三子棋游戏。

第一次写这么长的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

你可能感兴趣的:(C语言实现三子棋游戏。)