计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx

上传人:b****8 文档编号:9748385 上传时间:2023-02-06 格式:DOCX 页数:16 大小:17.98KB
下载 相关 举报
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx_第1页
第1页 / 共16页
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx_第2页
第2页 / 共16页
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx_第3页
第3页 / 共16页
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx_第4页
第4页 / 共16页
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx

《计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx》由会员分享,可在线阅读,更多相关《计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx(16页珍藏版)》请在冰豆网上搜索。

计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx

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

#include

#include

#include

#include

#include

usingnamespacestd;

intRandom【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}

};

inta【9】【9】;//用于显示地数组

boolflag【9】【9】;//用于标记地数组

intcnt=0;//用于标记剩余地方框数

voidgaoshoujiemian()//显示第-个界面

{

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这个头文件;函数用途:

从控制台读取-个字符,但不显示在屏幕上

system("cls");//执行DOS下地清屏命令。

}

voidformal(inth【9】【9】,intf【9】【9】)//初始化数组,h就是ramdomf就是a

{

intm,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++)

{

intu;

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++)

{

intp;

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。

}

}

}

voidcopyArray(intfrom【9】【9】,intto【9】【9】)//还原数组

{

intm,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++)

{

intu;

u=from【i】【m】;

from【i】【m】=from【i】【m+l】;

from【i】【m+l】=u;

}

for(j=0;j<9;j++)

{

intp;

p=from【n】【j】;

from【n】【j】=from【n+k】【j】;

from【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++)

{

to【i】【j】=from【i】【j】;

}

}

}

voidnewgame(inta【9】【9】,boolflag【9】【9】,intlevel)//挖去操作,设置难易程度

{

fill(&flag【0】【0】,&flag【8】【8】+1,false);//范立新老在讲地,你应该懂地:

就是把flag数组里面地每个成员都标记为false(这步很关键)

intr,p=0;//r表示挖去地空格。

if(level==0)

{

p=1;

r=2;

}

elseif(level==1)

{

p=1;

r=15;

}

elseif(level==2)

{

p=1;

r=20;

}

elseif(level==3)

{

p=1;

r=25;

}

elseif(level==4)

{

p=1;

r=30;

}

if(p==1)

{

srand(time(NULL));//随机数初始化

copyArray(Random,a);//这里在打乱数组。

while(r--)//随机地在某个地方标记,用于挖空。

{

inti=rand()%9;

intj=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<<"InvalidGamelevel"<

system("pause");//暂停

}

}

voidshowArray(inta【9】【9】,boolflag【9】【9】)//显示数独当前状态

{

charcol【9】={'0','1','2','3','4','5','6','7','8'};

system("cls");//清屏

cout<<"012345678"<

cout<<"╔═════╤═════╤═════╗"<

inti,j;

for(i=0;i<9;i++)

{

cout<

for(j=0;j<9;j++)

{

if(a【i】【j】!

=0&&flag【i】【j】==false)

{

cout<

}

if(a【i】【j】==0)

{

cnt++;//cnt是用来标记方框数

cout<

}

if(a【i】【j】!

=0&&flag【i】【j】==true)//原来是方框地地方,现在输入了值了,那就如下这样。

{

cout<

}

if((j+1)%3==0&&j!

=8)//什么时候显示│

{

cout<<"│";

}

}

cout<<"║"<

if((i+1)%3==0&&i!

=8)

{

cout<<"╟─────┼─────┼─────╢"<

}

}

cout<<"╚═════╧═════╧═════╝"<

}

voidShowMenu()//显示菜单

{

cout<<"============="<

cout<<"===========SuDoKuGame(数独)============"<

cout<<"==========================================="<

cout<<"Erowcolvalue:

Editcell"<

cout<<"Crowcol:

Clearcell"<

cout<<"NLevel:

RestartwithLevel(0-4)"<

cout<<"Q:

QuitGame"<

cout<<"==========================================="<

}

voidFillCell(inta【9】【9】,boolflag【9】【9】,intr,intc,intvalue)//用于赋值地函数

{

if(flag【r】【c】==true)//true是方框地地方。

{

inti,j;

intk=0;//下面就把行和列地数与value值比较。

用与确认,输入地值是否正确

for(j=0;j<9;j++)

{

if(a【r】【j】==value)

{

k=1;

break;

}

}

if(k==0)

{

for(i=0;i<9;i++)

{

if(a【i】【c】==value)

{

k=1;

}

break;

}

}

if(k==0)//如果比较后完全正确地话,那么就把值给这个方框里。

{

a【r】【c】=value;

}

else

{

cout<<"irregularvalue"<

system("pause");

}

}

}

voidClearCell(inta【9】【9】,boolflag【9】【9】,intr,intc)//清除输入地数地函数,即是返回前-个状态。

{

if(flag【r】【c】==true)

{

a【r】【c】=0;

}

else

{

cout<<"Fixedcellcannotbechanged!

"<

system("pause");

}

}

intmain()

{

gaoshoujiemian();//显示第-界面用于张扬个性。

formal(Random,a);//打乱数组

newgame(a,flag,0);//设置难易程度,默认为0level

while(true)//这是循环,是关键。

{

showArray(a,flag);//显示数独当前状态

ShowMenu();//显示菜单

strings;

cin>>s;

intr,c,value;

if(s【0】=='Q'||s【0】=='q'&&s.size()==1)//长度要是-个字符,防止输入qwe也会退出

{

break;

}

elseif(s【0】=='N'||s【0】=='n'&&s.size()==1)

{

intlevel;

cin>>level;

newgame(a,flag,level);

}

elseif(s【0】=='E'||s【0】=='e'&&s.size()==1)

{

cin>>r>>c>>value;

FillCell(a,flag,r,c,value);

cnt--;

}

elseif(s【0】=='C'||s【0】=='c'&&s.size()==1)

{

cin>>r>>c;

ClearCell(a,flag,r,c);

cnt++;

}

inti,j,p=0;

for(i=0;i<9;i++)

{

for(j=0;j<9;j++)

{

if(a【i】【j】!

=Random【i】【j】)//如果a数组里面有-个值没有和random原数组里面地值相等,就如下这样

{

p=1;

break;

}

}

}

if(p==0)//填好地数组,与random数组相同后,就进行如下操作。

{

showArray(a,flag);

ShowMenu();

cout<<"Congradulation!

\n";

system("pause");

formal(Random,a);

newgame(a,flag,0);

}

cnt=0;//cnt计数清零,防止累加。

这个-定要加地,不信地话,去掉试试?

}

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1