写了个五子棋小游戏,想问问Dalao们的意见
  • 板块灌水区
  • 楼主下一刻悲哀
  • 当前回复33
  • 已保存回复33
  • 发布时间2020/10/2 15:00
  • 上次更新2023/11/5 12:15:06
查看原帖
写了个五子棋小游戏,想问问Dalao们的意见
217103
下一刻悲哀楼主2020/10/2 15:00

写了个五子棋小游戏,想问问Dalao们的意见

#include<bits/stdc++.h>
#include<Windows.h>
#include<conio.h>

using namespace std;

int jian_zhi;
char qi_pan[17][17];	//棋盘
int dang_qian[2];	//当前操作位置
char wan_jia;	//改玩家A/B落子

void zhan_xian() {
	for (int i = 1; i <= 40; i++)	cout << endl;
	for (int i = 1; i <= 15; i++) {
		for (int j = 1; j <= 15; j++) {
			if (dang_qian[0] == i && dang_qian[1] == j) {
				printf("%c", 'H');
			}
			else {
				printf("%c", qi_pan[i][j]);
			}
			cout << ' ';
		}

		if (i == 1) {
			cout << "          " << "当前: 玩家 " << wan_jia;
		}
		if (i == 3) {
			cout << "          " << "操作说明:";
		}
		if (i == 4) {
			cout << "          " << "当前位置: H ";
		}
		if (i == 5) {
			cout << "          " << "向上移动: ↑   向下移动: ↓   向左移动 ←   向右移动 → ";
		}
		if (i == 6) {
			cout << "          " << "落子: enter";
		}
		if (i == 8) {
			cout << "          " << "退出:esc";
		}

		cout << endl;
	}
}

void left() {
	if (dang_qian[1] > 1) {
		dang_qian[1] = dang_qian[1] - 1;
	}

}

void right() {
	if (dang_qian[1] < 15) {
		dang_qian[1] = dang_qian[1] + 1;
	}
}

void up() {
	if (dang_qian[0] > 1) {
		dang_qian[0] = dang_qian[0] - 1;
	}
}

void down() {
	if (dang_qian[0] < 15) {
		dang_qian[0] = dang_qian[0] + 1;
	}
}

void enter() {
	qi_pan[dang_qian[0]][dang_qian[1]] = wan_jia;	//落子
	wan_jia == 'A' ? wan_jia = 'B' : wan_jia = 'A';	//切换玩家
}

bool wu_zi(int x, int y) {	//判断是否连成五子
	char a = wan_jia == 'A' ? 'B' : 'A';
	if (qi_pan[x - 2][y] == a && qi_pan[x - 1][y] == a && qi_pan[x + 1][y] == a && qi_pan[x + 2][y] == a) {
		return true;
	}
	if (qi_pan[x][y - 2] == a && qi_pan[x][y - 1] == a && qi_pan[x][y + 1] == a && qi_pan[x][y + 2] == a) {
		return true;
	}
	if (qi_pan[x - 2][y - 2] == a && qi_pan[x - 1][y - 1] == a && qi_pan[x + 1][y + 1] == a && qi_pan[x + 2][y + 2] == a) {
		return true;
	}
	if (qi_pan[x + 2][y - 2] == a && qi_pan[x + 1][y - 1] == a && qi_pan[x - 1][y + 1] == a && qi_pan[x - 2][y + 2] == a) {
		return true;
	}
	return false;
}

bool pd() {
	for (int i = 1; i <= 15; i++) {
		for (int j = 1; j <= 15; j++) {
			if (wu_zi(i, j) == true) {
				return true;
			}
		}
	}
	return false;
}

