码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 「C++小游戏教程」计时器


    0. 引言

    本章主要讲解如何自制一个用于倒计时的计时器。
    前置芝士:

    • 「C++小游戏教程」基本技巧(2)——系统 DOS 命令
    • 「C++小游戏教程」基本技巧(3)——发声函数 Beep()
    • 「C++小游戏教程」基本技巧(4)——等待函数 Sleep()

    1. 给予用户提示与输入处理时间

    对于每个初学 C++ 的读者,必定都计算过时分秒。
    那为了倒计时时的可读性,我们这边将输入的秒数转换为 hh:mm:ss 的形式。

    puts("I am Timer. Please tell me your time (seconds): ");
    int n;
    scanf("%d",&n);
    int rsth=n/3600,rstm=n/60%60,rsts=n%60;//直接计算
    
    • 1
    • 2
    • 3
    • 4

    2. 预备倒计时

    利用 Sleep() 进行倒数 3 s 3\text s 3s,这里不再赘述方法。
    开始时,便用 system("cls"); 清空屏幕开始计时。

    puts("OK. Are you ready?");
    for(int i=3;i;i--)
    {
    	Sleep(1000);//等待 1s
    	cout<<i<<endl;
    }
    system("cls");//清屏
    puts("Start!");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 开始计时

    外面一个循环——当 r s t h , r s t m , r s t s rsth,rstm,rsts rsth,rstm,rsts 中有至少一个非零,则继续倒计时(废话。
    将变量减少时,可以模拟一下,类似六十进制,不足零就向前面一个借 1 1 1 当 60 60 60。
    然后输出,接着再等待 1 s 1\text s 1s,清空,再执行。

    while(rsth||rstm||rsts)
    {
    	if(!rsts)
    	{
    		rsts=59;
    		if(!rstm) rstm=59,rsth--;
    		else rstm--;
    	}
    	else rsts--;//减少 1s
    	printf("%02d:%02d:%02d",rsth,rstm,rsts);
    	Sleep(1000);
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4. 计时结束的提示

    为了防止用户走神,我们在输出提示后使用 Beep() 以提示。

    puts("Time over!");
    Beep(1000,1000);
    Beep(1000,1000);
    Beep(1000,1000);//连续发声三次
    
    • 1
    • 2
    • 3
    • 4

    示例代码:

    #include
    #include
    using namespace std;
    
    int main()
    {
    	puts("I am Timer. Please tell me your time (seconds): ");
    	int n;
    	scanf("%d",&n);
    	int rsth=n/3600,rstm=n/60%60,rsts=n%60;
    	puts("OK. Are you ready?");
    	for(int i=3;i;i--)
    	{
    		Sleep(1000);
    		cout<<i<<endl;
    	}
    	system("cls");
    	puts("Start!");
    	while(rsth||rstm||rsts)
    	{
    		if(!rsts)
    		{
    			rsts=59;
    			if(!rstm) rstm=59,rsth--;
    			else rstm--;
    		}
    		else rsts--;
    		printf("%02d:%02d:%02d",rsth,rstm,rsts);
    		Sleep(1000);
    		system("cls");
    	}
    	puts("Time over!");
    	Beep(1000,1000);
    	Beep(1000,1000);
    	Beep(1000,1000);
     	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    5. 后记

    这样,一个简易的计时器便做好了,相信读者收获的许多。
    最后,感谢大家的支持!

  • 相关阅读:
    java毕业设计Steam游戏平台系统mybatis+源码+调试部署+系统+数据库+lw
    Linux基本认识
    【C++】string类
    java并发数据结构之CopyOnWriteArrayList
    《JavaScript设计模式》笔记 - - - 超全设计模式概览
    Mask-RCNN入门(balloon数据集、TensorFlow-DirectML)的N个坑
    计算机网络面试知识点
    基于SSM+Vue的鲜花销售系统/网上花店系统
    [附源码]计算机毕业设计疫情背景下社区互助服务系统Springboot程序
    【#HDC2022】HarmonyOS体验官活动正式开启,赶快投稿赢限量奖品吧!
  • 原文地址:https://blog.csdn.net/Leo_Chenjy/article/details/127819878
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号