猜数字游戏的分析与实现课案.docx

上传人:b****7 文档编号:9028782 上传时间:2023-02-02 格式:DOCX 页数:25 大小:151.52KB
下载 相关 举报
猜数字游戏的分析与实现课案.docx_第1页
第1页 / 共25页
猜数字游戏的分析与实现课案.docx_第2页
第2页 / 共25页
猜数字游戏的分析与实现课案.docx_第3页
第3页 / 共25页
猜数字游戏的分析与实现课案.docx_第4页
第4页 / 共25页
猜数字游戏的分析与实现课案.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

猜数字游戏的分析与实现课案.docx

《猜数字游戏的分析与实现课案.docx》由会员分享,可在线阅读,更多相关《猜数字游戏的分析与实现课案.docx(25页珍藏版)》请在冰豆网上搜索。

猜数字游戏的分析与实现课案.docx

猜数字游戏的分析与实现课案

合肥工业大学计算机与信息学院

课程设计报告

设计题目:

猜数字及生命游戏

学生姓名:

李挺

专业:

电子信息工程

班级:

13级1班

学号:

2013211732

指导教师:

于磊

完成日期:

2014年7月9日

目录

一游戏说明

二总体设计

三程序代码

四运行结果

五附录文档

 

一游戏说明(猜数字)

1使用说明

(1)开始功能键选择

(2)系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。

其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。

如:

1A3B表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对

 

2程序说明书

(1)程序的功能说明:

猜数字游戏是一个运行在Windows平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,并可以随着玩家的游戏记录进行更新。

游戏用户可以选择开始游、排行榜查看、帮助等主要功能。

当用户选择开始游戏时,系统会让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确但位置不正确的数字个数。

如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。

在排行榜查看功能中,用户可以查看当前的游戏排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。

在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。

3软件可以实现的基本功能

(1)游戏区:

玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。

(2)查看排行榜:

玩家可以查看当前排行榜中的排名顺序,从而确定自己的游戏目标。

排行榜的查看按一定顺序显示给用户,便于查看。

(5)帮助:

玩家通过帮助功能了解游戏规则和排行榜设置规则。

(4)清除排行榜:

玩家可以选择清除排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(player)和系统默认记录10次。

 

二总体设计

1要求

(1)要求使用多文件方式实现设计;

(2)要求在各个文件内实现结构化设计;

(3)每个模块作为一个单独的文件。

2文件及函数组成

源文件

函数名或其他成分

功能

record.h

ASK

宏定义

结构声明

结构声明

库函数及函数原型声明

record.h

intchoose_level

设置游戏等级

voidshow_explain

输出游戏说明

record.h

boolcheck_num

检查数据

voidshow_tiptop

输出最佳排行

record.h

voidnew_game

开始游戏中心

voidget_num

获取系统随机数字

Game_in_out

获取游戏者数据和输出结果

Inttime

时间控制

Game_result

游戏结果处理输出

record.h

intmain

主函数

voiddisplay()

选择菜单

intchoose_menu

处理菜单

 

三.程序代码

1主体游戏程序

usingnamespacestd;

voidrand_num(int[]);

voidget_num(int[],int);

boolcheck_num(int[]);

intguess_num(int);

voidgoal(int,int,int);

voidchoose_menu();

voidnew_game();

voidshow_tiptop();

voidshow_explain();

voidclean_data();

voiddisplay();

intchoose_level();

voidmain(){

choose_menu();

}

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

#pragmawarning(disable:

4996)

structdata{

intgoal;

charname[20];

};

fstreamiofile;

voidrand_num(intb[]){

inttemp;inttemp2;

intc[10]={0};

for(inti=0;i<10;i++)

c[i]=i;

srand((unsigned)time(0));

for(intj=0;j<4;j++){

temp=rand()%(10-j)+j;

temp2=c[temp];

c[temp]=c[j];

c[j]=temp2;

b[j]=c[j];

}

for(intk=0;k<4;k++)

cout<

cout<

}

voidget_num(intb[],intk)

{

cout<<"\t\t\t请输入你猜的数字,还剩下"<

cout<<"\t\t\t\t";

for(inti=0;i<4;i++)

cin>>b[i];

}

boolcheck_num(intb[])

{

for(inti=0;i<4;i++){

if(b[i]<0||b[i]>9){

cout<<"\t\t\t输入错误,请重新输入!

\n";

returnfalse;

}

}

returntrue;

}

