c++数独游戏3.3
用了制表符来制作框架。对了,先给大家科普一下制表符的寻找方法吧
1.点击软键盘
2. 选择特殊符号
3. 输入制表符
完成!!!
代码
#include<iostream>//输入输出用的
#include<ctime>//计算时间用的 colok()
#include<conio.h>//_getch()用的
#include<fstream>//存档用的
#include<windows.h>//SLeep等函数
using namespace std;
const int tms=10,pdh=45,pdj=362880;
double ksjs,jsjs;
string sdtm[tms+1][10]={{" "},{//1" "," 61 3 2 "," 5 81 7"," 7 34"," 9 6378"," 32795 "," 57 3 9 2"," 19 76 "," 8 24 76 "," 64 1 25 "},{//" "," 1 83 2"," 57 1 "," 5 9 64"," 7 4 859 "," 3 1 4 "," 514 3 6"," 36 7 4 "," 6 79"," 8 52 3"},{" "," 4 9 "," 8 2 7 "," 2 5 71 6"," 3 8 6 "," 76 31"," 1 6 2"," 2 59 8 4 "," 9 7 1 "," 6 5 "},{" "," 945"," 6 "," 52 1 38 7"," 9 31 "," 3 8 1 "," 46 2 "," 7 52 8 19"," 3 "," 861 "},{" "," 7 1 3 6 "," 5 7 "," 3 5 1"," 5 3 4 8"," 4 7 1 2"," 9 7 2 4"," 2 7 3"," 3 4 "," 6 5 9 2 "},{" "," 9 64 "," 4 "," 1 36 72"," 46 9"," 9 3 "," 2 54 "," 92 57 8"," 5"," 34 6 "},{" "," 7 9 "," 2 5 7 6"," 8 1 4 7 "," 4 1 3 "," 6 1 8 9"," 9 8 6 "," 5 8 9 1 "," 1 6 3 2"," 6 3 ",},{" "," 1 84 7"," 95 "," 8 1 "," 82 "," 7 4 6 8"," 62 "," 5 7 "," 82"," 5 32 1 ",},{" "," 75 9 46"," 9 1 3 2"," "," 2 6 1 7"," 8 2 "," 1 3 8 5"," "," 3 9 2 4"," 84 3 79",},{" "," 89 2 "," 9 5 7"," 5 3 "," 935 1 "," 1 7 "," 1 684 "," 8 6 "," 9 6 4 "," 1 28 ", }
};
struct wj{bool b[tms+1];int time[tms+1];void cj(){for(int i=1;i<=tms;i++)b[i]=0,time[i]=0;}
}wj;
struct cd
{void out(){ofstream a("游戏进度");for(int i=1;i<=tms;i++)a<<wj.b[i]<<"\n";a.close();ofstream b("游戏时间");for(int i=1;i<=tms;i++)b<<wj.time[i]<<"\n";b.close();return;}void in(){ifstream a("游戏进度");for(int i=1;i<=tms;i++)a>>wj.b[i];a.close();ifstream b("游戏时间");for(int i=1;i<=tms;i++)b>>wj.time[i];b.close();return;}
}cd;
void sc(string s[],int b[10][10]);//输出
bool pd1(string s[]);//判断是否通关
void out(string s,int x);//输出字符串
void zk(string s,char t);//中空输出
//输出函数
void zt();//暂停
void color(int c);//染色
//基本函数
void js1();//开始计时
void js2();//结束计时
//计时函数
void sdyx();//数独游戏主界面
void gzjs(); //规则介绍
void zzjs();//作者介绍
void yx();//游戏
void xy(int x);//游戏的分支
void youxi();//总游戏
void cgsc();//闯关输出
int zhzfc(string s);//将字符串转换为整数
int kssc();//开始的时候输出
int main(){color(15);cd.in();sdyx();cd.out();return 0;
}
void js1(){ksjs=clock();
}
void js2(){jsjs=clock();
}
void sdyx(){wj.cj();cd.in();while(1){system("cls");int s=kssc();switch(s){case 0:{return;break;}case 1:{youxi();break;}case 2:{gzjs();break;}case 3:{zzjs();break;}case 4:{cd.out();break;}}}return;
}
void youxi(){system("cls");zk("欢迎来到游戏界面",'-');cout<<"\n\n";cout<<"0:退出 1:随机关卡 2:闯关\n";char s=_getch();while(s<'0'||s>'3')s=_getch();switch(s){case '0':{return;break;}case '1':{js1();yx();break;}case '2':{cgsc();cout<<"请输入需要游戏的关卡(1~"<<tms<<")\n";string s1;int zss1;cin>>s1;zss1=zhzfc(s1);while(zss1<1||zss1>tms){system("cls");cout<<"输入的关卡数有误,请重新输入\n";Sleep(400);cout<<"按空格返回";char s2=_getch();while(s2!=32)s2=_getch();cgsc();cout<<"请输入需要游戏的关卡(1~"<<tms<<")\n";cin>>s1;zss1=zhzfc(s1);}cout<<"\n输入成功\n正在努力加载游戏界面...";for(int i=0;i<4;i++){if(i%2==0){Sleep(1000);cout<<"...";}else{Sleep(1000);cgsc();cout<<"请输入需要游戏的关卡(1~"<<tms<<")\n";cout<<zss1;cout<<"\n\n输入成功\n正在努力加载游戏界面...";}}Sleep(1000);cout<<"\n\n";color(12);cout<<"加载成功!!!";color(15);Sleep(890);js1();xy(zss1);break;}}return;
}
void xy(int x){int b[10][10];string a[10];for(int i=1;i<10;i++){a[i]=sdtm[x][i];for(int j=1;j<10;j++){b[i][j]=(sdtm[x][i][j]!=' ');}}while(1){system("cls");int tot=0;for(int i=1;i<=9;i++)for(int j=1;j<=9;j++)if(a[i][j]!=' ')tot++;if(tot==81){if(pd1(a)){sc(a,b); system("cls");out("恭喜您通关了这个数独\n",30); js2();int ti=jsjs-ksjs;cout<<"用时:"<<ti/1000<<"秒\n";if(b[x]==0||wj.time[x]>=ti){wj.b[x]=1;wj.time[x]=jsjs-ksjs;cd.out();}cout<<"\n";zt(); return;}else{system("cls");out("很抱歉,您的填写有误,是否重新开始(y/n)",45);char qw=_getch();while(qw!='y'&&qw!='n')qw=_getch();if(qw=='y'){js1();xy(x);}}system("cls");}cout<<"您正在游戏的是"<<x<<"号数独\n"; sc(a,b);Sleep(400);cout<<"0:退出 1:填写 2:帮助\n";char s=_getch();while(s<'0'||s>'2')s=_getch();s-='0';if(s==0){system("cls");out("已成功退出!!!",40);cout<<"\n";zt();return;}if(s==1){cout<<"请输入填写的坐标(先行再列)以及填写的数";int x,y,k;cin>>x>>y>>k;while(x<1||x>9||y<1||y>9||k<0||k>9||b[x][y]==1){Sleep(400);system("cls");if(b[x][y]==1){cout<<"这个格子是系统产生的数,不可以随意更改!!!";}elsecout<<"输入错误,请重新输入!!!";zt();system("cls");sc(a,b);cout<<"0:退出 1:填写 2:删除\n";cout<<"请输入填写的坐标(先行再列)以及填写的数";cin>>x>>y>>k;}if(k==0){b[x][y]=0;a[x][y]=' ';out("删除成功!!!",20);}else{if(b[x][y]==2)out("更改成功!!!",20);elseout("填写成功!!!",20);b[x][y]=2,a[x][y]=k+'0';}}if(s==2){system("cls");cout<<"当您需要删除您自己所填写的数字时,只需要填写坐标再输入0即可。\n";zt();continue;}}
}
void yx(){srand(time(0));int x=rand()%tms+1;xy(x);
}
void gzjs(){while(1){system("cls");cout<<"0:退出 1:数独介绍 2:玩法技巧\n";char s=_getch();while(s!='0'&&s!='1'&&s!='2')s=_getch();s-='0';if(s==0)return;if(s==1){system("cls");color(12);cout<<"介绍:";color(15);out("\n 数独 (英语:Sudoku)是一种逻辑性的数字填充游戏,玩家须以数字填进每一格,而每行、每列和每个宫(即3x3的大格)有齐1至9所有数字。游戏设计者会提供一部分的数字,使谜题只有一个答案。一个已解答的数独其实是一种多了宫的限制的拉丁方阵,因为同一个数字不可能在同一行、列或宫中出现多于一次。\n\n",20);Sleep(400);color(12);cout<<"规则:";color(15);out("\n 数独(九宫格)的规律是每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。\n\n",20);Sleep(400);color(12);cout<<"好处:";color(15);out("\n 玩数独首先观察力的提升有好处,无容置疑,即使你看懂了再多,再难的技巧,若无版法观察,无权法应用也是白搭;第二,逻辑推理能力,数独本身就是一个逻辑推理类的游戏,在每一步出数的时候需要利用盘面的数字进行推导,在你做其他事的时候利用数独这种分析判断力,也会对问题的理解更为深刻;第三,心态,发现不少人说,觉得烦的时候,一道数独就能让心情平复下来,在解题的时候全神贯注,往往时间在不经意间流逝,同样的,当你被数独题难到时,也要保持平和的心态,过于浮躁则很难找到突破点。\n\n",20);Sleep(400);zt();}if(s==2){system("cls");color(12);cout<<"1:";color(15);out("先找数字最多的(观察整个表格,哪个数字出现最多),再利用游戏规则进行推内断填入,最容易容填。\n\n",20);Sleep(200);color(12);cout<<"2:";color(15);out("填的时候尽可能把一个数字(指1-9中其中一个)填完。\n\n",20);Sleep(100);color(12);cout<<"3:";color(15);out("对于则于数字少而二个数字无法直接确定的,只能先假设,然后往下推断,若无矛盾的,则原假设正确,不用改。而后来推断出现矛盾了,则原先假设不成立,位置对调即可。\n\n",30);Sleep(300);color(12);cout<<"4:";color(15);out("一行或一列、一个九宫格剩余数字不超过3个了,就可以利用前后左右行与列推断填写。\n\n",25);Sleep(250);color(12);cout<<"5:";color(15);out("当您需要删除您自己所填写的数字时,只需要填写坐标再输入0即可。\n\n",20);Sleep(150);zt();}}return;
}
void zzjs(){system("cls");cout<<" 作者介绍\n";cout<<"姓名:YYF 年龄:12 就读学校:湄小(601)班\n";cout<<"业余爱好:编程、下棋\n";zt();return;
}
bool pd1(string s[]){int H,J;for(int i=1;i<10;i++){H=0,J=1;for(int j=1;j<10;j++)H+=s[i][j]-'0',J*=s[i][j]-'0';if(H!=pdh||J!=pdj)return 0;}for(int i=1;i<10;i++){H=0,J=1;for(int j=1;j<10;j++)H+=s[j][i]-'0',J*=s[j][i]-'0';if(H!=pdh||J!=pdj)return 0;}for(int i=0;i<=6;i+=3){for(int j=0;j<=6;j+=3){H=0,J=1;for(int l=1;l<=3;l++){for(int k=1;k<=3;k++){int x=l+i,y=k+j;H+=s[x][y]-'0',J*=s[x][y]-'0';}}if(H!=pdh||J!=pdj)return 0;}}H=0,J=1;return 1;
}
void color(int c)//颜色
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);return;
}
void sc(string s[],int b[10][10]){color(9);cout<<"┏━┳━┳━┳━┳━┳━┳━┳━┳━┓\n";color(15);for(int i=1;i<=9;i++){color(9);cout<<"┃";color(15);for(int j=1;j<=9;j++){if(b[i][j]==1){color(12);cout<<s[i][j];color(15);}else{cout<<s[i][j];}cout<<" ";if(j%3==0)color(9); cout<<"┃";color(15);}if(i!=9){if(i%3==0){color(9);cout<<"\n┠━╋━╋━╋━╋━╋━╋━╋━╋━┨";color(15);}else{color(9);cout<<"\n┠";color(15);cout<<"━╋━╋━";color(9);cout<<"╋";color(15);cout<<"━╋━╋━";color(9);cout<<"╋";color(15);cout<<"━╋━╋━";color(9);cout<<"┨";color(15);}}cout<<"\n";}color(9);cout<<"┗━┻━┻━┻━┻━┻━┻━┻━┻━┛\n";color(15);return;
}
void out(string s,int x){for(int i=0;i<s.size();i++){cout<<s[i];Sleep(x);}return;
}
void zt(){cout<<"请按任意键继续. . .";char a=_getch();return;
}
void zk(string s,char t){int tot=s.size();if(tot%2==1){s+=t;tot++;}tot=80-tot;tot/=2;for(int i=0;i<tot;i++)cout<<t;cout<<s;for(int i=0;i<tot;i++)cout<<t;return;
}
void cgsc(){system("cls");color(15); int k=tms,ls=0;while(k>0){int cd[5];memset(cd,0,sizeof(cd));for(int i=1;i<=min(k,4);i++){cout<<"----------------";if(i!=min(k,4))cout<<" ";elsecout<<"\n";}for(int i=1;i<=min(k,4);i++){cout<<"|名称:关卡"<<ls*4+i<<" ";if(ls*4+i<10)cout<<" ";cout<<" |";if(i!=min(k,4))cout<<" ";elsecout<<"\n";}for(int i=1;i<=min(k,4);i++){cout<<"|状态:";if(wj.b[ls*4+i]==1){color(12);cout<<"已";color(15);} else{color(12);cout<<"未";color(15);} cout<<"通过 |";if(i!=min(k,4))cout<<" ";elsecout<<"\n";}for(int i=1;i<=min(k,4);i++){cout<<"|用时:";if(wj.b[ls*4+i]==0)cout<<"无记录 |";else{int k=wj.time[ls*4+i];k/=1000;int k1=k,ans=0;while(k1){ans++;k1/=10;}ans=14-8-ans-(ans==0);cout<<k<<"秒";while(ans--)cout<<' ';cout<<"|";}if(i!=min(k,4))cout<<" ";elsecout<<"\n";}for(int i=1;i<=min(k,4);i++){cout<<"----------------";if(i!=min(k,4))cout<<" ";elsecout<<"\n\n\n";}ls++;k-=4;}return;
}
int zhzfc(string s){int tot=0;for(int i=0;i<s.size();i++)tot=tot*10+s[i]-'0';return tot;
}
int kssc(){system("cls");color(11);zk("数独游戏",'-');cout<<"\n\n\n\n\n\n\n";color(10);cout<<"方向键的上下选择,Enter键确定\n\n";color(12);zk("退出游戏",' ');color(15);cout<<"\n";zk("开始游戏",' ');cout<<"\n";zk("规则介绍",' ');cout<<"\n";zk("作者介绍",' ');cout<<"\n";zk("游戏存档",' ');cout<<"\n"; int E=0;char s=_getch();while(s!=13){if(s==72&&E!=0)E--;elseif(s==72&&E==0)E=4;if(s==80&&E!=4)E++;elseif(s==80&&E==4)E=0;system("cls");color(11);zk("数独游戏",'-');cout<<"\n\n\n\n\n\n\n";color(10);cout<<"方向键的上下选择,Enter键确定\n\n";color(15);if(E==0)color(12);zk("退出游戏",' ');color(15);cout<<"\n";if(E==1)color(12);zk("开始游戏",' ');color(15);cout<<"\n";if(E==2)color(12);zk("规则介绍",' ');color(15);cout<<"\n";if(E==3)color(12);zk("作者介绍",' ');color(15);cout<<"\n";if(E==4)color(12);zk("游戏存档",' ');color(15);cout<<"\n";s=_getch();}return E;
}
c++数独游戏3.3相关推荐
- 用 JS 做一个数独游戏(二)
用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...
- Leetcode0037--Sudoku Solver 数独游戏
[转载请注明]http://www.cnblogs.com/igoslly/p/8719622.html 来看一下题目: Write a program to solve a Sudoku puzzl ...
- python数独游戏源代码100行_python实现解数独程序代码
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
- 注入游戏没有焦点_数独游戏 数学之美(三)
一揭晓上期答案同学们,上周的数独题目你们做对了吗?让我们一起来看看正确答案吧! 二学生讲解数独游戏是一种非常益智的推理游戏,它可以提高你的逻辑思维能力.让我们来听一听这位同学的解题思路吧!三讲解新知这 ...
- python数独游戏源代码_使用Python编写数独游戏自动出题程序
数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. from random import shuffle, randrange def generate(): # 初始网格 ...
- 2014/School_C_C++_A/6/“数独”游戏
你一定听说过"数独"游戏. 如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独 ...
- 【dfs】数独游戏(ybtoj dfs-1-2)
数独游戏 ybtoj dfs-1-3 题目大意 给出一个未完成的数独,让你完成它 输入样例 4.....8.5.3..........7......2.....6.....8.4......1.... ...
- c语言编程数独游戏,编程做数独游戏
数独游戏非常好玩,可以训练玩家的逻辑推理能力.数独游戏的规则是: 1.在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字. 2.必须满足的条件:每一行 ...
- python数独游戏源代码100行_python实现自动解数独小程序
跟朋友最近聊起来数独游戏,突发奇想使用python编写一个自动计算数独解的小程序. 数独的规则不再过多阐述,在此描述一下程序的主要思路: (当前程序只针对于简单的数独,更复杂的还待深入挖掘) 1.计算 ...
- Windows Mobile 数独游戏及全部源码
去年写的一个Windows Mobile 数独游戏,可以安装到手机里面在闲暇时玩数独,开发工具C#,Visual Studio 2008. 主要功能包括:1)自动生成数独游戏:2)手工录入数独游戏:3 ...
最新文章
- carsim学习笔记6——转向系统的学习
- mlflow_使用MLflow跟踪进行超参数调整
- vivo应用商店电脑版_VIVO应用商店代理商江湖的那些关系
- css3实现翻转效果,css3 实现3D翻转效果
- c语言计算器括号怎么解决,C语言计算器,该如何解决
- windows各个原版系统下载集锦 MS-DOS Windows 3.1 Windows NT Windows 98等
- 蛋糕店选址该注意什么,如何了解客群画像和竞品情况
- 帝国CMS仿《游戏资讯网》优化版整站源码/专业游戏资讯网站系统模版
- Windows下Pycharm专业版2021.2以及Anaconda安装教程
- iMeta | 中农李季组揭示有机农业长期定位试验番茄微生物组结构
- libvpx将yuv转vp8/vp9(八)
- 大材小用,211硕士抢占家政市场?
- Rust 创始人:社区应限制成长速度;电商法 1 月 1 日起实施
- 写给毕业未5年的你和我
- Oracle新建出问题,【案例】Oracle报错ORA-01565 ORA-27041 OSD-04002 创建控制文件失败
- 毕业设计\毕业论文论文下载查询\查重降重\PPT工具合集
- 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理
- 阿里-----数组四等分
- 百度绿萝算法是什么?-成都网页设计
- MYSQL之not in优化方法:left join
热门文章
- 国家计算机职业技能鉴定4级考试内容大全
- Python搭建博客网站小结
- 软件测试压力测试例子,第一个web压力测试例子 - 稻香老农 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 【火星备份软件】存储架构优势简介
- 杨辉三角c语言杭电,杭电 杨辉三角
- 大公司为什么都有API网关?聊聊API网关的作用
- pytorch搭建Resnet50实现狗狗120个品种类的分类
- 中国企业数字银行行业市场供需与战略研究报告
- 计算机技术身边的应用案例,计算机数据存储应用案例分析
- 电子密码锁——数电课设