栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++实现简单数独游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++实现简单数独游戏

某日闲来无事做的一个数独小游戏。目前只装载了一道题。

有选择难度、抽取题目的功能。如果后续需要升级可以搞个文档存题目,然后读文档载入更多数独题目。

顺便说一句,没做UI(因为懒),因此看上去有点费眼睛

啊,还有,判断数独正确性的代码段完全没优化(同样因为懒)。不过能用。如果各位嫌弃长长的代码段太难看可以自己优化下。

闲的没事玩玩数独挺有意思的。 

#include 
#include 
#include 
using namespace std;
struct mymove{//记录每一步操作 
	int x;
	int y;
	int digit;
	mymove(int a,int b,int c){
		x=a,y=b,digit=c;//设置该步操作的位置和填的数 
	}
};
class desktop{
	private:
		clock_t c_start,c_end;
		int sudoku[10][10];//当前数独内容 
		stack  opback;//回溯操作历史 
		int level;//当前难度 
		int num[9];//每个难度中的题库数量
		int puzzlebank[29][10][10]; //数独谜题 其中所有难度的数独题存在一起,第二个第三个下标存储谜题内容
		int check(){//返回0表示正常,返回1表示完成数独,返回-1表示有错误 
			int tool[9]={0,0,0,0,0,0,0,0,0};//存储1~9数字存在的数量 
			int flag=1;
			int i,j;
			for(i=0;i<3;i++)//检查左上 
				for(j=0;j<3;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;

			for(i=0;i<3;i++)//检查中上 
				for(j=3;j<6;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=0;i<3;i++)//检查右上 
				for(j=6;j<9;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;

			for(i=3;i<6;i++)//检查左中 
				for(j=0;j<3;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=3;i<6;i++)//检查中间 
				for(j=3;j<6;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=3;i<6;i++)//检查右中 
				for(j=6;j<9;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=6;i<9;i++)//检查左下 
				for(j=0;j<3;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=6;i<9;i++)//检查中下 
				for(j=3;j<6;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
				
			for(i=6;i<9;i++)//检查右下 
				for(j=6;j<9;j++){
					int pos=sudoku[i][j]-1;
					if(pos>=0)
					tool[pos]++;
				}
			for(i=0;i<9;i++)
				if(tool[i]>1)//数独填错了 
					return -1;
				else if(tool[i]==0)//数独未完成 
					flag=0;
			for(i=0;i<9;i++)
				tool[i]=0;
			//检索所有的3x3块	
			int k;
			for(i=0;i<9;i++){
				for(j=0;j<9;j++){//检查行 
					int pos=sudoku[i][j]-1;
					if(pos>=0)
						tool[pos]++;
				}	
				for(j=0;j<9;j++)
					if(tool[j]>1)//数独填错了 
						return -1;
					else if(tool[j]==0)//数独未完成 
						flag=0;
				for(j=0;j<9;j++)//重新初始化 
					tool[j]=0;
					
				for(j=0;j<9;j++){//检查列 
					int pos=sudoku[j][i]-1;
					if(pos>=0)
						tool[pos]++;
				}	
				for(j=0;j<9;j++)
					if(tool[j]>1)//数独填错了 
						return -1;
					else if(tool[j]==0)//数独未完成 
						flag=0;
				for(j=0;j<9;j++)//重新初始化 
					tool[j]=0;
			}
			return flag;
		} 
		void show(){//打印当前数独迷阵 
			int i,j,k,t;
			
			for(k=0;k<9;k++){
				for(i=0;i<37;i++)
					cout<<"-";
				cout<>c;
			while(1){
				if(c>='1'&&c<='9')
					return c-48;
				else{
					cout<<"请输入正确的数字!"<{0,0,4,8,0,5,0,3,0},{5,2,8,0,0,0,0,0,4},
			{0,0,0,4,7,0,0,0,2},{6,3,0,0,0,0,5,0,0},{0,0,5,1,9,0,0,4,0},{0,0,0,0,3,8,9,0,0},
			{0,9,2,0,0,3,0,1,0},{0,0,0,0,5,7,4,0,3},{3,5,0,0,1,0,0,0,0}};
			i=0;
			memcpy(&puzzlebank[num[i]-1][0][0],&puzzletemp[0][0],sizeof(puzzletemp));//拷贝 
		}
		void Menu(){
			cout<<"    输入数字选择功能:  "<0)
				for(i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号