C语言实现三子棋

主函数:main.c

#include "game.h"
int main()
{
       	srand((unsigned int)time(NULL));//设置随机数生成器
       	int select = 0;
       	int quit = 0;
       	while (!quit)
       	{
       		meun();
       		printf("请输入选项\n");
       		scanf("%d", &select);
       		switch (select)
       		{
       		case 1: game();
       			break;
       		case 0:
       			printf("Bye Bye!\n");
       			quit = 1;
       			break;
       		default:
       			printf("输入错误,重新输入\n");
       			break;
       		}
       	} 
       	system("pause");
       	return 0;
}

子函数:game.c

#include"game.h"  //引入头文件game.h
void meun()
{ 
 printf("*******************************\n"); 
 printf("*******1.play   0.exit*********\n"); 
 printf("*******************************\n");
}
void game()
{
       	char arr[row][col];
       	int x = 0;
       	int y = 0;
       	char ret = 0;
       	Init_borad(arr);//初始化棋盘
       	print_borad(arr);//打印棋盘
       	printf("\n");
       	while (1)
       	{
       		player_move(arr);//玩家下棋
       		printf("\n");
       		if ((ret = check_win(arr)) != ' ')//里面条件成立说明谁赢了或平局,那就跳出循环判断
       		{
       			break;
       		}
       		computer_move(arr);//电脑下棋
       		if ((ret = check_win(arr)) != ' ')//里面条件成立说明谁赢了或平局,那就跳出循环判断
       		{
       			break;
       		}
       		print_borad(arr);//打印出这次你和电脑的走位
       		printf("\n");
       	}
       	if (ret == 'x')
       	{
       		printf("玩家赢\n");
       	}
       	else if (ret == '0')
       	{
       		printf("电脑赢\n");
       	}
       	else if (ret == 'q')
       	{
       		printf("平局\n");
       	}
       	print_borad(arr);//打印出游戏结果
}
void Init_borad(char arr[row][col])//初始化棋盘
{	
	int i,j;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			arr[i][j]=' ';
		}
	}
}
void print_borad(char arr[row][col])//打印棋盘
{	
	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 != row)		
		{			
		printf("---|---|---\n");		
		}	
	}
}
void player_move(char arr[row][col])//玩家下棋
{	
	int x = 0;	
	int y = 0;	
	while (1)	
	{		
		printf("请输入你要下的坐标:\n");		
		scanf("%d%d", &x, &y);		
		if ((x >= 1) && (x <= row) && (y >= 1) && (y <= row) && arr[x - 1][y - 1] == ' ')		
		{			
			arr[x - 1][y - 1] = 'x';			
			break;		
		}		
		else		
		{			
			printf("坐标错误,重新输入\n");		
		}	
	}
}
void computer_move(char arr[row][col])//电脑下棋
{	
	while (1)	
	{		
		int x = rand() % 3;		
		int y = rand() % 3;		
		if (arr[x][y] == ' ')		
		{			
			arr[x][y] = '0';			
			break;		
		}	
	}
}
int is_full(char arr[row][col])//检测棋盘是否满了
{	
	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;
}

char check_win(char arr[row][col])//检测不同的结果并返回不同的值
{	
	int i = 0;	
	for (i = 0; i < row; i++)	
	{		
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')//检测行是否相同	{			
			return arr[i][0];		
		}	
	}
	for (i = 0; i < col; i++)//检测列是否相同	
	{		
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')		
		{			
			return arr[0][i];		
		}	
	}
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')//检测对角线
	{		   		
		return arr[0][0];	
	}
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')//检测对角线
	{								
		return arr[0][2];	
	}
	if (is_full(arr))	
	{		
		return 'q';	
	}	
	return ' ';
}
  
        
        

函数声明:game.h

#ifndef __GAME_H__
#define __GAME__H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#pragma warning(disable:4996)
#define row 3
#define col 3
void game();
void meun();
void Init_borad(char arr[row][col]);
void print_borad(char arr[row][col]);
char check_win(char arr[row][col]);
void player_move(char arr[row][col]);
void computer_move(char arr[row][col]);
int is_full(char arr[row][col]);
#endif  //__GAME_H__


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值