C语言实现三子棋

C语言实现三子棋,第1张

C语言实现三子棋

目录

一、游戏介绍

二、游戏实现


一、游戏介绍

在3x3网格中与电脑进行下棋。玩家先下电脑再下,首先完成三子一线的为游戏赢家:

 

二、游戏实现
    游戏选择:
    int main()
    {
    	int input = 0;
    	while (1)
    	{
    		meanu();
    		printf("请选择:>");
    		scanf("%d", &input);
    		if (input == 1)
    		{
    			printf("开始游戏;n");
    			//game();
    			break;
    		}
    		else if(input == 0)
    		{
    			printf("退出游戏n");
    			break;
    		}
    		else
    		{
    			printf("选择错误,请重新选择n");
    		}
    	}
    }

    游戏菜单:
    void meanu()
    {
    	printf("***************************n");
    	printf("********  三子棋   ********n");
    	printf("*****   1.开始游戏  *******n");
    	printf("*****   0.退出游戏  *******n");
    	printf("***************************n");
    
    }

    游戏初始化:
    void init_borad(char arr[ROW][COL],int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			arr[i][j] = ' ';
    		}
    	}
    }
    display_borad(char arr[ROW][COL], int row, int col)
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < row; i++)
    	{
    		for (j = 0; j < col; j++)
    		{
    			printf(" %c ",arr[i][j]);
    			if (j < col - 1)
    			{
    				printf("|");
    			}
    		}
    		printf("n");
    		if (i < row - 1)
    		{
    			for (j = 0; j < col; j++)
    			{
    				printf("---");
    				if (j < col - 1)
    				{
    					printf("|");
    				}
    			}
    			printf("n");
    		}
    	}
    }

    玩家进行游戏:
    void player_move(char arr[ROW][COL], int row, int col)
    {
    	while (1)
    	{
    		int x = 0;
    		int y = 0;
    		printf("请输入你下棋的坐标:>");
    		scanf("%d,%d", &x, &y);
    		if ((x >= 1 && x <= 3) && (y >= 1 && y <= 3))
    		{
    			if (arr[x - 1][y - 1] == ' ')
    			{
    				arr[x - 1][y - 1] = '*';
    				break;
    			}
    			else
    			{
    				printf("该坐标已被占用,请重新输入n");
    			}
    		}
    		else
    		{
    			printf("输入不合法,请重新输入n");
    		}
    	}
    }

    电脑进行游戏:
    void computer_move(char arr[ROW][COL], int row, int col)
    {
    	printf("电脑下;>n");
    	int x = rand() % 3;
    	int y = rand() % 3;
    	while (1)
    	{
    		if (arr[x - 1][y - 1] == ' ')
    		{
    			arr[x - 1][y - 1] = '#';
    			break;
    		}
    	}
    }

    游戏输赢判断:
    int is_full(char arr[ROW][COL], int row, int col)
    {
    	
    	for (int i = 0; i < row; i++)
    	{
    		for (int j = 0; j < col; j++)
    		{
    			if (arr[i][j] == ' ')
    			{
    				return 0;
    			}
    		}
    	}
    	return 1;
    }
    
    char is_win(char arr[ROW][COL], int row, int col)
    {
    	for (int 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 (int j = 0; j < col; j++)
    	{
    		if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j] && arr[0][j] != ' ')
    		{
    			return arr[0][j];
    		}
    	}
    	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
    	{
    		return arr[1][1];
    	}
    	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
    	{
    		return arr[1][1];
    	}
    	if (is_full(arr,ROW,COL) == 1)
    	{
    		return 'Q';
    	}
    
    	return 'C';
    }

    7.主函数

    #define _CRT_SECURE_NO_WARNINGS
    
    #include"game.h"
    
    void meanu()
    {
    	printf("***************************n");
    	printf("********  三子棋   ********n");
    	printf("*****   1.开始游戏  *******n");
    	printf("*****   0.退出游戏  *******n");
    	printf("***************************n");
    }
    
    void game()
    {
    	char ret = 0;
    	//初始化棋盘
    	char arr[ROW][COL] = { 0 };
    	init_borad(arr,ROW, COL);
    	//打印棋盘
    	display_borad(arr, ROW, COL);
    	while (1)
    	{
    		//玩家下棋
    		player_move(arr, ROW, COL);
    		display_borad(arr, ROW, COL);
    		ret = is_win(arr, ROW, COL);
    		if (ret != 'C')
    		{
    			break;
    		}
    		//电脑下棋
    		computer_move(arr, ROW, COL);
    		display_borad(arr, ROW, COL);
    		//判断结果(以'C'表示继续,以'#'表示电脑赢,以'*'表示玩家赢,以'Q'表示和局)
    		ret = is_win(arr, ROW, COL);
    		if (ret != 'C')
    		{
    			break;
    		}
    	}
    	if (ret == '*')
    	{
    		printf("玩家赢n");
    	}
    	else if (ret == '#')
    	{
    		printf("电脑赢n");
    	}
    	else
    	{
    		printf("平局n");
    	}
    }
    
    int main()
    {
    	srand((unsigned int)time(NULL));
    	int input = 0;
    	while (1)
    	{
    		meanu();
    		printf("请选择:>");
    		scanf("%d", &input);
    		if (input == 1)
    		{
    			printf("开始游戏;n");
    			game();
    			break;
    		}
    		else if(input == 0)
    		{
    			printf("退出游戏n");
    			break;
    		}
    		else
    		{
    			printf("选择错误,请重新选择n");
    		}
    	}
    	return 0;
    }
    

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存