intchoose_level(){

intx;

cout<<"\n\n\n\n";

cout<<"\t****************************************************************\n";

cout<<"\t****************************************************************\n";

cout<<"\t\t\t1.高级\t2.中级\t3.低级\n";

cout<<"\t\t\t\t";

cin>>x;

while(x>2&&x<1){

cout<<"\t\t\t输入有误,重新输入!

\n";

cout<<"\t\t\t\t";

cin>>x;

}

if(x==1)return1;

if(x==2)return2;

if(x==3)return3;

}

intguess_num(intlevel){

system("cls");

intA;intB;

inta[4]={0};

intb[4]={0};

rand_num(a);

inttimes=0;

for(intk=level+7;k>0;k--){

get_num(b,k);

while(!

check_num(b)){

k--;

get_num(b,k);

};

A=B=0;

for(inti=0;i<4;i++){

if(a[i]==b[i])A++;

for(intj=0;j<4;j++){

if(i!

=j&&a[i]==b[j])B++;

}

}

cout<<"\t\t\t\t"<

times++;

if(A==4)returntimes;

}

for(intk=0;k<4;k++)

cout<

cout<

return0;

}

voidgoal(inttimes,inttime,intlevel){//计算分数并保存

intgoal;charname[20];datatemp,temp2;

iofile.open("e:

\\dataf.dat",ios:

:

in|ios:

:

app|ios:

:

binary);

if(!

iofile){

cerr<<"没有游戏最高分\n";

abort();

}

goal=500-time*0.002-times*10-level*10;

cout<<"\t\t\t您的得分是:

"<

iofile.seekg(0,ios:

:

beg);//(level-1)*sizeof(temp)

iofile.read((char*)&temp,sizeof(temp));

//cout<

if(temp.goal>goal)cout<<"\t\t\t最高分"<

if(temp.goal

cout<<"\t\t\t请输入您的姓名:

";

cin>>name;

temp.goal=goal;

strcpy(temp.name,name);

//iofile<

//iofile.flush();

iofile.write((char*)&temp,sizeof(temp));

//iofile.read((char*)&temp,sizeof(temp));

cout<<"\t\t\t保存成功\n";

}

iofile.close();

}

voidnew_game(){//开始新游戏

system("cls");

clock_tstart,finish;

inta;intb;

intlevel;

inttime;

level=choose_level();

start=clock();

a=guess_num(level);

finish=clock();

time=(int)(finish-start);

goal(a,time,level);

cout<<"\t\t\t是否继续?

\n"<

cout<<"\t\t\t1.继续2.返回"<

cout<<"\t\t\t\t";

cin>>b;

if(b==1)new_game();

}

voidshow_tiptop(){

intx;

datadata1[3]={500,"ting",400,"qian",300,"07161208"};

iofile.open("e:

\\dataf.dat",ios:

:

in|ios:

:

app|ios:

:

binary);

if(!

iofile){

cerr<<"没有游戏最高分\n";

abort();

}

for(inti=0;i<3;i++)

iofile.write((char*)&data1[i],sizeof(data1[i]));

iofile.flush();

cout<<"\t\t\t1.高级\t2.中级\t3.低级\t4.返回\n";

cout<<"\t\t\t\t";

cin>>x;

while(x!

=4){

datadatal[1];

if(x<1||x>4)cout<<"\t输入有误,请重新输入!

\n";

switch(x){

case1:

iofile.seekg((x-1)*sizeof(datal[x-1]),ios:

:

beg);

iofile.read((char*)&datal[0],sizeof(datal[0]));

cout<<"\t\t\t高级:

"<

break;

case2:

iofile.seekg((x-1)*sizeof(data1[x-1]),ios:

:

beg);

iofile.read((char*)&datal[0],sizeof(datal[0]));

cout<<"\t\t\t中级:

"<

break;

case3:

iofile.seekg((x-1)*sizeof(data1[x-1]),ios:

:

beg);

iofile.read((char*)&datal[0],sizeof(datal[0]));

cout<<"\t\t\t低级:

"<

break;

}

cout<<"\t\t\t\t";

cin>>x;

}

iofile.close();

}

