猜数字游戏课程设计报告

绝世美人儿
947次浏览
2021年01月01日 02:53
最佳经验
本文由作者推荐

鹤花-岑文本初仕萧铣

2021年1月1日发(作者:季德基)


学校

《C程序设计》
课程设计报告

设计题目:猜数字游戏
附录完整源代码











专 业:
班 级:
学 生:
学 号:
指导教师:
起止时间: xxx.x.x -xxx.x.x
xxxx-xxxx年 xx 学期


1



1 、 程序设计描述
1.1 程序设计目的:
1.2 程序设计要求:
1.3、猜数字游戏的简介:
2 、程序设计内容:
2.1、游戏主要框架图:
2.2、开始游戏框架:
2.3、最佳排行框架:
2.4、游戏操作说明模块:
2.5、退出游戏系统:
2.6、游戏系统总流程图:
3、猜数字游戏源代码:
3.1、void main()函数函数功能:
3.2、void game();双人游戏
void pgame();单人游戏
3.4、排行榜模块函数功能:
3.5、继续游戏模块函数功能:
3.6、操作说明模块函数功能:
4、调试与测试:
4.1、调试方法
4.2、测试结果的分析与讨论
4.3、测试过程中遇到的主要问题及采取的解决措施
5、程序具体说明书:
6、程序设计心得:
7、参考文献


2


、 程序设计描述
1.1 程序设计目的:
综合使用所学过的C语 言程序设计知识,掌握结构化程序设计的基本思路和
方法,利用所学的基本知识和技能,发挥自学能力和 查找资料的能力,解决稍微
复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自 己
所学知识解决实际问题的能力,为以后的程序开发打下基础。
1.2 程序设计要求:
1、巩固和加强《C语言程序设计》课程的理论知识。
2、掌握C语言的基本概念、语法、语义和数据类型的使用特点。
3、掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。
4、进一步理解和运用结构化程设计的思想和方法;学会利用流程图。
5、掌握调试程序的基本方法及上机操作方法。
6、掌握书写程设计开发文档的能力,学会撰 写课程设计总结报告。课程设计
的思想和方法还可以作为做毕业论文时的参考资料。
7、通过查阅手册和文献资料,培养独立分析问题和解决问题的能力。为做毕
业设计打好基础。
8、培养自己的创新能力和创新思维。可以根据指导书和相关文献上的参考算
法,自己设计出相 应的应用程序。
9、培养自己良好的程序设计风格。在实际编程中,为了提高编程质量,对空
行、空格和注释均有要求。在课程设计书写代码时,应该严格按要求处理,以便
建立良好的程序设计风格 。
1.3、猜数字游戏的简介:
猜数字游戏(又称 Bulls and Cows )是 一种大概于20世纪中期兴起于英
国的益智类小游戏。一般由两个人玩,也可以由一个人和电脑玩,在纸 上、在网
上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。
2 、程序设计内容

2.1、游戏主要框架图:
该模块为玩家提供猜数字游戏的主体 功能,即开始游戏、继续游戏、最佳排
行、操作说明、退出游戏。给用户一个清晰明了的操作界面!流程 图如下:
3



系统模块结构图
2.2、开始游戏框架:




开始游戏























①单人游戏由系统产生4个随机数, 并按任意顺序排列,作为游戏的原始数
字供玩家进行猜数字游戏。
②双人游戏有主用户知己定义输入输入,再用另一用户猜测!
4


单人、双人游:提示用户数值和位置全对的数字个数,和只有数值但位置
不对的数字 个数。
④原始数字显示:当用户在8次之内仍未能猜出原始数字和顺序时,系统提
示玩家失败 ,并给玩家显示出原始数字和顺序。
2.3、最佳排行框架:
进入该界面后,进行提示由于技术问题此项有待解决!


个人认为最佳排行的应有的功能想法(有待改进)
该模块为玩家提供排行榜的浏览和清除功能 ,包括按玩家成绩顺序浏览、按
玩家姓名浏览和清除排行榜功能。
2.4、游戏操作说明模块:
进入该界面后,进行提示由于技术问题此项有待解决!当玩家选 项为帮助功
能对应的选项数字时,进入帮助模块,给出用户猜数字的游戏规则和游戏中相关
提示 的含义和简单提示。
5




2.5、退出游戏系统:
该功能主要是在主界面操作,为方便用户退出游戏功能




2.6、游戏系统总流程图:

6



开始



功能选择




继最操


续 佳作


游排说


戏 行 明
游戏



