c语言简易游戏----三子棋游戏的设计

前言

        本次游戏设计为三子棋游戏,不涉及算法相关内容,属于初步学习c语言所能设计的游戏。

在正式开始前呢,我们需要明白文件的分装进行。

game.h以及game.c两个文件 

一、 三子棋游戏思想

        相信各位读者都玩过三子棋游戏,在三子棋游戏中,我们都知道,任何一方横排、竖排或者对角线都是自己的棋子,便可获得胜利。基于这个思想,我们在c语言中,又该如何进行设计呢?

        1.1 菜单函数声明与game函数的声明

                玩过游戏的读者都知道,游戏首先得有菜单,其次根据菜单的提示我们再进行游戏或是设置退出游戏。在设计三子棋游戏中我们也是如此,我们先设置一个简易的菜单,例如输入1进行游戏,输入0退出游戏,那么我们就可以根据如下方式来设置菜单。

void menu()
{
    printf("****************************\n");
    printf("*******  1.开始游戏  *******\n");
    printf("*******  0.退出游戏  *******\n");
    printf("****************************\n");

}

                那么我们在设置完菜单之后,便可以引用到主函数中,那么玩游戏肯定不是只玩一次,二是可以选择一直玩直到自己选择退出游戏再退出。这时我们便可以借助do while循环来实现。同时我们也需要来控制输入1或0分别会如何执行下去,这时便可以使用到switch代码如下。

#include <stdio.h>
void menu()
{
	printf("****************************\n");
	printf("*******  1.开始游戏  *******\n");
	printf("*******  0.退出游戏  *******\n");
	printf("****************************\n");

}

int main()
{
    int input;
    do
    {
        menu();
        printf("请选择是否开始游戏:>\n");
        scanf("%d",&input);
        switch(input)
        {
            case 1:
            break;
            case 0:
            break;
            default:
            break;
        }
     }while(input);
        return 0;
}

                在以上代码完成之后,我们便可以开始写我们的game函数代码了。那么game函数我们又该如何去设计呢?  

        1.2game函数的设计

                基础代码写完之后,我们便要开始写我们的游戏代码game()函数。

下面则是代码的实现。

void game()
{
	char ret;
	char board[ROW][COL];
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		ComuputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}
		if (ret == '*')
		{
			printf("玩家获胜\n");
		}
		else if (ret == '#')
		{
			printf("电脑获胜 \n");
		}
		else
		{
			printf("平局\n");
		}
}

棋盘初始化

void InitBoard(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

打印分割线

void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[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");
		}
	}
}
        1.3人机下棋以及玩家下棋

                 人机下棋时,我们采取随机下的方式,也就是使用随机数rand让rand的范围在1~9之间,玩家下棋则是采用输入的方式。下面是代码的实现。

void PlayerMove(char board[ROW][COL], int row, int col)
{
	int a, b;
	printf("玩家下棋\n");
	while (1)
	{
		printf("请输入要下的坐标:>\n");
		scanf("%d %d", &a, &b);
		if (a >= 1 && a <= row && b >= 1 && b <=col)
		{
			if (board[a - 1][b - 1] == ' ')
			{
				board[a - 1][b - 1] = '*';
				break;
			}
			else
			{
				printf("此处坐标已被占用,请重新输入\n");
			}
		}
		else
		{
			printf("坐标错误,请再次输入\n");
		}
	}
}

void ComuputerMove(char board[ROW][COL], int row, int col)
{
	int x, y;
	x = rand() % row;
	y = rand() % col;
	printf("电脑下棋\n");
	while (1)
	{
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}
         1.4判断输赢

                判断输赢其实比较简单,下面是代码实现。

        

static int Full(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] != ' ')
				return 0;
		}

	}
	return 1;
}

char Win(char board[ROW][COL], int row, int col)
{
	int i;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
	{
		return board[0][2];
	}
	if (Full(board, ROW, COL))
	{
		return 'Q';
	}
	return 'C';
}

 总结

        总的来说,每个文件之间需要进行分装,同时在使用时,game.h文件用来放头文件以及函数声明相关内容。 

以上便是本篇博客的所有内容,可能比较简洁,有所不足欢迎各位大佬指路,觉得有所帮助可以来个免费的三连谢谢。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值