写了个五子棋小游戏,想问问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;
}
}
}