(鲜花)万宁五子棋 v0.2

news/2025/11/7 19:48:13/文章来源:https://www.cnblogs.com/TBSF-0207/p/19200719

突然发现以前做的蛮有意思的一玩意

万宁五子棋

就一挺 naive 的东西,允许两个玩家在同一电脑上轮流下棋,W,A,S,D 移动棋子,Enter 下棋,会自动判定五子连珠,然后就没了。

后续可能会更新点人机什么的东西,看兴致

源码如下,欢迎大家各种形式 upd

汉化版(部分机型无法正常显示)
#include<bits/stdc++.h>
#include<conio.h>
#include<Windows.h>
using namespace std;
void move(int x,int y){HANDLE hout;COORD coord={x,y};hout=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout,coord);
}
char q[31][31];
struct st{int h,l;
}aa[20*20+1];
int a,b,c,wro,mq,pre;
char get1;
bool five;
void toprint(){for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){if(i==a&&j==b)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);else if(q[i][j]=='1')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);else if(q[i][j]=='2')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_INTENSITY);printf("%c ",q[i][j]);}printf("\n");}
}
int main(){label:system("cls");system("title 万宁五子棋v0.2");mq=0;wro=0;c=0;b=0;a=0;get1=0;five=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){q[i][j]='0'; }}printf("_____________________________\n"); printf("|                           |\n"); printf("|    欢迎来到万宁五子棋!   |\n");printf("|                           |\n");printf("|    开始(S)    退出(Q)     |\n");printf("|                           |\n");printf("|        查看规则(R)        |\n"); printf("|___________________________|\n"); while(!kbhit())//不断检测键盘是否按下{get1=getch();//获取被按下的按键并赋给变量getif(get1=='s')break;else if(get1=='q')return 0;else if(get1=='r'){system("cls");printf("这是一个简单益智的小游戏。\n");printf("游戏由两名玩家组成。\n");printf("当轮到你的时候,\n");printf("你需要使用 W,A,S,D 移动你的光标,\n");printf("并按 Enter 下棋。\n");printf("首先将其五个棋子连成一串者胜利。\n");printf("\n你可以按 Enter 继续游玩。\n");while(!kbhit()){get1=getch();if(get1==VK_RETURN)goto label;}}}system("cls");a=10;b=10;c=0;while(1){move(0,0);toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);five=0;for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){if(q[i][j]!='0'){if(q[i+1][j]==q[i][j]&&q[i+2][j]==q[i][j]&&q[i+3][j]==q[i][j]&&q[i+4][j]==q[i][j]){five=true;break;}else if(q[i][j+1]==q[i][j]&&q[i][j+2]==q[i][j]&&q[i][j+3]==q[i][j]&&q[i][j+4]==q[i][j]){five=true;break;}else if(q[i+1][j+1]==q[i][j]&&q[i+2][j+2]==q[i][j]&&q[i+3][j+3]==q[i][j]&&q[i+4][j+4]==q[i][j]){five=true;break;}else if(i>=5&&j>=5&&q[i+1][j-1]==q[i][j]&&q[i+2][j-2]==q[i][j]&&q[i+3][j-3]==q[i][j]&&q[i+4][j-4]==q[i][j]){five=true;break;}}}if(five==true)break;}if(five==true){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);if(c)printf("玩家1胜利!\n按R重来,按Q退出\n");else printf("玩家2胜利!\n按R重来,按Q退出\n");while(1){if(kbhit()){get1=getch();if(get1=='q'){return 0;}else if(get1=='r'){main();return 0;}}}}if(pre!=wro){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);}if(wro==1)printf("无法在已有的棋子上下棋\n");else if(wro==2)printf("没有棋子可以悔棋\n");else if(c)printf("玩家2下棋\n");else printf("玩家1下棋\n");printf("投降请按Q,悔棋请按H\n");pre=wro;wro=0;while(1){if(kbhit()){get1=getch();if(get1=='w'||get1==VK_UP){if(a>1)a--;break;}else if(get1=='a'||get1==VK_LEFT){if(b>1)b--;break;}else if(get1=='s'||get1==VK_DOWN){if(a<20)a++;break;}else if(get1=='d'||get1==VK_RIGHT){if(b<20)b++;break;}else if(get1==VK_RETURN){if(q[a][b]=='0'){if(c==0){q[a][b]='1';mq++;aa[mq].h=a;aa[mq].l=b;c=1;} else {q[a][b]='2';mq++;aa[mq].h=a;aa[mq].l=b;c=0;} }else wro=1;break;}else if(get1=='q'){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);if(c)printf("玩家1胜利!\n按R重来,按Q退出\n");else printf("玩家2胜利!\n按R重来,按Q退出\n");while(1){if(kbhit()){get1=getch();if(get1=='q'){return 0;}else if(get1=='r'){main();return 0;}}}}else if(get1=='h'){if(mq>0){q[aa[mq].h][aa[mq].l]='0';mq--;if(c==1)c=0;else c=1; }else wro=2;break;}}}}return 0;
}
原版
#include<bits/stdc++.h>
#include<conio.h>
#include<Windows.h>
using namespace std;
void move(int x,int y){HANDLE hout;COORD coord={x,y};hout=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout,coord);
}
char q[31][31];
struct st{int h,l;
}aa[20*20+1];
int a,b,c,wro,mq,pre;
char get1;
bool five;
void toprint(){for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){if(i==a&&j==b)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);else if(q[i][j]=='1')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);else if(q[i][j]=='2')SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_INTENSITY);printf("%c ",q[i][j]);}printf("\n");}
}
int main(){label:system("cls");system("title WANNING FIVE-IN-A-ROW v0.2");mq=0;wro=0;c=0;b=0;a=0;get1=0;five=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){q[i][j]='0'; }}printf("_______________________________________\n"); printf("|                                     |\n"); printf("|  Welcome to WANNING FIVE-IN-A-ROW!  |\n");printf("|                                     |\n");printf("|         START(S)    QUIT(Q)         |\n");printf("|                                     |\n");printf("|              RULES(R)               |\n"); printf("|_____________________________________|\n"); while(!kbhit())//不断检测键盘是否按下{get1=getch();//获取被按下的按键并赋给变量getif(get1=='s')break;else if(get1=='q')return 0;else if(get1=='r'){system("cls");printf("This is a simple chess game to learn.\n");printf("There are two players in the game.\n");printf("When it is your turn,\n");printf("All you need to do is press W,A,S,D on the keyboard to move your cursor,\n");printf("and Enter to lay down your chess.\n");printf("The one player who first get his five pieces in a row wins.\n");printf("\nYou may now press Enter to continue playing.\n");while(!kbhit()){get1=getch();if(get1==VK_RETURN)goto label;}}}system("cls");a=10;b=10;c=0;while(1){move(0,0);toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);five=0;for(int i=1;i<=20;i++){for(int j=1;j<=20;j++){if(q[i][j]!='0'){if(q[i+1][j]==q[i][j]&&q[i+2][j]==q[i][j]&&q[i+3][j]==q[i][j]&&q[i+4][j]==q[i][j]){five=true;break;}else if(q[i][j+1]==q[i][j]&&q[i][j+2]==q[i][j]&&q[i][j+3]==q[i][j]&&q[i][j+4]==q[i][j]){five=true;break;}else if(q[i+1][j+1]==q[i][j]&&q[i+2][j+2]==q[i][j]&&q[i+3][j+3]==q[i][j]&&q[i+4][j+4]==q[i][j]){five=true;break;}else if(i>=5&&j>=5&&q[i+1][j-1]==q[i][j]&&q[i+2][j-2]==q[i][j]&&q[i+3][j-3]==q[i][j]&&q[i+4][j-4]==q[i][j]){five=true;break;}}}if(five==true)break;}if(five==true){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);if(c)printf("Player1's Victory!\nPress R for restart and Q for quit.\n");else printf("Player2's Victory!\nPress R for restart and Q for quit.\n");while(1){if(kbhit()){get1=getch();if(get1=='q'){return 0;}else if(get1=='r'){main();return 0;}}}}if(pre!=wro){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);}if(wro==1)printf("Unable to cover those already covered grids.\n");else if(wro==2)printf("No moves to take back.\n");else if(c)printf("Player2's turn\n");else printf("Player1's turn\n");printf("Press Q to surrender or H to take back a move.\n");pre=wro;wro=0;while(1){if(kbhit()){get1=getch();if(get1=='w'||get1==VK_UP){if(a>1)a--;break;}else if(get1=='a'||get1==VK_LEFT){if(b>1)b--;break;}else if(get1=='s'||get1==VK_DOWN){if(a<20)a++;break;}else if(get1=='d'||get1==VK_RIGHT){if(b<20)b++;break;}else if(get1==VK_RETURN){if(q[a][b]=='0'){if(c==0){q[a][b]='1';mq++;aa[mq].h=a;aa[mq].l=b;c=1;} else {q[a][b]='2';mq++;aa[mq].h=a;aa[mq].l=b;c=0;} }else wro=1;break;}else if(get1=='q'){system("cls");toprint();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);if(c)printf("Player1's Victory!\nPress R for restart and Q for quit.\n");else printf("Player2's Victory!\nPress R for restart and Q for quit.\n");while(1){if(kbhit()){get1=getch();if(get1=='q'){return 0;}else if(get1=='r'){main();return 0;}}}}else if(get1=='h'){if(mq>0){q[aa[mq].h][aa[mq].l]='0';mq--;if(c==1)c=0;else c=1; }else wro=2;break;}}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansible + docker compose, RustFS MNMD 架构的一键部署之道

