C语言实现井字棋游戏人机

用C语言实现的井字棋游戏,仅作个人记录
headcpy.h

#include<stdio.h>
#include<stdbool.h>
#include<windows.h>
#define ROW 3
#define ROL 3

static chess_board[ROW][ROL];

void WelcomeInterface();
void InitGame();
void PrintChess();
void PlayerMove();
void ComputerMove();
bool InputLegality(int row,int rol);
char CheckChess();
bool CheckFull();
void JudgeWinner(char input);

maincpy.c

#include"headcpy.h"
int main() 
{
	char winner;
	int select;
	
	WelcomeInterface();
	scanf("%d",&select);
	if(select==1)
	{
			InitGame();
			PrintChess();
			while('c'==CheckChess())
			{
				if(CheckFull())
				break;
				PlayerMove() ;
				system("cls");
				PrintChess();
				winner=CheckChess();
				if(winner=='x')
				break;
				
				if(CheckFull())
				break; 
				ComputerMove();
				system("cls");
				PrintChess();
				winner=CheckChess();
				if(winner=='o')
				break;
			}
			JudgeWinner(CheckChess());		
	}
	return 0;
}

function.c

#include"headcpy.h"
void WelcomeInterface()
{
	printf("---------------\n");
	printf("|[1] StartGame|\n");
	printf("|[0] OverGame |\n");
	printf("---------------\n");
}
void InitGame()
{
	int i,j;
	for(i=0;i<ROW;i++)
	{
		for(j=0;j<ROL;j++)
		{
			chess_board[i][j]=' ';
		}
	}
}
void PrintChess()
{
	int i,j;
	for(i=0;i<ROW;i++)
	{
		printf("|| %c || %c || %c ||\n",chess_board[i][0],chess_board[i][1],chess_board[i][2]);
		if(i<2)
		printf("||---||---||---||\n");
	}
}
void PlayerMove()
{
	srand(time(0));
	int row,rol;
	printf("Player'turn......\n");
	do
	{
		scanf("%d %d",&row,&rol);
		if(InputLegality(row,rol))
		break;
	}while(1);
	chess_board[row][rol]='x';
}
void ComputerMove()
{
	srand(time(0));
	int row,rol;
	printf("Computerx'turn......\n");
	do
	{
		row=rand()%ROW;
		rol=rand()%ROL;
		if(InputLegality(row,rol))
		break;
	}while(1);
	chess_board[row][rol]='o';
}
bool InputLegality(int row,int rol)
{
	if(row>=0&&row<=3)
	{
		if(rol>=0&&rol<=3)
		{
			if(chess_board[row][rol]==' ')
			return true;
		}
	}
	return false;
}
char CheckChess()
{
	int i,j;
	char ret;
	for(i=0;i<ROW;i++)
	{
		if(chess_board[i][0]!=' '&&
		   chess_board[i][0]==chess_board[i][1]&&
		   chess_board[i][0]==chess_board[i][2])
		   return chess_board[i][0];
	}
	for(j=0;j<ROL;j++)
	{
		if(chess_board[0][j]!=' '&&
		   chess_board[0][j]==chess_board[1][j]&&
		   chess_board[0][j]==chess_board[2][j])
		   return chess_board[0][j];
	}
	if(chess_board[0][0]!=' '&&
	   chess_board[0][0]==chess_board[1][1]&&
	   chess_board[0][0]==chess_board[2][2])
	   return chess_board[0][0];
	   
	if(chess_board[0][2]!=' '&&
	   chess_board[0][2]==chess_board[1][1]&&
	   chess_board[0][2]==chess_board[2][0])
	   return chess_board[0][2];
	   
	if(CheckFull())
		return 'h';
	return 'c';
}
bool CheckFull()
{
	int row,rol;
	for(row=0;row<ROW;row++)
	{
		for(rol=0;rol<ROL;rol++)
		{
			if(chess_board[row][rol]==' ')
			return false;
		}
	}
	return true;
}
void JudgeWinner(char input)
{
	switch(input)
	{
		case 'x':printf("Congratulations!You win!\n");break;
		case 'o':printf("Unfortunately.You loose.\n");break;
		case 'h':printf("Fight to draw.\n");break;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值