今日金句

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++编写 数字华容道相关推荐

  1. 用39条Python语句完成“数字华容道”游戏

    原以为用Python编写"数字华容道"游戏可能需要很多代码,完成后发现只用了39条语句,可见Python的强大.编程的思路如下,使用9个tkinter库的Button按钮,按3行3 ...

  2. 用scratch编写游戏-数字华容道

    由于疫情,只能在家,外孙女要学scratch,先学了南海出版社的"编程真好玩",然后和外孙女一起用scratch编了一些游戏,想把编写步骤和设计思想写出来,和大家交流.刚编了&qu ...

  3. Python游戏开发:最强大脑第一关,数字华容道

    前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...

  4. 超赞的贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩

    今天分享一个有趣的Python游戏库freegames,它包含20余款经典小游戏,像贪吃蛇.吃豆人.乒乓.数字华容道等等,依托于标准库Turtle. 我们不仅可以通过1行代码进行重温这些童年小游戏,还 ...

  5. java课程设计 华容道_Java课设-数字华容道

    #2019-2020学年第一学期Java课设 #数字华容道 ##一:团队成员介绍及任务分配 ####王鑫杰 201821123112 组长 dao模式结合数据库 登录验证 排行榜展示 ####林炜 2 ...

  6. 数字华容道java_从零开发HarmonyOS(鸿蒙)手机小游戏——数字华容道

    前言 2月16号HarmonyOS2.0手机开发者Beta版已经发布了,作为"1+8+N"战略的重要入口和生态核心,怎么能少得了手机应用开发呢,今天将由深鸿会深大学习小组(Zzt_ ...

  7. 从零开发HarmonyOS(鸿蒙)手机小游戏——数字华容道

    HarmonyOS(鸿蒙)手机第一个小游戏app--数字华容道 前言 概述 正文 创建项目 实现初始界面布局 实现数字的随机打乱 实现滑动或点击调换数字 实现游戏成功界面 源代码 结语 前言 2月16 ...

  8. 鸿蒙手游——数字华容道

    HarmonyOS2.0手机开发者Beta版已经发布了,作为"1+8+N"战略的重要入口和生态核心,怎么能少得了手机应用开发呢,今天将由深鸿会深大学习小组(Zzt_01-23)从零 ...

  9. 超赞!贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩

    大家好,我是才哥. 今天分享一个有趣的Python游戏库freegames,它包含20余款经典小游戏,像贪吃蛇.吃豆人.乒乓.数字华容道等等,依托于标准库Turtle. 我们不仅可以通过1行代码进行重 ...

最新文章

  1. Hinton获2021迪克森科学奖:他改变了AI,改变了世界
  2. 支付宝支付 第四集:配置类的定义和注入
  3. 用js实现分享到随页面滚动而滑动效果
  4. openstack newton noVNC bug 解决方法
  5. 概率模型分子动力学模拟五元环吡咯C4H5N
  6. Apache+tomcat的整合
  7. 云炬60s看世界20211119
  8. T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践
  9. 什么情况不能办理房产抵押贷款 房产抵押贷能贷多少?
  10. RabbitMQ详解(一)
  11. 字符集 ISO-8859-1(3)
  12. cad插件_CAD插件燕秀工具箱安装教程
  13. 链家混三个月底薪_上海链家底薪8000劝退贴
  14. 03-word 中插入图片和表格
  15. 程序员之间的战争 战场是用户电脑
  16. 使用pycharm搭建数据库模型
  17. PB 切换中英文输入法
  18. Framer X 21 特别版 Mac 强大的移动应用交互原型设计神器工具
  19. Spring中同一个类中方法调用事务不生效,非事务方法调用事务方式事务不生效
  20. 为什么要进行个人知识管理(PKM)

热门文章

  1. 产品经理怎样活着走出需求评审会?
  2. 从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)
  3. Centos 搭建Git私有服务器
  4. 在实验室的计算机主机,一种计算机实验室主机存放装置的制作方法
  5. 1 个自动化脚本搞死公司?原来如此!
  6. html5播放多个mp3,HTML5 audio 如何实现播放多个MP3音频
  7. WinPhone学习笔记(一)——页面导航与页面相关
  8. 关于基于模型的设计(MBD)一些概念和理解
  9. Python通过PyPDF2给pdf加密,权限分析
  10. 中集世联达飞瞳全球工业人工智能AI领军者,全球顶尖AI核心技术高泛化性高鲁棒性稀疏样本持续学习,工业级高性能成熟AI产品规模应用