计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx
- 文档编号:9748385
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:16
- 大小:17.98KB
计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx
《计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx》由会员分享,可在线阅读,更多相关《计算机C编程第一个课程设计高手数独游戏最终完结完美解释版.docx(16页珍藏版)》请在冰豆网上搜索。
计算机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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 编程 第一 课程设计 高手 游戏 最终 完结 完美 解释