题目:
功能模块说明:
- 登录:密码设置为“abc”,共三次输入密码机会, 超过三次为登录不成功。
- 选择项目:列出三个选项,1、猜数字,2、猜大小,3、退出。选择项目后,执行相应内容。
- 猜数字:随机产生一个0到99之间的整数,5次猜数字机会,没猜中会提示太大还是太小。
- 猜大小:随机产生一个1到6之间的整数,1-3为小,4-6为大,用户猜大小。
注:猜数字和猜大小模块后,回到选择项目模块。
思路:
- 利用 while(1) 死循环,以及调用定义的每个模块的函数来实现整个程序。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h> //用于猜数游戏中,rand生成随机数
#define N 30
#define PASS_WORD "abc" //密码
#define TRIES 3 //登录密码的尝试次数
/*猜数*/
#define MAX_NUM 100 //猜数的范围
#define GUESS_TIME 5 //猜数的次数
int Menu(); //菜单
int Login(); //登录
void Guess_Num(); //猜数字
void Guess_Size(); //猜大小
int Menu()
{
system("cls");
int chose = 0;
printf("\n************************恭喜进入本程序************************\n");
printf("您有以下选择:\n");
printf("1、猜数字游戏\n");
printf("2、猜大小游戏\n");
printf("0、退出\n");
printf("请选择:");
while(1)
{
scanf("%d", &chose);
if(chose >= 0 && chose <= 3)
break;
else
{
printf("阁下,好像没这个选项吧。\n");
printf("请按要求重新输入:\n");
}
}
return chose;
}
int Login()
{
system("cls");
char password[N] = "\0";
int count = 0;
int i = 0;
printf("请输入登录密码:");
while(1)
{
scanf("%s", password);
if(strcmp(password, PASS_WORD) == 0)
{
for(i = 0; i < 5; i++)
{
printf(".");
Sleep(500);
}
printf("\n\n密码正确!!!\n");
Sleep(1000);
system("pause");
return 1;
}
else if(count == TRIES - 1)
{
return 0;
}
else
{
printf("\n密码错误!!!您还有%d次机会\n", TRIES - count - 1);
printf("请重新输入:");
count++;
}
}
return 0;
}
void Guess_Num()
{
system("cls");
srand((unsigned) time(0)); //撒种子
int num = rand() % MAX_NUM; //随机生成的数
int guess = 0; //用户猜的数
int count = 0; //猜数的次数
printf("\n************************欢迎来到猜数游戏************************\n");
printf("游戏规则:\n");
printf("您输入一个%d以内的数字,我说出猜大了还是猜小了,您有%d次猜数机会。\n", MAX_NUM, GUESS_TIME);
printf("请输入一个数字:");
while(1)
{
scanf("%d", &guess);
if(0 <= guess && guess < MAX_NUM)
{
while(1)
{
if(count < GUESS_TIME)
{
if(num < guess)
{
printf("猜大了,小一点:");
scanf("%d", &guess);
count++;
}
else if(num > guess)
{
printf("猜小了,大一点:");
scanf("%d", &guess);
count++;
}
else if(num == guess)
{
printf("猜对了!!!\n这次的数是%d", num);
return;
}
else
break;
}
else
{
printf("很遗憾,%d次机会已经用完了,本次游戏结束。\n", GUESS_TIME);
printf("很接近了,这次的数是%d\n", num);
return;
}
}
}
else
printf("输入有误,请按要求重新输入:");
}
system("pause");
}
void Guess_Size()
{
system("cls");
srand((unsigned) time(0)); //撒种子
int num = rand() % 6 + 1;
int guess = 0;
printf("\n************************欢迎来到猜大小游戏************************\n");
printf("游戏规则:\n");
printf("随机生成一个1到6的数,1,2,3为小,4,5,6为大,您猜大小,大为“1”, 小为“0”\n");
printf("游戏已经开始,请猜大小:");
while(1)
{
scanf("%d", &guess);
if(guess == 0 || guess == 1)
break;
else
printf("猜测有误,猜大按“1”, 猜小按“0”,请重新猜:");
}
if(num >= 1 && num <= 3 && guess == 0)
{
printf("猜对了!这次的数是%d\n", num);
}
else if(num >= 4 && num <= 6 && guess == 1)
{
printf("猜对了!这次的数是%d\n", num);
}
else
printf("\n可惜可惜,猜错了。不要气馁,再来挑战!\n");
return;
}
int main()
{
int chose = 0; //用户的选择
int running = 1; //控制while
int login_status = Login(); //接收登录状态
if(login_status == 1)
{
while(running)
{
chose = Menu();
switch(chose)
{
case 0:
{
system("pause");
return 0;
}
case 1:
{
Guess_Num();
system("pause");
break;
}
case 2:
{
Guess_Size();
system("pause");
break;
}
}
printf("返回主页请按“1”, 退出程序请按“0”:");
scanf("%d", &running);
}
}
else
printf("\n您已经输错%d次密码,请下次再来登录。\n", TRIES);
return 0;
}
运行结果:
- 登录
- 菜单
- 猜数字
- 猜大小
经测试,结果符合题目要求。
**
- 代码练习,仅为一种思路,若有错误请指出
**