五子棋控制台版C++(简单)

五子棋演示图:

五子棋代码:

#include<iostream>
#include <stdlib.h>
using namespace std;

// -------------------- 数据设计 --------------------
/*
棋盘:
map[i][j]表示坐标(i,j)的值
0表示空地
1表示黑子
2表示白子
如: map[3][6] = 1 表示(3,6)的位置是黑子
*/
const int mapsize = 19;
int map[mapsize][mapsize] = { 0 };
// 表示当前回合数 偶数表示黑棋落子 奇数表示白棋落子
// 如: flag = 20 表示当前是第[20]次落子 由黑方落子
int flag=0;
// -------------------- 数据设计 --------------------
// -------------------- service --------------------
/*
负责人: 张三
功能: 初始化游戏数据
将棋盘的值初始化为0
当前回合设为黑棋(flag设为0)
参数: void
返回值: void
*/
void init();
/*
*难点1
负责人: 张三
功能: 根据传入的坐标(map对应位置)和flag值 判断落点后是否获胜
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示没有获胜
1表示黑子胜利
2表示白子胜利
*/
int isWin(int x, int y);
/*
负责人: 张三
功能: 在指定位置落子
如果map[x][y]是空地 则修改map[x][y]的值:改为相应颜色(flag对应颜色)
否则不操作
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示落子失败 (棋盘已经有子)
1表示落子成功
*/
int playerMove(int x, int y);
// -------------------- service --------------------
// -------------------- view --------------------
/*
功能: 展示选项, 玩家可以在这里选择进入游戏, 进入设置或退出游戏
进入游戏: 调用游戏界面函数gameView();
进入设置: 敬请期待...
退出游戏: 调用exit(0);
*/
void menuView();
/*
负责人: 张三
功能: 根据map数组 打印游戏棋盘
参数: void
返回值: void
*/
void gameView_ShowMap();
/*
负责人: 张三
功能: 根据flag的值 打印游戏胜利界面 用户可以按任意键回到主菜单
参数: void
返回值: void
*/
void winView();
/*
*难点2
负责人: 张三
功能: 游戏界面整合
初始化游戏数据(调用函数init())
while(1){
打印游戏界面(调用函数gameView_ShowMap())
接收玩家坐标输入
落子(调用落子函数playerMove())
(如果落子失败 重新开始循环)
判断游戏是否胜利(调用胜利判断函数isWin())
(如果游戏胜利 调用胜利界面函数 然后结束当前界面)
切换玩家(修改flag值)
}
参数: void
返回值: void
*/
void gameView();
// -------------------- view --------------------
int main()
{
	int testflag = 0;
	menuView();
	//init测试代码
	/*
	init();
	if (flag != 0) {
	printf("init()错误");
	exit(0);
	}
	for (int i = 0; i < 19; i++) {
	for (int j = 0; j < 19; j++) {
	if (map[i][j]) {
	printf("init()错误");
	exit(0);
	}
	}
	}
	printf("init()测试成功\n");
	testflag++;
	*/
	//playerMove测试代码
	/*
	int result = 1;
	result &= playerMove(2, 2);
	result &= playerMove(2, 3);
	result &= playerMove(2, 4);
	result &= playerMove(2, 5);
	if (result != 1 || (map[2][2] && map[2][3] && map[2][4] && map[2][5]) != 1)
	{
	printf("playerMove()错误");
	exit(0);
	}
	flag = 1;
	result &= playerMove(2, 5);
	if (result != 0 || map[2][5] != 1) {
	printf("playerMove()错误");
	exit(0);
	}
	printf("playerMove()测试成功\n");
	testflag++;
	*/
	//isWin测试代码
	/*
	playerMove(2, 1);
	if (isWin(2, 1)) {
	printf("isWin()错误");
	exit(0);
	}
	playerMove(1, 0);
	playerMove(3, 2);
	playerMove(4, 3);
	playerMove(5, 4);
	if (isWin(1, 0) != 2) {
	printf("isWin()错误");
	exit(0);
	}
	printf("isWin()测试成功\n");
	testflag++;*/

	if (testflag == 3) {
		cout<<"service代码测试成功\n";
	}
	return 0;
}
void init() {
	//代码实现
	//map[mapsize][mapsize] = { 0 };
	for (int i = 0; i < mapsize; i++) {
		for (int j = 0; j < mapsize; j++) {
			map[i][j] = 0;
		}
	}
	flag = 0;
}
int isWin(int x, int y) {
	//代码实现
	//水平方向
	int color = flag % 2 + 1;
	int count = 0;
	for (int i = -4; i <= 4; i++) {
		if (y + i < 0 || y + i >= mapsize) {
			continue;
		}
		if (map[x][y + i] == color) {
			count += 1;
		}
		else {
			count = 0;
		}
		if (count == 5) {
			return color == 1 ? 1 : 2;
		}
	}
	//竖直方向
	count = 0;
	for (int i = -4; i <= 4; i++) {
		if (x + i < 0 || x + i >= mapsize) {
			continue;
		}
		if (map[x+i][y] == color) {
			count += 1;
		}
		else {
			count = 0;
		}
		if (count == 5) {
			return color == 1 ? 1 : 2;
		}
	}
	//从左上斜向右下
	count = 0;
	for (int i = -4; i <= 4; i++) {
		if (x + i < 0 || x + i >= mapsize || y + i < 0 || y + i >= mapsize) {
			continue;
		}
		if (map[x + i][y + i] == color) {
			count += 1;
		}
		else {
			count = 0;
		}
		if (count == 5) {
			return color == 1 ? 1 : 2;
		}
	}
	//从左下斜向右上
	count = 0;
	for (int i = -4; i <= 4; i++) {
		if (x - i < 0 || x - i >= mapsize || y + i < 0 || y + i >= mapsize) {
			continue;
		}
		if (map[x - i][y + i] == color) {
			count += 1;
		}
		else {
			count = 0;
		}
		if (count == 5) {
			return color == 1 ? 1 : 2;
		}
	}
	return 0;
}
int playerMove(int x, int y) {
	//代码实现
	if (map[x][y] == 0) {
		map[x][y] = (flag % 2) ? 2 : 1;
		return 1;
	}
	else {
		return 0;
	}
}
void menuView() {
	//代码实现
	cout << "  游戏主页面\n";
	cout << "1.进入游戏\n";
	cout << "2.进入设置\n";
	cout << "3.退出游戏\n";
	cout << "请输入选项:";
	int k = 0;
	cin >> k;
	system("cls");
	if (k == 1) { gameView(); }
	else if (k == 2) { cout << "敬请期待"; }
	else if (k == 3) { exit(0); }
}
void gameView_ShowMap() {
	//代码实现
	cout << "黑子:X,白子:O\n";
	cout << "   ";
	for (int i = 0; i < mapsize; i++) {
		cout << i<<" ";
		if (i < 10) {
			cout << " ";
		}
	}
	cout << endl;
	for (int i = 0; i < mapsize; i++) {
		cout << i<<" ";
		if (i < 10) {
			cout << " ";
		}
		for (int j = 0; j < mapsize; j++) {
			//cout << map[i][j] << "  ";
			if (map[i][j] == 0)cout << ' ' << "  ";
			if (map[i][j] == 1)cout << 'X' << "  ";
			if (map[i][j] == 2)cout << 'O' << "  ";
		}
		cout << endl;
	}
}
void winView() {
	//代码实现
	system("cls");
	if (flag % 2) {
		cout << "白方(O)胜\n";
	}
	else {
		cout << "黑方(X)胜\n";
	}
}
void gameView() {
	//代码实现
	int color = 1;
	while (1) {
		//打印游戏界面(调用函数gameView_ShowMap())
		gameView_ShowMap();
			//接收玩家坐标输入
		int x, y;
		if (flag % 2 == 0) { cout << "黑子执棋,"; }
		else{ cout << "白子执棋,"; }
		cout << "请输入落子位置:";
		cin >> x >> y;
		if (x < 0 || x >= mapsize || y < 0 || y >= mapsize||map[x][y]!=0) {
			system("cls");
			cout << "输入错误,请重新输入:\n";
			continue; 
		}
		system("cls");
		playerMove(x, y);
		if (isWin(x, y)) {
			gameView_ShowMap();
			winView();
			cout << "是否返回主页面?\n";
			cout << "1.返回主页面\n";
			cout << "其它.结束游戏\n";
			cout << "请输入:";
			char m = '0';
			cin >> m;
			system("cls");
			if (m == '1') {
				init();
				menuView();
			}
			else {break;}
		}
		flag += 1;
		color = (color == 1) ? 2 : 1;
			//落子(调用落子函数playerMove())
			//(如果落子失败 重新开始循环)
			//判断游戏是否胜利(调用胜利判断函数isWin())
			//(如果游戏胜利 调用胜利界面函数 然后结束当前界面)
			//切换玩家(修改flag值)
	}
}