RustFS 有三种安装模式:单机单盘(SNSD)、单机多盘(SNMD)以及多机多盘(MNMD)。其中多机多盘属于集群式安装,也是企业使用最多的模式。多机多盘意味着要在每个服务器上都安装 RustFS 实例,本文探索用 ansible +…

2025年海外仓服务最新推荐企业,欧洲海外仓、美国海外仓、亚马逊海外仓、TEMU海外仓、独立站海外仓服务商解析

当前跨境电商与外贸企业对海外仓的需求日益精细化,仓储成本控制、订单处理效率、本土化服务等核心诉求持续升级,但市场上服务商资质参差不齐,部分企业存在库内操作效率低、系统稳定性不足、售后响应滞后等问题,导致…

实用指南:RSA加密从原理到实践:Java后端与Vue前端全栈案例解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ubuntu 中创建全局可访问的共用目录

第一步:创建全局可访问的共用目录在根目录下创建目录(需 root 权限)执行以下命令在根目录(/)下创建名为shared的共用目录: sudo mkdir /shared 设置权限为 “任何人可访问”为确保所有用户(包括系统用户、普通用…

开源 C++ QT QML 开发(十五)通讯--http下载 - 实践

开源 C++ QT QML 开发(十五)通讯--http下载 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

2025年11月不锈钢加工装饰制品优质厂家推荐榜:加工、屏风、栏杆等品类精选

当前酒店、别墅、商业空间等场景对不锈钢装饰制品的需求愈发精细化,材质纯度、工艺精度、场景适配性等核心诉求不断升级,但市场上厂家资质良莠不齐,部分产品存在材质以次充好、焊接工艺粗糙、售后响应滞后等问题,导…

P3978 概率论

膜拜 wck做法 考虑一个经典问题:n个点的二叉树数量是多少。考虑转括号序,一个节点是一个括号,左子树放在括号内,右子树放在括号右侧。可得 \(n\) 个点二叉树数量为 \(Cat_n\)。 我们注意到叶子在括号序上形如 \(()…

从iPhone转移到itel手机的联系人转移指南 - 实践

从iPhone转移到itel手机的联系人转移指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

JT808,JT1078 —— AAC编码 —— 部标机语音对讲Java实现

一、基础知识1、JT808,JT1078 协议了解① JT/T 808 是中国交通运输行业关于车载终端与监管平台之间数据交换的通信协议,核心目标是实现车辆运行状态、报警事件、定位数据、远程控制等信息的标准化传输。 ② JT/T 1…

DP 总结

1.如果有类似与 \(f{i,j,k}=[0,1]\) 的而且要求 \(f{i,j,k}=1\) 时\(k:{max,min}\)情况,可以转成 \(f{i,j}=k\) ,如果有值就代表原来是 1。 2.如果区间 DP 有一个区间不好做,考虑对于另外一个区间进行 DP。可以自由转…

2025年11月7日

完成台式机上的编译环境准备

【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的障碍和答案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

高并发下如何保证 Caffeine + Redis 多级缓存的一致性问题?MySQL、Redis 缓存一致性问题? - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025-11-07 PQ v.Next日志记录

2025-11-07 PQ v.Next日志记录 项目核心信息目前初步预计在这里进行开发测试(后续到develop): 由于功能的替换,因此新的功能开发地址修改如下: https://z.gitee.cn/zgca/projects/777586/repos/zgca/aipq/tree/fe…

[python刷题记录]-轮转数组-普通数组-中等

[python刷题记录]-轮转数组-普通数组-中等链接:189. 轮转数组 - 力扣(LeetCode) 这里卡我的点是,不要return,要改nums的值。我搞了一个新数组res 但是用nums = res不行,用nums = res[:]也不行,用nums[:] = res才…

QT正在复兴?兰亭妙微带你看懂工业软件设计的新风口

QT正在复兴?兰亭妙微带你看懂工业软件设计的新风口当工业软件从 “能用就行” 转向 “好用易用”,界面设计与开发工具的价值被推向台前。2025 年 Qt 全球峰会中国站的火爆(吸引 300 + 研发精英参会)、能源行业 Qt …

英语_阅读_Predictions_待读

Science and technology will continue to develop. Nature and Business have made their predictions. Lets take a look. 科学和技术将继续发展,《自然》与《商业》已做出了预测。让我们来看一看。 Human-like fri…

低代码如何真正降低企业数字化转型成本?

提到数字化转型,很多企业的第一顾虑是 “成本太高”—— 传统开发模式下,人力成本、时间成本、维护成本层层叠加,让不少中小企业望而却步。而低代码的崛起,恰恰击中了 “降本” 这一核心痛点。但低代码的降本,绝非…

低代码开发的核心流程

很多企业认可低代码的价值,却卡在 “落地环节”—— 不知道该从何开始、流程如何设计、容易踩哪些坑。其实,低代码开发虽比传统开发简单,但并非 “随意拖拽就能成功”,它需要遵循科学的流程,同时规避关键误区,才…