一个简单的三子棋

博客内容涉及游戏开发相关,包含初始化数组、创建棋盘、玩家和电脑落子等操作,还提及函数测试和主函数、头文件等内容,体现了游戏开发中数组与函数的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一份菜单

    void menu()
    {
    	printf("*********************\n");
    	printf("*****  1. play  *****\n");
    	printf("*****  0. exit  *****\n");
    	printf("*********************\n");
    }

玩游戏否

    void test()
    {
    	int input;
    	srand(time(NULL));
    	do{
    		menu();
    		printf("请选择\n");
    		scanf_s("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输入非法,请从新输入\n");
    			break;
    		}
    	} while (input);
    }

初始化一下数组

    void chushihua(char qi[HANG][LIE], int hang, int lie)
    {
    	int i, j;
    	for (i = 0; i < hang; i++)
    	for (j = 0; j < lie; j++)
    		qi[i][j] = ' ';
    }

来个棋盘

    void display(char qi[HANG][LIE], int hang, int lie)
    {
    	int i;
    	for (i = 0; i < hang; i++)
    	{
    		int j;
    		for (j = 0; j < lie; j++)
    		{
    			printf(" %c ", qi[i][j]);
    			if (j < lie - 1)
    				printf("|");
    		}
    		printf("\n");
    		if (i < hang - 1)
    		{
    			for (j = 0; j < lie; j++)
    			{
    				printf("---");
    				if (j < lie - 1)
    					printf("|");
    			}
    			printf("\n");
    		}
    
    	}

玩家下一颗子

    void mine(char qi[HANG][LIE], int hang, int lie)
    {
    	int x, y;
    	printf("你的回合\n");
    	while (1)
    	{
    		printf("请输入一个位置\n");
    		scanf_s("%d %d",&x,&y);
    		if (x>=1 && x<=3 && y>=1 && y<=3 && qi[x - 1][y - 1] == ' ')
    		{
    			qi[x - 1][y - 1] = '*';
    			break;
    		}
    		else
    			printf("输入错误\n");
    	}
    
    }

电脑下一颗子

    void ai(char qi[HANG][LIE], int hang, int lie)
    {
    	int x, y;
    
    	printf("电脑的回合\n");
    	while (1)
    	{
    		x = rand() % 3;
    		y = rand() % 3;
    		if (x >= 0 && x <= 2 && y >= 0 && y <= 2 && qi[x][y] == ' ')
    		{
    			qi[x][y] = '#';
    			break;
    		}
    	}
    }

靠什么赢

    char duijue(char qi[HANG][LIE], int hang, int lie)
    {
    	int i,j;
    	int count = 0;
    	for (i = 0; i < hang; i++)
    	{
    		if (qi[0][i] == qi[1][i] && qi[1][i] == qi[2][i] && qi[0][1] != ' ')
    			return qi[0][i];
    		else if (qi[i][0] == qi[i][1] && qi[i][1] == qi[i][2] && qi[i][0] != ' ')
    			return qi[i][0];
    		else if (qi[0][0] == qi[1][1] && qi[1][1] == qi[2][2] && qi[0][0] != ' ')
    			return qi[0][0];
    		else if (qi[0][2] == qi[1][1] && qi[1][1] == qi[2][0] && qi[0][2] != ' ')
    			return qi[0][2];
    	}
    	for (i = 0; i < hang;i++)
    	for (j = 0; j < lie;j++)
    	if (qi[i][j] != ' ')
    	{
    		count++;
    	}
    	if (count >= hang*lie)
    		return 'q';
    
    
    }

来个函数测试一下

    void game()
    {
    	int set;
    	char qi[HANG][LIE] = { 0 };
    	chushihua(qi,HANG,LIE);
    	display(qi,HANG,LIE);
    	while (1)
    	{
    
    		mine(qi, HANG, LIE);
    		display(qi, HANG, LIE);
    		set=duijue(qi, HANG, LIE);
    		//panding();
    		if (set == '*')
    		{
    			printf("玩家获胜\n");
    			break;
    		}
    		else if (set == '#')
    		{
    			printf("电脑获胜\n");
    			break;
    		}
    		else if (set == 'q')
    		{
    			printf("平局\n");
    			break;
    		}
    		ai(qi, HANG, LIE);
    		display(qi, HANG, LIE);
    		set=duijue(qi, HANG, LIE);
    		if (set == '*')
    		{
    			printf("玩家获胜\n");
    			break;
    		}
    		else if (set == '#')
    		{
    			printf("电脑获胜\n");
    			break;
    		}
    		else if (set == 'q')
    		{
    			printf("平局\n");
    			break;
    		}
    		//panding();
    	}
    
    }

主函数

    int main()
    {
    	test();
    	system("pause");
    	return 0;
    }

头文件

    #define HANG 3
    #define LIE 3
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    void chushihua(char qi[HANG][LIE],int hang,int lie);
    void display(char qi[HANG][LIE], int hang, int lie);
    void mine(char qi[HANG][LIE], int hang, int lie);
    void ai(char qi[HANG][LIE], int hang, int lie);
    char duijue(char qi[HANG][LIE], int hang, int lie);

easy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值