这个代码的chatgpt解释:
 

这段代码是一个简单的五子棋游戏的实现,包括数据设计、服务功能和视图展示。它实现了以下主要功能:

  1. init() 函数用于初始化游戏数据,将棋盘的值全部初始化为0,当前回合设为黑棋。

  2. isWin(int x, int y) 函数用于判断落子后是否获胜。它检查水平、竖直、以及两个对角线方向上是否有五个连续的相同颜色的棋子,以判断游戏是否结束。

  3. playerMove(int x, int y) 函数用于在指定位置落子,如果该位置为空地则进行落子,否则返回落子失败。

  4. menuView() 函数用于展示游戏主页面,玩家可以选择进入游戏、进入设置或退出游戏。

  5. gameView_ShowMap() 函数用于打印游戏棋盘。

  6. winView() 函数用于打印游戏胜利界面。

  7. gameView() 函数整合了游戏界面逻辑,实现了游戏循环,玩家输入落子位置,判断是否胜利,切换玩家等功能。

该代码虽然是一个基本的五子棋实现,但还可以进一步完善和优化,例如:

  • 实现更高级的电脑下棋策略,增加游戏的挑战性和趣味性。
  • 添加更多的用户界面交互,例如选择棋子颜色、设置难度等。
  • 优化界面显示,可以使用更漂亮的棋盘绘制方法,让界面更美观。
  • 增加异常处理,对用户的输入进行合法性检查,以防止程序崩溃或出错。

总之,这段代码是一个简单的五子棋游戏框架,可以作为起点进行进一步开发和完善。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值