bool jie_shu() {
	char a = wan_jia == 'A' ? 'B' : 'A';
	for (int i = 1; i <= 40; i++)	cout << endl;
	cout << "游戏结束!" << endl;
	cout << "恭喜玩家 " << a << " 获胜!" << endl;

	cout << endl << "按任意键继续" << endl;
	while (1) {
		if (_kbhit() == true) {
			int j = _getch();
			break;
		}
	}

	for (int i = 1; i <= 40; i++)	cout << endl;
	cout << "再来一局?" << endl;
	cout << "是: Y" << endl;
	cout << "否:  N (退出游戏)" << endl;
	while (1) {
		if (_kbhit() == true) {
			int j = _getch();
			if (j == 121) {	//按下Y再来一局
				return false;
			}
			if (j == 110) {	//按下N退出
				return true;
			}
		}
	}
}

void zai_lai_yi_ju() {
	for (int i = 1; i <= 15; i++) {
		for (int j = 1; j <= 15; j++) {
			qi_pan[i][j] = char(22);
		}
	}
	dang_qian[0] = 8;
	dang_qian[1] = 8;
	wan_jia = 'A';
	zhan_xian();
}

bool tui_chu() {
	for (int i = 1; i <= 40; i++)	cout << endl;
	cout << "          " << "你TMD确定?" << endl;
	cout << "我TM非常确定!     按键: Y " << endl;
	cout << "Gun!爷按错了!    按键:N " << endl;
	cout << "再来一局           按键:R" << endl;
	while (1) {
		if (_kbhit() == true) {	//有键盘操作时
			int a = _getch();
			if (a == 121) {	//按下Y确定
				for (int i = 1; i <= 40; i++)	cout << endl;
				cout << "          " << "游戏结束!" << endl;
				return true;
			}
			if (a == 110 || a == 27) {	//按下N不确定
				zhan_xian();
				cout << "不想退出" << endl;
				return	false;
			}
			if (a == 114) {	//按下R再来一局
				zai_lai_yi_ju();
			}
			break;
		}
	}
}



int main() {

	/*
	// 控制台显示乱码纠正
	system("chcp 65001"); //设置字符集 (使用SetConsoleCP(65001)设置无效,原因未知)

	CONSOLE_FONT_INFOEX info = { 0 }; // 以下设置字体
	info.cbSize = sizeof(info);
	info.dwFontSize.Y = 16; // leave X as zero
	info.FontWeight = FW_NORMAL;
	wcscpy_s(info.FaceName, L"Consolas");
	SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info);
	*/

	cout << "五子棋游戏 - By. 下一刻悲哀" << endl;
	cout << "按下任意键开始游戏" << endl;
	while (1) {
		if (_kbhit() == true) {
			int a = _getch();
			break;
		}
	}

	for (int i = 1; i <= 15; i++) {
		for (int j = 1; j <= 15; j++) {
			qi_pan[i][j] = char(22);
		}
	}
	dang_qian[0] = 8;
	dang_qian[1] = 8;
	wan_jia = 'A';
	zhan_xian();
	cout << "操作键值: " << endl;
	cout << "五子棋游戏-By.下一刻悲哀" << endl;
	//初始化棋盘并显示

	while (1) {
		if (_kbhit() == true) {	//有键盘操作时
			jian_zhi = _getch();	//获得键值
			if (jian_zhi == 72) {	//向上
				up();
			}
			if (jian_zhi == 80) {	//向下
				down();
			}
			if (jian_zhi == 75) {	//向左
				left();
			}
			if (jian_zhi == 77) {	//向右
				right();
			}
			if (jian_zhi == 13) {	//落子enter
				enter();
			}

			if (jian_zhi == 27) {	//退出esc
				if (tui_chu() == true) {
					return 0;
				}
			}
			else {
				if (pd() == true) {
					if (jie_shu() == true) {	//确认结束
						for (int i = 1; i <= 40; i++)	cout << endl;
						cout << "          " << "游戏结束!" << endl;
						return 0;
					}
					else {		//再来一局
						zai_lai_yi_ju();
					}
				}
				else {
					zhan_xian();
				}
			}
			cout << "操作键值: " << jian_zhi << endl;	//显示操作键值
			cout << "五子棋游戏-By.下一刻悲哀" << endl;
		}
	}
}
2020/10/2 15:00
加载中...