Dev-c++编写 数字华容道
今日金句
80%=0%
100%=100%
(做一件事,要么做好,要么不做)
本文附赠源代码,欢迎白嫖~~~
之前看《最强大脑》,有一关是解数字华容道的,选手不知有何"神力",竟然在10s之内解完5×5的数字华容道!这可给我看呆了。我也是从此得到的灵感——数字华容道。于是就它写了一个c++程序(今次是鼠标点击版,不是输入坐标版):
思路
1.获取玩家鼠标点击(边长n),作不合法处理
2.随机生成n*n-1个数字(因为要有一个空格0),并乱序到数组a界面上(设定a数组的最后一个格子为空格0)
3.输出当前界面(数字位置正确为绿色,空格0为蓝色,其它为白色)
4.获取玩家鼠标点击,作不合法处理(在点击到的数字位置寻找四周的空格,有则移动,无则重新获取鼠标点击)
5.移动点击到的格子
6.步数+1
7.当玩家未胜利时,重复3~7步骤(构成do-while循环)
8.退出循环,宣布玩家胜利
代码实现
第3行是c++检测鼠标左键按下
#include<bits/stdc++.h>
#include<windows.h>
#define dn ((GetAsyncKeyState(VK_LBUTTON)&0x8000)?true:false)
//#define dn ((GetAsyncKeyState(VK_MBUTTON)&0x8000)?true:false) 中键
//#define dn ((GetAsyncKeyState(VK_RBUTTON)&0x8000)?true:false) 右键
using namespace std;
POINT p;
CONSOLE_FONT_INFO font;
int a[11][11],n,m,x,y,st;
int dx[]={0,-1,0,0,1},dy[]={0,0,-1,1,0};//四个方向
bool b[101];
void init(){memset(a,0,sizeof(a));memset(b,0,sizeof(b));cout<<"请选择华容道大小:\n\n";cout<<"2 3 4 5 6 7 8 9 10";DWORD mode;GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),&mode);mode&=~ENABLE_QUICK_EDIT_MODE;SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),mode);do{while(!dn);GetCursorPos(&p);ScreenToClient(GetForegroundWindow(),&p); GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&font); x=(p.y/=font.dwFontSize.Y)+1;//获取鼠标点击行y=(p.x/=font.dwFontSize.X)+1;//获取鼠标点击列Sleep(50);//减少CPU内存,可要可不要if(x==3 && (y==34 || y<34 && y%4==1)) break;}while(1);system("cls");cout<<"请选择华容道大小:\n\n";n=y/4+2;//界面边长for(int i=2;i<11;i++){(i==n?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN):SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE));cout<<i<<" ";}Sleep(875);memset(b,false,sizeof(b));for(int i=1,q;i<=n;i++)for(int j=1;j<=n;j++){if(i==n && j==n)break;srand(int(time(NULL)));//随机数种子doq=rand()%(n*n-1)+1; while(b[q]);b[q]=true;//标记此数已被生成过a[i][j]=q;}a[n][n]=0;//令最后一格为空格(0)
}
<手冻麻了,休息一下>
<继续写……>
---------------------------------------------------------------------------------------------------------------------------------
输出函数(↑有讲):
void put(){system("cls");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);if(!a[i][j])SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);//空格0为蓝色else if(a[i][j]==((i-1)*n+j))SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);//数字位置正确,变为绿色if(a[i][j]<10)cout<<" ";cout<<a[i][j]<<" ";}cout<<endl; }SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
判断输赢函数(赢 返回true,否则 返回false):
bool win(){for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)if((i!=n || j!=n) && a[i][j]!=((i-1)*n+j)/*数字位置不正确*/)return false; return true;
}
主函数(主要是玩家与计算机玩游戏部分):
int main(){init();do{put();DWORD mode;GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),&mode);mode&=~ENABLE_QUICK_EDIT_MODE;SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),mode);do{while(!dn);GetCursorPos(&p);ScreenToClient(GetForegroundWindow(),&p); GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&font); x=(p.y/=font.dwFontSize.Y)+1;y=(p.x/=font.dwFontSize.X)+1;Sleep(50);if(x<=n && y<4*n-1 && y%4<3 && a[x][y/4+1]){m=0;y=y/4+1;for(int i=1;i<5;i++){int xx=x+dx[i],yy=y+dy[i];if(xx>0 && xx<=n && yy>0 && yy<=n && !a[xx][yy]){m=i;break;}}if(m)break;}}while(1);a[x+dx[m]][y+dy[m]]=a[x][y];//移动a[x][y]=0;st++;}while(!win());cout<<"您共用"<<st<<"步";getchar();return 0;
}
我刚开始学编程时,这种简单的游戏对我来说都是高不可攀的天。现在慢慢也懂一点编程了,当然编写数字华容道的难度对我来说也降低了。
数字华容道是一种益智游戏,它看似简单,其实真的简单也考验开发者或程序员的脑力和思维组织能力,也是有许多细节甚至是隐藏的细节都需要考虑到。
此源代码欢迎白嫖~
点赞请留下。
Dev-c++编写 数字华容道相关推荐
- 用39条Python语句完成“数字华容道”游戏
原以为用Python编写"数字华容道"游戏可能需要很多代码,完成后发现只用了39条语句,可见Python的强大.编程的思路如下,使用9个tkinter库的Button按钮,按3行3 ...
- 用scratch编写游戏-数字华容道
由于疫情,只能在家,外孙女要学scratch,先学了南海出版社的"编程真好玩",然后和外孙女一起用scratch编了一些游戏,想把编写步骤和设计思想写出来,和大家交流.刚编了&qu ...
- Python游戏开发:最强大脑第一关,数字华容道
前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...
- 超赞的贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩
今天分享一个有趣的Python游戏库freegames,它包含20余款经典小游戏,像贪吃蛇.吃豆人.乒乓.数字华容道等等,依托于标准库Turtle. 我们不仅可以通过1行代码进行重温这些童年小游戏,还 ...
- java课程设计 华容道_Java课设-数字华容道
#2019-2020学年第一学期Java课设 #数字华容道 ##一:团队成员介绍及任务分配 ####王鑫杰 201821123112 组长 dao模式结合数据库 登录验证 排行榜展示 ####林炜 2 ...
- 数字华容道java_从零开发HarmonyOS(鸿蒙)手机小游戏——数字华容道
前言 2月16号HarmonyOS2.0手机开发者Beta版已经发布了,作为"1+8+N"战略的重要入口和生态核心,怎么能少得了手机应用开发呢,今天将由深鸿会深大学习小组(Zzt_ ...
- 从零开发HarmonyOS(鸿蒙)手机小游戏——数字华容道
HarmonyOS(鸿蒙)手机第一个小游戏app--数字华容道 前言 概述 正文 创建项目 实现初始界面布局 实现数字的随机打乱 实现滑动或点击调换数字 实现游戏成功界面 源代码 结语 前言 2月16 ...
- 鸿蒙手游——数字华容道
HarmonyOS2.0手机开发者Beta版已经发布了,作为"1+8+N"战略的重要入口和生态核心,怎么能少得了手机应用开发呢,今天将由深鸿会深大学习小组(Zzt_01-23)从零 ...
- 超赞!贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩
大家好,我是才哥. 今天分享一个有趣的Python游戏库freegames,它包含20余款经典小游戏,像贪吃蛇.吃豆人.乒乓.数字华容道等等,依托于标准库Turtle. 我们不仅可以通过1行代码进行重 ...
最新文章
- Hinton获2021迪克森科学奖:他改变了AI,改变了世界
- 支付宝支付 第四集:配置类的定义和注入
- 用js实现分享到随页面滚动而滑动效果
- openstack newton noVNC bug 解决方法
- 概率模型分子动力学模拟五元环吡咯C4H5N
- Apache+tomcat的整合
- 云炬60s看世界20211119
- T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践
- 什么情况不能办理房产抵押贷款 房产抵押贷能贷多少?
- RabbitMQ详解(一)
- 字符集 ISO-8859-1(3)
- cad插件_CAD插件燕秀工具箱安装教程
- 链家混三个月底薪_上海链家底薪8000劝退贴
- 03-word 中插入图片和表格
- 程序员之间的战争 战场是用户电脑
- 使用pycharm搭建数据库模型
- PB 切换中英文输入法
- Framer X 21 特别版 Mac 强大的移动应用交互原型设计神器工具
- Spring中同一个类中方法调用事务不生效,非事务方法调用事务方式事务不生效
- 为什么要进行个人知识管理(PKM)
热门文章
- 产品经理怎样活着走出需求评审会?
- 从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)
- Centos 搭建Git私有服务器
- 在实验室的计算机主机,一种计算机实验室主机存放装置的制作方法
- 1 个自动化脚本搞死公司?原来如此!
- html5播放多个mp3,HTML5 audio 如何实现播放多个MP3音频
- WinPhone学习笔记(一)——页面导航与页面相关
- 关于基于模型的设计(MBD)一些概念和理解
- Python通过PyPDF2给pdf加密,权限分析
- 中集世联达飞瞳全球工业人工智能AI领军者,全球顶尖AI核心技术高泛化性高鲁棒性稀疏样本持续学习,工业级高性能成熟AI产品规模应用