用C语言制作一个猜数字游戏

萌到你眼炸
711次浏览
2021年01月01日 03:33
最佳经验
本文由作者推荐

班得瑞钢琴曲-流逝的岁月

2021年1月1日发(作者:丰越人)


计算机技术基础课程设计
C语言
设计报告








题目:用C语言制作一个猜数字游戏

学院:电气与电子工程学院

专业:测控技术与仪器专业

班级:030308班

姓名:郭仲尧

指导教师:张守伟

设计日期: 2004年12月24日



题目:用C语言制作一个猜数字游戏
一、选题背景:
这是一个模仿“文曲星”中猜 数字游戏的小程序,其主要是随机生成4个(也可以增
加)不同的数字,然后由玩家键入数字,同时系统 给予一定的提示帮助,当输入错误次数
超过最大次数时游戏结束。

二、设计思想:
猜数字游戏是一个比较长见的游戏,其最基本的是生成几个不同的随机数,当玩家不能
在规定 次数内输入正确时系统自动结束游戏,并给出正确答案。并询问是否继续。

在实现过程中,应 用到了时间函数来生成随机数并与10取余来生成一位随机数,然后
再自定义一个函数来判断所生成随机 数是否有重复,当无重复时做为机给定答案。如果所
生成的数字有重复则重新生成。













三、程序流程图




主函数













2游戏说明



清屏输出说明
并返回


游戏说明及选项




游戏选项,非1,2,3为无
效输入。



1开始游戏

并生成4个一
位随机数




3退出询问



选择是,
结束程序



选择否,
返回



玩家输入

判断是输入是否有重复数字

并给予一定提示





在规定次数内猜对,输出你
猜对了。

询问‘是’继续,‘否’退出。


如超过最大回答次数,给出


正确答案。

询问‘是’继续,‘否’退出







选择否
退出



选择否
退出



选择是
返回

选择是
返回





程序结束





四、程序清单:
#include

#include

#include

#define MANY 4
#define TIME_OUT 8
*定义变量及函数*
int a,b,u
void game();
void ab(int answer[],int guess[]);
void same(int num[]);

*主目录*
#include

#include

#include

#define MANY 4
#define TIME_OUT 8
*定义变量及函数*
int a,b,u
void game();
void ab(int answer[],int guess[]);
void same(int num[]);

*主目录*

void menu()
{
char choice,ch
do

{
do

{
system(
printf(简单猜数字nnnn
printf(开始游戏nn
printf(使用说明nn
printf(退出nn


printf(请输入(1-3):
fflush(stdin);
choice=getchar();
}
while(choice!='1'&&choice!='2'&&choice!='3');


switch(choice)
{
case '1' :
{
game();
break
}
case '2' :
{
system(
printf(欢迎使用本程序nnn
printf(游戏说明:输入%d位数字,输入后会有提示XaYb,X表示有几
个 数字与答案数字相同且位置相同。n
printf(表示有几位数 字与答案数字相同但位置不正确。n
printf(例如:答案数字是5764,如果输入5481,则 会提示1a1b。n
printf(祝你愉快!nn
printf(按任意键返回主目录……n
getch();
break
}
case '3' :
{
printf(确定要退出吗?(yn):
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')exit(0);
else continue
}
}


}
while(1);
}
*游戏部分*
void game()
{
int guess[MANY],answer[MANY];
int times,i,m,j ;
int key;
time_t t
char wantplay,temp
srand((unsigned)time(&t));
do

{
*生成MANY个随机数*

do

{
u=0
for(i=0;i guess[i]=rand()%10
same(guess);
}
while(u);
printf(请输入%d位不相同的数:n
for(times=1;times<=TIME_OUT+1;times++)
{
*超过限定数次*

if(times==(TIME_OUT+1))
{
printf(真确答案是:
for(m=0;m printf(猜了%d次都没猜中
break
}
printf(第%d次:


*玩家输入*
fflush(stdin);
for(j=0;j {
temp=getchar();
answer[j]=temp-48; *temp是char型*
}
*检查输入有没有重复*

u=0
same(answer);
if(u)
{
printf(你输入的数字有重复,请重新输入n
continue
}
ab(answer,guess); *判断输入数字正确的个数*
if(a==MANY)
{
printf(恭喜!你猜对了
break
}
else printf(
}
printf(还想玩吗?(yn):
fflush(stdin);
wantplay=getchar();
if(wantplay=='y'||wantplay=='Y')
{
system(
continue
}
else menu();
}
while(wantplay=='y'||wantplay=='Y');
}


*判断输入的数或生成的数有没有重复的函数*
void same(int num[])
{
int i,j
for(i=0;i for(j=i+1;j if(num[i]==num[j])
u=1
}
*提示XaYb的函数*
void ab(int answer[],int guess[])
{
int i,j ;
a=b=0
for(i=0;i for(j=0;j if(answer[i]==guess[j])
if(i==j)a++;
else b++;
}
*主函数*
void main()
{
menu();
}

五、主要解决问题的方法及技术关键
1、

主要问题及解决方法

I.

随机数生成问题

用库函数stdlib.h及time.h来生成4个伪随机数,然 后用所生成的4个随机数与10取余
数,这样就可以生成4个随机数。

II.

随机数重复问题

当生成4位随机数时难免要出现重复数字,所以要通过自定义的函数void same (int num
[])来判断数字是否有重复(具体内容在程序中可见),当出现重复数字时系统将重新生成< br>随机数。


2、

技术关键



随机数生成(stdlib.h和time.h函数的调用)



数字重复问(自定义函void same (int num []))

六、设计结果说明
1、设计优点:并未涉及到复杂函数,所用的全部是基本的简单函数。

2、设计不足:本程序仅能输出字符,无图形界面。

姓刘-扇形统计图教学反思


监事会-国庆联欢晚会


飞车名-关于鼠的成语


南瓜怎么做好吃-树林里的上帝


威武不屈-赠花卿古诗


七月十五是什么节-帅哥美女


悲鸣-打造美女


风中的承诺简谱-公司租房合同范本