教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

(计算机c++编程第一个课程设计)高手数独游戏(最终完结完美解释版

来源:网络收集 时间:2026-09-29
导读: 这个是高等教育体系下,二本院校,大一计算机系的第一个课程设计, 编一个数独游戏! 用c++ 语言。 本人特拿出来与大家分享, 造福同学 #includeiostream #includectime #includestring #includeconio.h #includeiomanip using namespace std; int Random[9][9]={

这个是高等教育体系下,二本院校,大一计算机系的第一个课程设计, 编一个数独游戏! 用c++ 语言。 本人特拿出来与大家分享, 造福同学

#include<iostream>
#include<ctime>
#include<string>
#include<conio.h>
#include<iomanip>
using namespace std;
int Random[9][9]={ // 这是填好以后,正确的数独
{3,9,6,1,2,4,7,8,5},
{7,8,1,9,5,6,2,4,3},
{2,4,5,7,8,3,6,1,9},
{6,3,2,8,4,1,5,9,7},
{1,7,4,5,3,9,8,2,6},
{9,5,8,2,6,7,4,3,1},
{4,1,7,6,9,8,3,5,2},
{5,6,3,4,1,2,9,7,8},
{8,2,9,3,7,5,1,6,4}
};
int a[9][9]; //用于显示的数组
bool flag[9][9]; // 用于标记的数组
int cnt=0; //用于标记剩余的方框数

void gaoshoujiemian() // 显示第一个界面
{
printf(" =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf("\n\n\n\n\n\n\n\n\n\n 高手数独\n\n\n\n\n\n\n\n\n\n\n 高手公司重磅推出\n 请按任意键继续");


printf("\n =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
getch(); // 要用 #include<conio.h> 这个头文件 ; 函数用途:从控制台读取一个字符,但不显示在屏幕上
system("cls"); //执行DOS下的清屏命令。
}

void formal(int h[9][9],int f[9][9]) //初始化数组 , h 就是ramdom f就是a
{
int m,n,i,j,l,k;
while(true)
{
m=rand()%9; //9以内的随机数 , 不包括9
if(m==0||m==3||m==6)
{
break;
}
}
srand(time(NULL)); // 利用时间设置随机种子, 随机数初始化
while(true)
{
l=rand()%9;
if(l==1||l==2)
{
break;
}
}
srand(time(NULL));
while(true)
{
n=rand()%9;
if(n==0||n==3||n==6)
{
break;
}
}
srand(time(NULL));
for(i=0;i<9;i++)
{
int u;
u=h[i][m];
h[i][m]=h[i][m+l];
h[i][m+l]=u;
} // 两列交换
while(true)
{
k=rand()%9;
if(k==1||k==2)
{
break;
}
}
for(j=0;j<9;j++)
{
int p;
p=h[n][j];
h[n][j]=h[n+k][j];
h[n+k][j]=p;
} // 两行交换
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
f[i][j]=h[i][j]; // 把交换好的数组 给 要用于显示的数组 h 给 f 。
}
}
}

void copyArray(int from[9][9],int to[9][9]) //还原数组
{
int m,n,i,j,l,k;
while(true)
{
m=rand()%9;
if(m==0||m==3||m==6)
{
break;
}
}
srand(time(NULL)); // 利用时间设置随机种子, 随机数初始化!
while(true)
{
n=rand()%9;
if(n==0||n==3||n==6)
{
break;
}
}
srand(time(NULL));
while(true)
{
l=rand()%9;
if(l==1||l==2)
{
break;
}
}
srand(time(NULL));
while(true)
{
k=rand()%9;
if(k==1||k==2)
{
break;
}
}
for(i=0;i<9;i++)
{
int u;
u=from[i][m];
from[i][m]=from[i][m+l];
from[i][m+l]=u;
}
for(j=0;j<9;j++)
{
int p;
p=from[n][j];
from[n][j]=from[n+k][j];
fr
om[n+k][j]=p;
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
to[i][j]=from[i][j];
}
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{

这个是高等教育体系下,二本院校,大一计算机系的第一个课程设计, 编一个数独游戏! 用c++ 语言。 本人特拿出来与大家分享, 造福同学

to[i][j]=from[i][j];
}
}
}

void newgame(int a[9][9],bool flag[9][9],int level) //挖去操作,设置难易程度
{
fill(&flag[0][0],&flag[8][8]+1,false); // 范立新 老在讲的,你应该懂的: 就是把 flag 数组里面的每个成员都标记为false (这步很关键)
int r,p=0; // r表示 挖去的空格。
if(level==0)
{
p=1;
r=2;
}
else if(level==1)
{
p=1;
r=15;
}
else if(level==2)
{
p=1;
r=20;
}
else if(level==3)
{
p=1;
r=25;
}
else if(level==4)
{
p=1;
r=30;
}
if(p==1)
{
srand(time(NULL)); // 随机数初始化
copyArray(Random,a); // 这里在打乱数组。
while(r--) // 随机地在某个地方 标记, 用于挖空。
{
int i=rand()%9;
int j=rand()%9;
if(a[i][j]==0)
{
r++;
continue;
} // 随机产生的a[i][j]是 0 的话,重新循环一次
if(a[i][j]!=0)
{
a[i][j]=0;
flag[i][j]=true; // 把 a[i][j] 弄为0 再把这个地方的flag[i][j]标记为true
}
}
}
else // 否则,这个level 不存在。
{
cout<<"Invalid Game level"<<endl;
system ("pause"); // 暂停
}
}
void showArray(int a[9][9],bool flag[9][9]) // 显示数独当前状态
{
char col[9]={'0','1','2','3','4','5','6','7','8'};
system ("cls"); // 清屏
cout<<" 0 1 2 3 4 5 6 7 8 "<<endl;
cout<<" ╔═════╤═════╤═════╗"<<endl;
int i,j;
for(i=0;i<9;i++)
{
cout<<col[i]<<" ║";
for(j=0;j<9;j++)
{

if(a[i][j]!=0&&flag[i][j]==false)
{
cout<<setw(3)<<a[i][j];
}
if(a[i][j]==0)
{
cnt++; // cnt 是用来标记 方框数
cout<<setw(3)<<"□"; // setw 是 空格
}
if(a[i][j]!=0&&flag[i][j]==true) // 原来是方框的地方,现在输入了值了,那就如下这样。
{
cout<<setw(2)<<"_"<<a[i][j];
}
if((j+1)%3==0&&j!=8) // 什么时候 显示 │
{
cout<<" │";
}
}
cout<<" ║"<<endl;
if((i+1)%3==0&&i!=8)
{
cout<<" …… 此处隐藏:2823字,全部文档内容请下载后查看。喜欢就下载吧 ……

(计算机c++编程第一个课程设计)高手数独游戏(最终完结完美解释版.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/137341.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)