输入0
输入0
输入0

单人
双人




主完家输入
系统内部随机出
0

0
输入数字



是否有

输出第一次结果
效四位




是否大达

输出结果
不输出结果
到3此?

并返回




提示再输


结束游戏





7

退



输入0


、猜数字游戏源代码:
游戏主程序调用的函数如下:
#include
#include
#include
#include
#define N 4 随机抽N个数
#define NUM 8 NUM次猜数的机会
void mainmenu();游戏主菜单
void bestmenu();最佳排行子菜单Best ranking
void continumenu();继续游戏子菜单Continue to game
void operationmenu();操作说明子菜单operation explanation
void playgame();新游戏子菜单
void game();双人游戏
void pgame();单人游戏
void gotoxy(int x,int y)
{




COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
3.1、void main()函数函数功能:
功能:软件执行的入口,在函数所在 的程序头部包含可部分系统必须的
头文件和完成其他功能的源文件。在该函数中还提供了系统功能选择的 平
台,提示用户系统可用的功能有哪些和这些功能的选项代码。并给用户提供
输入功能选项代码 的接口,当用户输入选项代码后,即显示给用户相应的功
能处理界面或结果。
欢迎界面
8

















while(1)
{ system(颜色代码













mainmenu();调用游戏主菜单
printf(请输入序号:
choose =getchar();switch(choose)
{case '1':









do
{ int x;







playgame();调用开始新游戏子菜单
printf(请输入序号:
editch=getchar();
switch(editch)
{
case '1':game();
loop1:{printf( |****按0键返回两人游戏菜单

*****|n








scanf(
switch(x)


{
case 2: printf(按0键返回
两人游戏菜单*****|n
















goto loop1;
}break;

case '2':pgame();
loop2:{printf(按0返回两人
游戏菜单*********|n
scanf(
9







switch(x)


{
case 2: printf(按0返回两人
游戏菜单********|n





















case '0':


system(清屏函数
printf(


goto loop2;
} break;
操作结束,返回主菜单!








getch();system(
}while(editch!='0');break;
case '2':
do






{
continumenu();调用继续游戏子菜单
printf(按“0”返回上一级菜单:












editch=getchar();switch(editch)
{case '0':




system(清屏函数
printf(
操作结束,返回主菜单!














getch();system(break; }
}while(editch!='0');break;
case '3':
do{bestmenu();调用最佳排行子菜单




printf(按“0”返回上一级菜单:
editch=getchar();swit ch(editch)
10








{ case '0':
system(
printf(操作结束,返回主菜单!
























}
getch();system(
}while(editch!='0');break;
case '4': do





{




operationmenu();调用操作说明菜单
printf(按“0”返回上一级菜单:
editch=getchar(); switch(editch)
{ case '0': system(
printf(操作结束,返回主菜单!








getch();system(

}
}while(editch!='0');break;
case '0':退出猜数字游戏系统
system(printf(
游戏结束,退出系统!getch(); system(
exit(0);}}}

3.2、void game();双人游戏
11


单人游戏
功能:开始猜数字游戏和进行游戏过程 ,调用系统内部以随机给出的数
字,提示用户输入猜数字,每次再输入完整后自动给出答案,在8次之内 未
猜出者提示失败,如果成功,进行提示。
3.3、#define N 4 随机抽N个数
#define NUM 8 NUM次猜数的机会
getnumber()函数
功能:由系统产生4个按任意顺序排列的随机整数。
3.4、排行榜模块函数功能:
void bestmenu();最佳排行子菜单
功能:主要是起调用作用,显示排行界面!(提示数据技术原因未制作)
void bestmenu()猜数字游戏最佳排行子菜单函数
{
system(
printf(
printf(最佳排行 * * * * |n
3.5、继续游戏模块函数功能:
void continumenu();继续游戏子菜单Continue to game
功能:主要是起调用作用,显示继续游戏子菜单界面!(提示数据技术原因
未制作)
void continumenu()猜数字游戏继续游戏子菜单函数
{
getchar();
system(
printf(
printf(继续游戏 * * * * |n
3.6、操作说明模块函数功能:
void operationmenu();操作说明子菜单operation explanation
功能:主要是起调用作用,显示操作说明子菜单界面!输出显示帮助系统。
12


双人游戏,由一方出数字,一方猜。出
数字的人要想好一个没有重复 数字的4位数,不能让猜的人知道。猜的人
就可以开始猜。每猜一个数字,出数者就要根据这个数字给出 几A几B,
其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确
而位置不对 的数的个数 如正确答案为 5234,而猜的人猜 5346,则是
1A2B,其中有一个5的位 置对了,记为1A,而3和4这两个数字对了,而
位置没对,因此记为 2B,合起来就是 1A2B, 在本软件中,在用户输入数
字后自动给出答案!猜数字次数限制:本猜数字游戏软件设有猜测次数的上< br>限。根据计算机测算,采用严谨的猜测策略,任何数字最低8次就可猜出。
最快取胜的简单策略 :一是保证在猜测次数限制下赢得游戏,二是使用尽量少
的猜测次数。以目标追求的是最坏情况下的猜测 次数最少。 如启发式策略:这
类策略是猜数字游戏最常用的解法。其算法步骤如下:
甲、 首先猜 1234,得到第一个反馈(xAyB)。
乙、 从所有数字中,筛选出满足已知反馈的所有可能数字,称之为“可能
集”。
丙、 对于所 有数字(而不仅限于筛选出来的可能集),逐一评估每个数字的
“好坏”,并给其打分。选取得分最高的 那个数字猜。如果有多个数字的评分一
样高,则优先选取可能集中的数字。
丁、 重复乙、丙、丁步骤,直到猜出 4A0B 为止。
void operationmenu()猜数字游戏操作说明子菜单函数
{
system(


printf(
printf(操作说明* * * * * * |n
4、调试与测试:
4.1、调试方法:先运行游戏软件,按照提示进行操作, 对输出地数据进行判
断,并参考书籍进行查阅!
4.2、测试结果的分析与讨论:通过查找资料和同学讨论,测试正常。

13





4.3、测试过程中遇到的主要问题及采取的解决措施:同学讨论、上网查阅资
料对错误进行改 进!

5、程序具体说明书:
程序的功能说明:猜数字游戏是一个运行 在Windows平台下的小型游戏软
件,依据猜数字游戏的基本规则,给用户进行娱乐。游戏用户可以 选择开始游、
排行榜查看、帮助等主要功能。如果用户猜数字的次数超过8次,则提示用户游
戏 失败,如果在8次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,
在帮助模块,用户可以查看 游戏规则,当熟悉规则后可以退出帮助模块。 本游

14


基本功能:新游戏:玩家可以在游戏区逐次猜数字,系统给
出玩家每次猜数字后的提示,包括数值、位 置均正确的数字个数和数值正确但位
置不正确的数字个数;查看排行榜:(待改进);清除排行榜:(待 改进); 帮助:
玩家通过帮助功能了解游戏规则和排行榜设置规则。
6、程序设计心得:
通过猜数字游戏课程设计了解其典型功能:即系统产生4个不重复的随机数
字、提供给玩家8次 猜测机会、提供给玩家每次猜数字后的正确数字和位置,让
玩家根据这些信息继续下一次的猜测。简单的 设计蕴涵了多种功能,简单而又全
面。
实验过程中,通过查询各资料基本掌握数字游戏功能的 实现步骤,并且熟练
了解流程图设计与编画过程。能够次实验的设计成功完成游戏,准确猜出所须的4位数。感觉对所学的知识有更进一步的了解。


附:完整代码,VS建工
程,COPY运行就OK


#include
#include
#include
#include
#define N 4 随机抽N个数
#define NUM 8 NUM次猜数的机会
15


游戏主菜单
void bestmenu();最佳排行子菜单Best ranking
void continumenu();继续游戏子菜单Continue to game
void operationmenu();操作说明子菜单operation explanation
void playgame();新游戏子菜单
void game();双人游戏
void pgame();单人游戏
void gotoxy(int x,int y)
{
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE),
}

void main()
{

char choose='0';
char editch='0';
char continu='0';
char operation='0';
char sortch='0';
char play='0';
system(颜色代码
system(清屏函数
gotoxy(20,3);
printf(
gotoxy(20,4);
16

c);


printf(欢 | | 迎 |




























gotoxy(20,5);
printf(
gotoxy(20,6);
printf( | * * | 1 |
gotoxy(20,7);
printf( | *** *** | 0 |
gotoxy(20,8);
printf( | ** * * ** | 1 |
gotoxy(20,9);
printf( | | 0 |
gotoxy(20,10);
printf( | * * | 1 |
gotoxy(20,11);
printf( | ** ** | 0 |
gotoxy(20,12);
printf( | **** | 1 |
gotoxy(20,13);
printf( | 猜数字游戏 | 0 |
gotoxy(20,14);
printf( |__________________________| 0 |
gotoxy(20,15);
printf(使 | 0101010 01 | 用 |
gotoxy(20,16);
printf(
gotoxy(20,18);
printf( 尊敬的用户你好!n
gotoxy(20,19);
printf( 你首先感谢你使用本软件!使用本软件请n
17
























gotoxy(20,20);
printf(你注意以下事项!避免对你造成不必要的麻烦n
gotoxy(20,21);
printf(敬请谅解!n
gotoxy(20,22);
printf(一、请使用正版软件,如使用盗版造成的后n
gotoxy(20,23);
printf(果请自负!n
gotoxy(20,24);
printf(二、本软件是试用版本.如有疑问,请你联系n
gotoxy(20,25);
printf(作者,为你提供技术服务!n
gotoxy(20,26);
printf(三、本软件严格遵守国家关于软件相关的隐n
gotoxy(20,27);
printf(私法律!n
gotoxy(20,28);
printf(四、本软件完美兼容WIN7、XP!n
gotoxy(20,29);
printf( 更多精彩内容,请关注官网! n
gotoxy(20,30);
printf( 如果你同意以上内容,请进行下一步,
gotoxy(20,31);




printf(否则请你退出游戏!
gotoxy(20,33);
printf(按任意键进入猜数字游戏主菜单****
getch();

while(1)
18


{
































system(颜色代码
mainmenu();调用游戏主菜单
printf( 请输入序号:
choose=getchar();
switch(choose)
{
case '1':









do
{ int x;







playgame();调用开始新游戏子菜单
printf( 请输入序号:
editch=getchar();
switch(editch)
{
case '1':game();
loop1:{printf( |****按0键返回两人游戏菜
单*****|n }








scanf(
switch(x)


{
case 2: printf( |****按0键返回两人游戏
菜单*****|n
















goto loop1;
}break;

case '2':pgame();

loop2:{printf( |******按0返回两人游戏菜
19


*********|n }








scanf(
switch(x)


{
case 2: printf( |******按0返回两人游戏
菜单********|n
goto loop2;
} break;
case '0':
system(清屏函数
printf(
束,返回主菜单!
getch();
system(
break;
}
}while(editch!='0');
break;

case '2':
do
{
continumenu();调用继续游戏子菜单
printf(
单:
editch=getchar();
switch(editch)
{

20


操作结

按“0”返回上一级菜



















case '0':


system(清屏函数
printf( 操作结
束,返回主菜单!
getch();
system(
break;
}
}while(editch!='0');
break;

case '3':
do
{
bestmenu();调用最佳排行子菜单
printf(

editch=getchar();
switch(editch)
{

case '0':
system(
printf(
束,返回主菜单!
getch();
system(
break;
21

按“0”返回上一级菜单:
操作结





































}
}while(editch!='0');
break;
case '4':
do



{


operationmenu();调用操作说明菜单
printf( 按“0”返回上一级菜单:
















editch=getchar();
switch(editch)
{

case '0':








system(
printf(
操作结束,返回主菜单!



























case '0':退出猜数字游戏系统


system(
printf( 游戏结束,退


















}
getch();
system(
break;
}while(editch!='0');
break;
出系统!
22







}





}



}
getch();
system(
exit(0);
void mainmenu()猜数字游戏主菜单函数
{












}
void playgame()猜数字游戏开始游戏子菜单函数
{
system(清屏函数



printf(
printf( |* * * * * 猜数字游戏 * * * * *|n
printf( |..............................|n
23


system(清屏函数
printf(
printf( |* * * * * 猜数字游戏 * * * * *|n
printf( |..............................|n
printf( | 请选择菜单序号(0~4) |n
printf( |..............................|n
printf( | 1----开始游戏 |n
printf( | 2----继续游戏 |n
printf( | 3----最佳排行 |n
printf( | 4----游戏规则 |n
printf( | 0----退出系统 |n
printf( |..............................|n


printf ( | 请选择菜单序号(0~2) |n


printf( |..............................|n
printf( | 1----双人游戏 |n
printf( | 2----单人游戏 |n



}
void continumenu()猜数字游戏继续游戏子菜单函数
{








getchar();
system(
printf(
printf( |* * * * * * * 继续游戏 * * * * |n
printf( |...............................|n
printf( | 尊敬的用户你好! 首 |n
printf( | 先感谢你使用本游戏 ,由 |n
printf( | 于此功能处于研发中 ,如 |n
printf( | 0----退出系统 |n
printf( |..............................|n
printf( | 对你造成不便, 敬请谅解 |n
printf( | 感谢你的关注! 谢谢! |n
printf( | 祝你游戏愉快 ! |n


}

void bestmenu()猜数字游戏最佳排行子菜单函数
{
system(
printf(
24


printf( |...............................|n


print f( |* * * * * * * 最佳排行 * * * * |n




printf( |...............................|n
printf( | 尊敬的用户你好! 首 |n
printf( | 先感谢你使用本游戏 ,由 |n
printf( | 于此功能处于研发中 ,如 |n
printf( | 对你造成不便, 敬请谅解 |n
printf( | 感谢你的关注! |n
printf( | 祝你游戏愉快 ! |n


}

void operationmenu()猜数字游戏操作说明子菜单函数
{
system(






printf(
printf( |* * * * * * * 操作说明* * * * * * |n
printf( |..................................|n
printf( | 尊敬的用户你好! |n
printf( | 首先感谢你使用本游戏,在 |n
printf( | 户登陆游戏后,请选择“数字” |n
printf( |...............................|n
printf( | 并确定,进入新游戏!再更具统 |n
printf( | 给出的提示,用户进行数据输入 |n
printf( | ,进行猜测!感受猜字游戏的魅 |n
printf( | 力! |n
printf( | 感谢你的关注! |n
printf( | 祝你游戏愉快 ! |n
printf( |..................................|n

25







void game()双人游戏
{



int i,j,m;
int n;
int a[4];
int tar[4];
int A;
int B;














printf( |*******主玩家输入完毕**********|
for(m=0;m {



if(m==(NUM-1))
{
printf( |**你还有最后一次机会哟!加
printf( |******请输入4位阿拉伯数字******|n
for(i =0;i<4;i++)
{tar[i]=getch();输入任意数字
tar[i]=tar[i]-0x30;自己输入数字(主玩家输入数字,另一玩家再猜)

printf(保密数字用

油!**|n

26




}
printf( |****请输入第%d 次猜测的数
字:

for(i=0;i<4;i++)
{
a[i]=getch();
a[i]=a[i]-0x30;
printf(
}
A=0;
B=0;
for(i=0;i {
if(a[i]==tar[i])
A++;
}

for(i=0;i {
for(j=0;j {
if(a[i]==tar[j]&&i!=j)
B++;
}
}
printf(
printf(
printf(

|****猜测的游戏结果是:
27


printf(

if(A==N)
{
m=NUM;

printf(
n
}
else
if(m==7)
{
printf(
厉!**|n
printf(
for(i=0;i<4;i++)
printf(
printf(


}
}
}
void pgame()单人游戏
{
int i,j,m;
int tar[4];
int A;
int B;

|*******恭喜你猜对啦!********|
|**真遗憾!你失败了,请再接再
|******正确答案是:
28




int n;
int a[4];

for(i=0;i {
tar[i]=(int)rand()%10;
}


for(m=0;m {
if(m==(NUM-1))
{
printf(
油!**|n

}
printf(
字:


for (i=0;i<4;i++)
{
a[i]=getch();
a[i]=a[i]-0x30;
printf(
}
printf(


|**你还有最后一次机会哟!加
|***请输入第%d 次猜测的数
29



A=0;
B=0;
for(i=0;i {
if(a[i]==tar[i])
A++;
}

for(i=0;i {
for(j=0;j {
if(a[i]==tar[j]&&i!=j)
B++;
}
}
printf(
printf(
printf(
printf(

if(A==N)
{
m=NUM;

printf(
n
}
30

猜测的游戏结果是:
|*******恭喜你猜对啦!********|
|***







else if(m==7)
{
printf( |****真遗憾!你失败了,请再接再
厉!**|n







}





}
}








printf( |*********正确答案是:
for(i=0;i<4;i++)
printf(
printf(
参考文献

参考文献格式示例:
1、专著著录格式
<1>谭浩强.书名[C程序设计].版本(第四版).出版社:清华大学 出版社出
版日期:2010 年6月
<2>武爱平.书名[C语言程序设计].版本(第一 版).出版社:吉林大学出版
社出版日期:2010 年1月
2、名词注释
网站来源:http:

31


、部分代码来源
http:
32

颠簸的航行-放风筝的英文


小学记叙文-一朵花开


天正软件下载-关于冬雪的诗句


射门技巧-革命英雄故事


日行一善-television作文


教师诗歌-商鞅变法的内容


莫文蔚的歌-安全教育班会


下载excel2013免费版-脚印论文网