IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 三子棋游戏的实现 -> 正文阅读

[C++知识库]三子棋游戏的实现

今天我们来写一个三子棋小游戏,类似于之前的扫雷游戏,都是对于二维数组学习印象的加深。先我们还是和之前一样,创建一个新的项目,在这个项目中,test.c是游戏的逻辑运算,game.c是游戏的底层逻辑,game.h是声明游戏的头文件以及函数。

首先我们创建test.c。在test中我们先要进入switch语句中进行我们游戏的选择,打印出菜单栏,供我们进行选择。

游戏开始

初始化

在三子棋游戏的时候,我么首先要创建一个二维数组,这个是用来寄存我们所下棋的位置,我们创建为Board,在创建数组之后,我们需要进行对数组进行初始化,将其里面所有的 元素全都初始化为‘ ’(空格),但是为了使我们能更好的看到我们数组的每个元素的位置,我们需要打印出来一个棋盘,在棋盘中的正确位置存放我们的二维数组,并对其进行初始化。
?

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

打印棋盘

在对其进行初始化之后,我们便需要对其进行打印棋盘

在打印棋盘的时候我们需要对棋盘进行打印的同时插入我们的二位数组,在其中我么使用 %c 的方式进行打印棋盘中一个格子中所给我们展示的东西,直径用 | 分割开来,并且每行格子之间用---|---|---来进行分割,使我们的棋盘看起来更加的完美。在这里需要注意,因为我们并不是在最后一行和最后一列要打印 | 和 --- 的,所以我们在进行循环的时候我们需要进行判断,因此 i , j ,要小于row-1 ,col-1。

void DidplayBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}
		}
		printf("\n");
		if (i < row - 1)
		{
			for (int j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
				{
					printf("|");
				}
			}
			printf("\n");
		}
	}
}

玩家下棋

在玩家下棋的时候比较简单,我们创建两个整型变量来接受我们二维数组的坐标,当我们输入坐标后,首先我们要判断坐标的合法性,因为二维数组的下标是由0开始的,因此我们所输入的坐标要进行-1才能到我们实际的board数组中的合适位置上,当我们在输入合法坐标时候,还要判断坐标是否被占用,当坐标被占用时候我们这个位置就不能下入棋子,因此我们玩家下棋的时候放入一个while循环,这个循环为一个死循环,当我们输入一个合法且不被占用的坐标时候,我们才会下入棋子break跳出循环。

void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:>\n");
		printf("请输入坐标:>\n");
		scanf_s("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			//下棋
			//判断该坐标是否被占用
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("该坐标被占用\n");
				printf("请重新输入\n");
			}
		}
		else
		{
			printf("非法坐标,请重新输入\n");
		}
	}
}

电脑下棋

在电脑下棋时候我们首先要创建随机数,我们对随机数进行取模3,所得的坐标一定是合法的,因此我们在这里并不需要判断坐标的合法性,只需要判断坐标是否被占用,如玩家下棋一样,也是一个死while循环,只有当在board数组中放入元素时候我们break跳出循环。

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

判断输赢

在判断输赢时候,只有三种情况

1、三行的元素都相同

2、三列的元素都相同

3、对角线的元素都相同

我们在判断游戏输赢的时候,

玩家赢 返回————'*'
电脑赢 返回————'#'
平局 返回—————'Q'
继续 返回—————'C'

static int is_full(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;//没满
			}
		}
	}
	return 1;//满了
}
//判断输赢
char Is_Win(char board[ROW][COL], int row, int col)
{
	//判断行
	for (int i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
		{
			return board[i][1];
		}
	}
	//判断列
	for (int j = 0; j < col; j++)
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[2][j] != ' ')
		{
			return board[0][j];
		}
	}
	//判断对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	//判断平局
	if (is_full(board, row, col) == 1)
	{
		return 'Q';
	}
	//继续
	return 'C';
}

以上就是三子棋游戏的所有游戏逻辑,具体代码C++: C语言学习代码 - Gitee.com

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 10:51:31  更:2022-02-04 10:53:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:47:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码