voidshow_explain(){//查看游戏说明

system("cls");

inta;

cout<<"\t\t\t\t游戏说明\n";

cout<<"\t****************************************************************\n";

cout<<"\t****************************************************************\n";

cout<<"\t①:

游戏开始,系统随机产生一位不重复的N位数字.N的大小与等级有关\n";

cout<<"\t\t初级:

N=3\t中级:

N=4\t高级:

N=5\t\n";

cout<<"\t②:

游戏者输入所猜的不重复数字,并按回车提交,提交的数据位数应与\n";

cout<<"\tN的大小一致,当数据位数大于N时,只取前N位;\n";

cout<<"\t③:

系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式.\n";

cout<<"\t其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确.如:

\n";

cout<<"\t1A3B表示有1个数字的位置正确且数值也正确,除此以外,还猜对了3个数\n";

cout<<"\t字但位置不对.即已经猜出4位数据,但有3个数据位置不对!

\n";

cout<<"\t④:

游戏者有限定次数的猜测机会,在规定次数内完成,则游戏成功.\n";

cout<<"\t否则,游戏失败.其中.猜测次数与等级有关\n";

cout<<"\t\t初级:

10次\t中级:

9次\t高级:

8次。

\n";

cout<<"\t⑤:

按完成游戏所用的时间和次数计算游戏者所得分数,游戏等级越高,\n";

cout<<"\t猜测所用的次数越少.得分越高!

若游戏者得分比系统已经保存的分数\n";

cout<<"\t的高,将提示要求输入游戏者信息.并且保存在最佳排行之中.\n";

cout<<"\t⑥:

游戏者可以自行设置等级!

\n";

cout<<"\t**********************************************************\n";

cout<<"\t**********************************************************\n";

cout<<"\t1.返回主菜单\n"<

cin>>a;

}

voidclean_data(){

datatemp,temp2;

iofile.open("dataf.dat",ios:

:

in|ios:

:

app|ios:

:

binary);

temp.goal=0;

strcpy(temp.name,"nothing");

for(inti=0;i<3;i++)

iofile.write((char*)&temp,sizeof(temp));

iofile.read((char*)&temp2,sizeof(temp2));

cout<

iofile.close();

}

voiddisplay(){

system("cls");

cout<<"\n\n\n\n";

cout<<"\t\t\t\t主菜单\n";

cout<<"\t****************************************************************\n";

cout<<"\t****************************************************************\n";

cout<<"\t\t\t\t1.新游戏\n\n";

cout<<"\t\t\t\t2.查看最高分\n\n";

cout<<"\t\t\t\t3.游戏说明\n\n";

cout<<"\t\t\t\t4.清空所有数据\n\n";

cout<<"\t\t\t\t5.退出游戏\n\n";

cout<<"\t****************************************************************\n";

cout<<"\t****************************************************************\n";

cout<

}//清空所有数据

voidchoose_menu(){

intx;

display();

cout<<"\t\t\t\t";

cin>>x;

while(x!

=5){

switch(x){

case1:

new_game();

break;

case2:

show_tiptop();

break;

case3:

show_explain();

break;

case4:

clean_data();

break;

}

display();

cout<<"\t\t\t\t";

cin>>x;

}

}

 

四运行结果

 

一游戏说明(生命游戏)

而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。

每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。

每个格子的生死遵循下面的原则:

1)如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变)。

2)如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3)在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。

 

三.程序代码

#include

usingnamespacestd;

#include

#include

structCell

{

boollive;

intothers;

};

voidmain()

{

Cellcell[40][40];

for(inti=0;i<40;i++)

for(intj=0;j<40;j++)

{

cell[i][j].live=true;

cell[i][j].others=0;

}

while

(1)

{

for(inti=0;i<40;i++)

for(intj=0;j<40;j++)

{

cell[i][j].others=0;

}

for(inti=0;i<40;i++)

{

for(intj=0;j<40;j++)

{

if(cell[i][j].live)

cout<<"$";

else

cout<<"-";

}

cout<

}

for(inti=0;i<40;i++)

for(intj=0;j<40;j++)

{

if((i-1)>=0&&(j-1)>=0&&cell[i-1][j-1].live)

cell[i][j].others++;

if((i-1)>=0&&cell[i-1][j].live)

cell[i][j].others++;

if((i-1)>=0&&(j+1)<40&&cell[i-1][j+

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

当前位置:首页 > 小学教育 > 其它课程

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

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