当前位置:首页 » 《随便一记》 » 正文

判断和循环(实战收尾篇2—猜数字游戏)_鲸落之地

20 人参与  2022年05月20日 08:53  分类 : 《随便一记》  评论

点击全文阅读


讲完循环和判断我们就可以上游戏啦!兴奋吧,激动吧,直接进入正题,来看!

在进入猜数字游戏之前,先让我们看一下模拟登录(后面用于游戏登录)

目录

1.模拟登录

   2.猜数字


1.模拟登录

//模拟登录

#pragma warning(disable:4996)

#include<stdio.h>

#include<string.h>

#include<windows.h>

#define USENAME "mengxin"//设置用户名

#define PASSWORD "1234abcd"//设置密码

void Locking(int times)

{

    while (times)

    {

        printf("你的电脑已经被锁死,还剩下...%2d\r", times);

        times--;

        Sleep(1000);

    }

    printf("\n");

}

void Lock(int lock_count)

{//对不同的错误次数做出不同的惩戒措施;

    switch (lock_count)

    {

    case 1:

        Locking(10);

        break;

    case 2:

        Locking(600);

        break;

    case 3:

        Locking(3600);

        break;

        //Locking函数是锁机函数,实参为锁机的时间

    default:

        system("shutdown -s -t 180");

        //锁机命令设置,在解析中解释

        break;

    }

}

int main()

{

    char use[50] = "\0";//用来输入账号的数组

    char pass[9] = "\0";//用来设置密码的数组

    int lock_count = 0;//用来记录输入错误的次数

    while (1)

    {

        printf("请输入账号>");

        scanf("%s", use);

        printf("请输入密码>");

        scanf("%s", pass);

        if ((0 == strcmp(use, USENAME)) && (0 == strcmp(pass, PASSWORD)))

            //strcmp函数用来比较字符串,讲在解析中讲解

            //此处判断意为 输入账号密码是否与预设值均相同(一个不同即判断不成立)

        {

            printf("Congratulations on mengxin logging into my system!");

            break;

        }

        else

        {

            lock_count++;//输入错误的次数

            printf("认证失败,你的电脑已锁死,请稍后再试!\n");

            Lock(lock_count);//惩罚方式的设置函数

        }

    }

    return 0;

}

  解析:

           我们知道main函数是入口函数,作为程序运行的起点,进入main函数。 我们首先创建两个 数  组来存储内设的账号和密码,内设的账号和密码定义为宏常量,该程序中,设置的账号为“mengxin”,密码为“1234abcd”,并定义lock_count 用来记录输入的错误次数

           进入while循环,输入账号密码,然后对输入的账号密码和内设的账号密码进行比较,若均相同,则if判断成立(注意这里的比较,因为账号密码均为字符串形式,而字符串形式不能直接进行比较,需要用函数strcmp(,),逗号左右为两个比较的字符串,我们只要知道,当两个字符串比较相等时,strcmp返回值为0),所以当两个strcmp返回值均为0时,说明账号密码均相同。

输出“欢迎“mengxin”登录我的系统”(当然是英文),然后break跳出while循环。   

       若账号或密码输入错误,则lock_count记录的错误次数+1,然后调用函数Lock用于惩戒(保护账号密码的惩戒措施),进入Lock函数,建立Switch多分支语句,将错误次数分为不同等级,做出不同的惩罚措施,当错误次数超过3次时,执行关机指令(ststem是系统命令的使用,需要头文件windows.h,“shutdown -s -t  就是命令行中的关机命令,-t后面的数字表示多少秒后自动关机,若要取消关机,则按window+r调出运行框,输入cmd后进入命令交互界面,输入shutdown -a即可取消关机操作”

 

 

           当错误次数不超过3时,分别执行不同时间的锁机函数Locking,如错误一次,进入Locking(10),用形参 times接收10,建立while循环,进行倒计时输出(\r转义的含义在转义中有过讲解,光标回到该行开头并在再,次输出数据时覆盖原数值,这里不再赘述倒计时的实施),倒计时10s后退出Locking函数,执行完毕主函数的else分支,跳出if语句,继续进行while输入账号密码的循环,直到输入正确,否则嘿嘿嘿(神秘一笑)。

   2.猜数字

     如上,我们就完成了模拟登录的代码实现,现在让我们来进行猜数字游戏的主体实现(先不与登录代码叠加)

//猜数字游戏的简单实现
#pragma warning(disable:4996)
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void Menu()
{
	printf("##########################\n");
	printf("#####1.play    0.exit#####\n");
	printf("##########################\n");
}

void Game()
{
	printf("猜数字游戏开始!数字范围为1~100噢\n");
	int t = rand()%100+1;
	//设置随机数范围
	int input;
	while (1)
	{
		printf("你猜的数字>");
		scanf("%d", &input);
		if (input > t)
		{
			printf("猜大了\n");
		}
		else if (input < t)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你!猜对了!!\n");
			break;
		}
		
	}	
}

