猜数字游戏的分析与实现

目录 一 游戏说明

二 总体设计

三 程序代码

四 运行结果

五 附录文档

一 游戏说明(猜数字)

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 文件及函数组成

三.程序代码

1 主体游戏程序

using namespace std; void rand_num( int [] ); void get_num(int [],int ); bool check_num(int []); int guess_num(int ); void goal(int , int , int ); void choose_menu(); void new_game();

void show_tiptop(); void show_explain(); void clean_data(); void display(); int choose_level();

void main(){ }

#include #include #include #include #include #include #include using namespace std;

#pragma warning(disable :4996) struct data { };

fstream iofile;

void rand_num(int b []){ }

void get_num(int b [],int k ) {

int temp; int temp2; int c[10] = { 0 };

for (int i = 0; i

c[i] = i;

srand((unsigned )time(0)); for (int j = 0; j

for (int k = 0; k

cout

temp = rand() % (10 - j) + j; temp2 = c[temp]; c[temp] = c[j]; c[j] = temp2; b [j] = c[j]; int goal; char name[20]; choose_menu();

}

cout

for (int i = 0; i

cin >> b [i];

bool check_num(int b []) { }

int choose_level(){ }

int guess_num(int level ){

system("cls" ); int A ;int B ; int a[4] = { 0 }; int b[4] = { 0 }; rand_num(a); int times = 0;

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

get_num(b,k);

while (!check_num(b)){

k--;

get_num(b,k);

int x;

cout

cout > x;

while (x > 2 && x

if (x == 1)return 1; if (x == 2)return 2; if (x == 3)return 3;

cout > x;

for (int i = 0; i

return true ;

if (b [i]9){ }

cout

}

}

A = B = 0;

for (int i = 0; i

cout if (A == 4)return times;

if (a[i] == b[i])A++; for (int j = 0; j

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

for (int k = 0; k

cout

return 0;

void goal(int times , int time , int level ) {//计算分数并保存 }

void new_game(){ //开始新游戏

int goal; char name[20]; data temp,temp2;

iofile.open("e:\\dataf.dat", ios ::in | ios ::app | ios ::binary); if (!iofile){ }

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

cout

if (temp.goal > goal)cout

iofile.close();

cout > name; temp.goal = goal; strcpy(temp.name,name);

//iofile

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

clock_t start, finish; int a; int b; int level; int time;

level=choose_level(); start = clock(); a=guess_num(level); finish = clock();

time = (int )(finish - start); goal(a, time,level);

cout > b;

if (b == 1)new_game();

}

void show_tiptop(){

int x;

data data1[3] = { 500, "ting" ,400,"qian" ,300, "07161208" }; iofile.open("e:\\dataf.dat", ios ::in|ios ::app|ios ::binary); if (!iofile){ }

for (int i=0; i

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

cout > x; while (x != 4){

data datal[1];

if (x4)cout

iofile.seekg((x - 1)*sizeof (datal[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0]));

cout

iofile.seekg((x - 1)*sizeof (data1[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0])); cerr

case 2:

}

}

break ;

iofile.seekg((x - 1)*sizeof (data1[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0]));

cout

case 3:

cout > x;

iofile.close();

}

void show_explain(){//查看游戏说明 }

void clean_data(){

data temp,temp2;

iofile.open("dataf.dat" , ios ::in | ios ::app | ios ::binary); temp.goal=0;

cout > a; system("cls" ); int a;

cout

cout

cout

cout

cout

cout

}

for (int i = 0; i

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

void display(){

system("cls" ); cout

cout

cout

cout

} //清空所有数据 void choose_menu(){

int x; display();

cout > x; while (x != 5){

switch (x){ case 1: }

display();

cout

new_game(); break ;

show_tiptop(); break ;

show_explain(); break ; clean_data(); break ;

case 2:

case 3:

case 4:

}

} cin >> x;

四 运行结果

一 游戏说明(生命游戏)

而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。

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

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

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

3) 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生

命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。

三.程序代码

#include

using namespace std;

#include

#include

struct Cell

{

};

void main()

{

for (int i = 0; i

} } } } else cout = 0 && (j - 1) >= 0 && cell[i - 1][j - 1].live) cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; if ((i - 1) >= 0 && cell[i - 1][j].live) if ((i - 1) >= 0 && (j + 1)= 0 && cell[i][j - 1].live) if ((j + 1)= 0 && cell[i + 1][j - 1].live) if ((i + 1)

四 运行结果

五 附录文档

1 游戏规则

(1)游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。

(2)玩家有10次猜数字的机会,如果在10次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。

(3) 一旦玩家在10次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。

(4)当玩家赢得游戏后,会与排行榜中的前五名玩家的游戏记录比较,如果排名能够进入前五名,则更新排行榜,使当前玩家成为入榜选手。

(5)记分规则:猜数字所用次数即为分数,所以分数越少证明玩家水平越高。

我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N 的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。

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

1) 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原

先为死,则转为生,若原先为生,则保持不变) 。

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

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

2.心得体会

一直以为用C++语言编写一个程序 是一个十分困难的事情。以前也曾认为过 C++语言不是很实用,但是通过学习 , 也充分认识到了C++语言编程中的乐趣,也懂得了如何应用, 我可以更努力 ,去客服一个个困难。

目录 一 游戏说明

二 总体设计

三 程序代码

四 运行结果

五 附录文档

一 游戏说明(猜数字)

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 文件及函数组成

三.程序代码

1 主体游戏程序

using namespace std; void rand_num( int [] ); void get_num(int [],int ); bool check_num(int []); int guess_num(int ); void goal(int , int , int ); void choose_menu(); void new_game();

void show_tiptop(); void show_explain(); void clean_data(); void display(); int choose_level();

void main(){ }

#include #include #include #include #include #include #include using namespace std;

#pragma warning(disable :4996) struct data { };

fstream iofile;

void rand_num(int b []){ }

void get_num(int b [],int k ) {

int temp; int temp2; int c[10] = { 0 };

for (int i = 0; i

c[i] = i;

srand((unsigned )time(0)); for (int j = 0; j

for (int k = 0; k

cout

temp = rand() % (10 - j) + j; temp2 = c[temp]; c[temp] = c[j]; c[j] = temp2; b [j] = c[j]; int goal; char name[20]; choose_menu();

}

cout

for (int i = 0; i

cin >> b [i];

bool check_num(int b []) { }

int choose_level(){ }

int guess_num(int level ){

system("cls" ); int A ;int B ; int a[4] = { 0 }; int b[4] = { 0 }; rand_num(a); int times = 0;

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

get_num(b,k);

while (!check_num(b)){

k--;

get_num(b,k);

int x;

cout

cout > x;

while (x > 2 && x

if (x == 1)return 1; if (x == 2)return 2; if (x == 3)return 3;

cout > x;

for (int i = 0; i

return true ;

if (b [i]9){ }

cout

}

}

A = B = 0;

for (int i = 0; i

cout if (A == 4)return times;

if (a[i] == b[i])A++; for (int j = 0; j

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

for (int k = 0; k

cout

return 0;

void goal(int times , int time , int level ) {//计算分数并保存 }

void new_game(){ //开始新游戏

int goal; char name[20]; data temp,temp2;

iofile.open("e:\\dataf.dat", ios ::in | ios ::app | ios ::binary); if (!iofile){ }

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

cout

if (temp.goal > goal)cout

iofile.close();

cout > name; temp.goal = goal; strcpy(temp.name,name);

//iofile

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

clock_t start, finish; int a; int b; int level; int time;

level=choose_level(); start = clock(); a=guess_num(level); finish = clock();

time = (int )(finish - start); goal(a, time,level);

cout > b;

if (b == 1)new_game();

}

void show_tiptop(){

int x;

data data1[3] = { 500, "ting" ,400,"qian" ,300, "07161208" }; iofile.open("e:\\dataf.dat", ios ::in|ios ::app|ios ::binary); if (!iofile){ }

for (int i=0; i

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

cout > x; while (x != 4){

data datal[1];

if (x4)cout

iofile.seekg((x - 1)*sizeof (datal[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0]));

cout

iofile.seekg((x - 1)*sizeof (data1[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0])); cerr

case 2:

}

}

break ;

iofile.seekg((x - 1)*sizeof (data1[x - 1]), ios ::beg); iofile.read((char *)&datal[0],sizeof (datal[0]));

cout

case 3:

cout > x;

iofile.close();

}

void show_explain(){//查看游戏说明 }

void clean_data(){

data temp,temp2;

iofile.open("dataf.dat" , ios ::in | ios ::app | ios ::binary); temp.goal=0;

cout > a; system("cls" ); int a;

cout

cout

cout

cout

cout

cout

}

for (int i = 0; i

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

void display(){

system("cls" ); cout

cout

cout

cout

} //清空所有数据 void choose_menu(){

int x; display();

cout > x; while (x != 5){

switch (x){ case 1: }

display();

cout

new_game(); break ;

show_tiptop(); break ;

show_explain(); break ; clean_data(); break ;

case 2:

case 3:

case 4:

}

} cin >> x;

四 运行结果

一 游戏说明(生命游戏)

而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。

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

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

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

3) 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生

命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。

三.程序代码

#include

using namespace std;

#include

#include

struct Cell

{

};

void main()

{

for (int i = 0; i

} } } } else cout = 0 && (j - 1) >= 0 && cell[i - 1][j - 1].live) cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; cell[i][j].others++; if ((i - 1) >= 0 && cell[i - 1][j].live) if ((i - 1) >= 0 && (j + 1)= 0 && cell[i][j - 1].live) if ((j + 1)= 0 && cell[i + 1][j - 1].live) if ((i + 1)

四 运行结果

五 附录文档

1 游戏规则

(1)游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。

(2)玩家有10次猜数字的机会,如果在10次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。

(3) 一旦玩家在10次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。

(4)当玩家赢得游戏后,会与排行榜中的前五名玩家的游戏记录比较,如果排名能够进入前五名,则更新排行榜,使当前玩家成为入榜选手。

(5)记分规则:猜数字所用次数即为分数,所以分数越少证明玩家水平越高。

我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N 的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。

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

1) 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原

先为死,则转为生,若原先为生,则保持不变) 。

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

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

2.心得体会

一直以为用C++语言编写一个程序 是一个十分困难的事情。以前也曾认为过 C++语言不是很实用,但是通过学习 , 也充分认识到了C++语言编程中的乐趣,也懂得了如何应用, 我可以更努力 ,去客服一个个困难。


相关文章

  • 基于安卓系统的游戏开发与实现
  • XX大学 毕业设计(论文) 院 系: 信息工程学院 专 业: 计算机科学与技术 班 级: 学生姓名: XX 学 号: XXXXXXX 导师姓名: XXXX 职称: 讲师 起止时间: 2014 年 3月 1 日至 2014年 5月31日 XX ...查看


  • 小班创游游戏计划
  • 小班创游游戏计划 小四班 郑丹 班级情况分析: 小班幼儿有意注意时间短,好模仿,思维具体形象,处于语言发展的关键期,自我意识开始萌芽.我班幼儿的个体差异大,能力差的孩子不会再区域里安静的玩耍,常常不能遵守游戏的规则.为促进幼儿创造潜能的开发 ...查看


  • 浅议新型人机交互方式的种类及应用特性
  • 引言:我一直这么认为,要想深入认知一个行业或者专业技能,必须先对其传播媒介有所研究,因为这才是能否将意图准确传递给大众的关键,能否实现的良好互动体验的关键.所以这篇论文我对时下流行的交互方式和新型交互设备做了类比分析,清晰指出各自的优缺点. ...查看


  • 软件项目实训报告模板 1
  • 电气信息学院 实训报告 课 程 名 称: 软件项目实训 实 训 题 目: 猜数字游戏 年级/专业/班: 2009过程自动化01 学 生 姓 名: 学 号: 实训成绩: 指导教师签名: 年 月 日 1 引言 1.1系统概述 猜数字是一种益智类 ...查看


  • ERP1队真人密室逃脱策划书
  • 密 室 逃 脱 策 划 书 ERP1队: 何梓鹏.叶盛强 王科杰.梁舒婷 陈蔼玲.梁燕晶 2016年10月18号 目录 一.活动背景------------------------------------------------------ ...查看


  • 幼儿园数学教案 2
  • 幼儿园小班科学教案:不沉的纸船 设计意图: 船是幼儿喜欢的一种玩具,爱玩也是小班幼儿的天性.我利用幼儿爱玩玩具的天性进行导入,让幼儿乐于参与探索活动.通过巧妙地提供两种材料,让幼儿在实践操作的过程中主动发现问题.引导幼儿运用感官比较.观察两 ...查看


  • 幼儿园课程教案大班
  • 篇一:幼儿园课程教案 幼儿园课程教案:十二生肖 活动目标: 1.认识">"和"<",理解不等式的含义,理解大小的相对性.. 2.学习把不等式转变为等式. 3.培养幼儿思维的灵活性和可逆性, ...查看


  • 数字化校园建设方案
  • 数字化校园建设方案 项目建设领导小组 组 长:陈登斌 副组长:姜佐澧 李伟舵 孔东阳 成 员:瞿佳木 张继伟 孙 瑜 陈登贵 曹端阳 一.建设背景 在信息化浪潮席卷全球.日益渗透到社会生活各个领域的今天,数字化校园建设如火如荼.特别是欧美. ...查看


  • [现代顺风耳---电话]说课稿
  • 八年级物理第十章第一节<现代顺风耳--电话>说课稿 建昌一中 李学亮 各位评委老师好!我今天说课的内容是人教版八年级物理第十章第一节<现代顺风耳-电话>, 下面我从四个方面来阐述: 第一部分[分析教材] 1.教材分析 ...查看


热门内容