用C语言实现三子棋

分为3个文件。注意:在写调用函数时,要注意调用函数的参数。

test.c//测试

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"game.h"


void game()
{
	char p = 0;
	char arr[row][col]={0};
	init(arr,row,col);
	chess_border(arr,row,col);
	srand((unsigned int)time(NULL));
	while(1)
	{
		player(arr,row,col);
		p = win(arr,row,col);
		if( p=='M')
		{
			printf("玩家赢\n");
			break;
		}
		else if( p=='Y')
		{
			printf("电脑赢\n");
			break;
		}
		else if( p =='e')
		{
			printf("平局\n");
			break;
		}
		computer(arr,row,col);
		p = win(arr,row,col);
		if( p=='M')
		{
			printf("玩家赢\n");
			break;
		}
		else if( p=='Y')
		{
			printf("电脑赢\n");
			break;
		}
		else if( p=='e')
		{
			printf("平局\n");
			break;
		}
	}
}
void menu()
{
printf("-----------------------------------\n");
printf("@@@  1.play             0.exit  @@@\n");
printf("-----------------------------------\n");
}
int main()
{
	int input = 0;
	do
	{
	menu();
	printf("请选择:-->");
	scanf("%d",&input);
	switch(input)
	{
	case 1:
		game();
		break;
	case 0:
		break;
	default:
		printf("选择错误,请重新输入\n");
		break;
	}
	}while(input);
	return 0;
}

游戏环节
game.c
#include"game.h"

void init(char arr[row][col],int r,int c)//初始化数组
{
	int i =0;
	int j =0;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			arr[i][j]=' ';
		}
	}
}
void chess_border(char arr[row][col],int r,int c)//设置棋盘
{
	int i =0;
	for(i=0;i<row;i++)
	{
		printf(" %c | %c | %c \n", arr[i][0],arr[i][1],arr[i][2]);
		if(i!=2)
		{
		printf("---|---|---\n");
		}
	}
}
void player(char arr[row][col],int r,int c)//玩家走
{
	int i =0,j = 0;
	while(1)
	{
		printf("请玩家输入坐标:\n");
		scanf("%d%d",&i,&j);
		if((i>=0)&&(i<row)&&(j>=0)&&(j<col))
		{
			if(arr[i][j]==' ')
			{
				arr[i][j]='M';
				chess_border(arr,row,col);
				break;
			}
			else
			{
			printf("下标输入有误,请重新输入\n");
			}
		}
		else
		{
			printf("下标输入有误,请重新输入\n");
		}
	
	}
}
void computer(char arr[row][col],int r,int c)//电脑走
{
	while(1)
	{
		int i =rand()%3;
		int j =rand()%3;//随机产生一个坐标
			if(arr[i][j]==' ')
			{
				printf("请电脑走:\n");
				arr[i][j]='Y';
				chess_border(arr,row,col);
				break;
			}
	}
}
char win(char arr[row][col],int r,int c)//判赢
{
	int i =0;
	int j =0;
	for(i=0;i<row;i++)
	{
	if((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && arr[i][2]!=' ')
		{
			return arr[i][1];
		}
	}
	for(j=0;j<col;j++)
	{
	if((arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j]) && arr[2][j]!=' ')
		{
			return arr[1][j];
		}
	}
	if((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && arr[2][2]!=' ')
		{
			return arr[2][2];
		}
	if((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && arr[2][0]!=' ')
		{
			return arr[2][0];
		}	
	if(equal(arr,r,c))
	{
		return 'e';
	}
	return ' ';
}
 int equal(char arr[row][col],int r,int c)//判平局
{
	int i =0;
	int j =0;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			if(arr[i][j]==' ')
			{
				return 0;
			}
		}
	}
	return 1;
}



game.h//头文件

   
   
#ifndef _GAME_H__ #define _GAME_H__ #include<stdio.h> #include<stdlib.h> #include<time.h> #define row 3 #define col 3
 void init(char arr[row][col],int r,int c);  void chess_border(char arr[row][col],int r,int c);  void player(char arr[row][col],int r,int c);  void computer(char arr[row][col],int r,int c);  char win(char arr[row][col],int r,int c);  int equal(char arr[row][col],int r,int c);
#endif//_GAME_H__



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值