int main()
{
	srand((unsigned long)time(NULL));
	//随机数的设置
	int input;
	do
	{
		Menu();
		//简易菜单函数的调用
		scanf("%d", &input);

		switch (input)
		{
			case 1:
				Game();
				break;
			case 0 :
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误!请重新选择\n>");
		}
	} while (input);
	return 0;
}

解析:

        进入main函数,首先设置一个随机数种子,定义一个变量。然后进入do~while循环,执行scanf,创建多分支来进行游戏选择,若输入1则进入游戏函数Game,输入0,则退出switch语句,进入到while的条件判断,读取input为0,所以do~while循环结束,退出程序,输入其他值时,输出“选择错误”,之后退出switch后进入while条件判断,input非0,则继续循环,重新输入。

      当输入1时,进入Game函数,首先设置一个范围为1~100的随机数(rand()%100的范围是0~99,再+1就是1~100),进入while循环,当输出数不等于随机数时,循环输入,当猜对时,跳出while循环,同时跳出main函数中的switch语句,进入while的条件判断,由于我们是输入的1进入的Game函数,所以while读取值为1,判断为真,继续进入while循环,输入1继续游戏,输入0则可退出。

       注意随机数种子的设立不要再重复调用的函数里面,单独设置一次即可,如此次程序,若设置在game里面,则每次调用game都会执行srand,每次调用srand()都将重新设置随机数种子,由于两次设置时间间隔小于1s【这是由于time(0)返回值是从1970年1月1日至今所经历的时间(以秒为单位)】,所有两次设置的种子一致,导致两次输出的随机数序列相同,所以如果不能保证两次srand()设置的时间间隔大于1s,则不要调用两次srand(),否则将得到相同的随机数序列(该段意思摘自原文链接:https://blog.csdn.net/xiya)

3.将登录和猜数字放在一起

text.h

//text.h
#pragma once
#pragma warning(disable:4996)
#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<math.h>


#define USENAME "mengxin"//设置用户名
#define PASSWORD "1234abcd"//设置密码

extern void Lock(int lock_count);
extern void Locking(int times);
extern void Menu();
extern void Game();
extern void log_in();

text.c

#include "text.h"
//text.c
void Menu()
{
    printf("##########################\n");
    printf("#####1.play    0.exit#####\n");
    printf("##########################\n");
}

void Game()
{
    printf("猜数字游戏开始!数字范围为1~100噢\n");
    int t = rand() % 100 + 1;
    //设置随机数范围
    int input;
    while (1)
    {
        printf("你猜的数字>");
        scanf("%d", &input);
        if (input > t)
        {
            printf("猜大了\n");
        }
        else if (input < t)
        {
            printf("猜小了!\n");
        }
        else
        {
            printf("恭喜你!猜对了!!\n");
            break;
        }

    }
}

void Locking(int times)
{
    while (times)
    {
        printf("你的电脑已经被锁死,还剩下...%2d\r", times);
        times--;
        Sleep(1000);
    }
    printf("\n");
}

void Lock(int lock_count)
{//对不同的错误次数做出不同的惩戒措施;
    switch (lock_count)
    {
    case 1:
        Locking(10);
        break;
    case 2:
        Locking(600);
        break;
    case 3:
        Locking(3600);
        break;
        //Locking函数是锁机函数,实参为锁机的时间
    default:
        system("shutdown -s -t 180");
        //锁机命令设置,在解析中解释
        break;
    }
}
void log_in()
{
    char use[50] = "\0";//用来输入账号的数组
    char pass[9] = "\0";//用来设置密码的数组
    int lock_count = 0;//用来记录输入错误的次数
    while (1)
    {
        printf("请输入账号>");
        scanf("%s", use);
        printf("请输入密码>");
        scanf("%s", pass);
        if ((0 == strcmp(use, USENAME)) && (0 == strcmp(pass, PASSWORD)))
            //strcmp函数用来比较字符串,讲在解析中讲解
            //此处判断意为 输入账号密码是否与预设值均相同(一个不同即判断不成立)
        {
            printf("Congratulations on mengxin logging into my system!\n");
            break;
        }
        else
        {
            lock_count++;//输入错误的次数
            printf("认证失败,你的电脑已锁死,请稍后再试!\n");
            Lock(lock_count);//惩罚方式的设置函数
        }
    }
    return ;
}

        main.c

//main.c
//猜数字游戏的简单实现
#include"text.h"
int main()
{
	log_in();
	srand((unsigned long)time(NULL));
	//随机数的设置
	int input;
	do
	{
		Menu();
		//简易菜单函数的调用
		scanf("%d", &input);

		switch (input)
		{
		case 1:
			Game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误!请重新选择\n>");
		}
	} while (input);
	return 0;
}

      我们只对两个小程序进行了简易的合并,只是使用了多文件将登录程序通过log_in函数加进了猜数字中。因此不多赘述。

下篇我们将掀开新的篇章,正式进入函数的讲解!


点击全文阅读


本文链接:http://zhangshiyu.com/post/40494.html

函数  输入  设置  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1