一个时钟类的设计

原创 2005年04月29日 06:26:00

       游戏中时间,事件的管理是必不可少的,今天我也走到了这一步,那就是我的2D游戏小引擎的图象,声音的处理已经略有皮毛,考虑到2D目前已经有点日薄西山,所以小弟我也不再想在这方面深入学习了.所以呢,我开始着手学习时间,事件管理机制的处理.

      SCLOCK类的介绍:

      游戏中常常需要有自己的时间机制,像CS,每局时间,雷炸时间.魔兽中的时间转换,还有MMRPG中的时间等等,他们都有一些基本的功能,那就是:用一个自定义的时间来模拟,取代系统时间,能够暂停,等.

      SCLOCK的时间机制是这样的,在SCLOCK类初始化的时候,设置一个模拟系统时间,也就是游戏中所用到的系统时间,比如说游戏名字叫大唐双龙传,那就可以是公元900年左右.(英雄人物还要成长一下嘛.)这里我将它设为0.

每次暂停后,系统时间亦会停止累加,在重新开始后,新的系统时间可以通过当前真实时间,减去暂停所花的时间来获得.

以下源代码:

/*************************************************************************
 *
 * Copyright (c) 2005 Azure,All rights received.
 *
 * You can use,copy,and change it at will.But you can not use or
 * distribute it for any commercial purpose without permission from
 * Azure.And if you want to reship it,please let me know.
 *
 * Author:Azure
 * Email:bluejugar@sohu.com
 *
 * Created Date: Apr.,29th,2005.
 * 
 * Revision: 1.0.1
 **************************************************************************/

#ifndef _CLOCK_H_
#define _CLOCK_H_

#include <windows.h>
#include <mmsystem.h>
//For three functions:timeGetTime(),timeBeginPeriod(...),timeEndPeriod(...).

typedef size_t time32;
typedef size_t size_type;

template<typename Time = time32,size_type nPrecision = 1>
class SClock
{
public:
 explicit SClock(void);
 virtual ~SClock(void);
 

 //Ispectors:
 bool IsRunning(void) const;
 Time GetSystemTime(void) const;

 //Facilitators:
 void ResetClock(void);
 void Pause(void);
 void CancelPause(void);
 void Update(void);
 void Destroy(void);

protected:
 Time m_tSystemTime_;  //The simulate system time.
     //Also the system's actual time.
 Time m_tPauseTime_;  //The time when paused.
 Time m_tOffsetTime_;  
 bool m_bRunning_; 
    
};

template<typename Time,size_t nPrecision>
SClock<Time,nPrecision>::SClock(void)
{
 timeBeginPeriod(nPrecision);
 ResetClock();
}

template<typename Time,size_t nPrecision>
SClock<Time,nPrecision>::~SClock(void)
{
 Destroy();
}

template<typename Time,size_t nPrecision>
bool SClock<Time,nPrecision>::IsRunning(void) const
{
 return (m_bRunning_);
}

template<typename Time,size_t nPrecision>
Time SClock<Time,nPrecision>::GetSystemTime(void) const
{
 return (m_tSystemTime_);
}

template<typename Time,size_t nPrecision>
void SClock<Time,nPrecision>::ResetClock(void)
{
 m_tSystemTime_ = 0;
 m_tPauseTime_ = 0;
 m_tOffsetTime_ = timeGetTime();
 m_bRunning_ = true;
}

template<typename Time,size_t nPrecision>
void SClock<Time,nPrecision>::Pause(void)
{
 //Pause the clock.
 //When the clock is paused,the clock still works,and the wasted time
 //will be recorded.
 m_bRunning_ = false;
 m_tPauseTime_ = timeGetTime();
}

template<typename Time,size_t nPrecision>
void SClock<Time,nPrecision>::CancelPause(void)
{
 //Cancel the pause to the clock.
 m_tOffsetTime_ += timeGetTime() - m_tPauseTime_;
 m_tSystemTime_ = timeGetTime() - m_tOffsetTime_;
 m_bRunning_ = true;
}

template<typename Time,size_t nPrecision>
void SClock<Time,nPrecision>::Update(void)
{
 //Cancel the pause to the clock.
 //When the pause of the clock is canceled,the
 m_tOffsetTime_ += timeGetTime() - m_tPauseTime_;
 m_tSystemTime_ = timeGetTime() - m_tOffsetTime_;
}

template<typename Time,size_t nPrecision>
void SClock<Time,nPrecision>::Destroy(void)
{
 timeEndPeriod(nPrecision);
}

#endif

作为一个游戏来说,一般有一个时钟就足够了,明天我会把它改成singleton模式,

汇编课程设计 时钟

前言:汇编语言是面向机器的程序设计语言。 也是一门非常有趣的语言,本文详细地介绍了我的时钟设计的整个过程。 一总体功能设计介绍: 一时间显示: 1实现选择时间的十二进制显示和二十四进制显示  ...
  • qq943574281
  • qq943574281
  • 2014年10月11日 20:49
  • 669

C# 时钟设计

这学期开设了C#课程,对于已经接触C#将近一年的人来说,学这个课程是很轻松的,当然,对自己的要求也应该更高才是。        老师布置的一个基于窗体的小作业--时钟设计,本着尽量做好的原则,我花了...
  • xiaoyu_93
  • xiaoyu_93
  • 2013年11月24日 17:12
  • 1613

自己设计一个时钟程序并实现破解

自己写了一个时钟程序,用来模拟时间类型软件的破解,先从基础的运行时间开始,程序运行界面如图:十秒后程序自动退出 破解思路:查看程序导入表函数(有N多个程序可以查看,以PETOOLS为例),如图所...
  • zero1994
  • zero1994
  • 2015年06月01日 15:08
  • 684

C++定义的时钟类(主要是类的定义、数据成员、成员函数的定义,类对象的定义及对象之间的赋值的简单例子)

#include #include using namespace std; class Clock { public: void setHour(int h); void s...
  • chengshijian2015
  • chengshijian2015
  • 2016年04月09日 09:50
  • 728

C#设计一个电子时钟

/* *程序的版权和版本声明部分: *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作...
  • u012369373
  • u012369373
  • 2014年11月10日 19:52
  • 1020

【JAVA语言程序设计基础篇】--图形-- 三种时钟--增强对类的理解和应用

1.显示任意时间时钟 2.设置三个可见性属性 分别表示时针,分针,秒针的可见性 3.一个精细的时钟  主类:StillClock  @SuppressWarnings("serial") clas...
  • qq_24653023
  • qq_24653023
  • 2016年08月12日 21:09
  • 1390

51单片机之电子钟设计

#include //#include"DS18B20_3.H" #include #include #define uint unsigned int #define uchar unsigne...
  • qq_21792169
  • qq_21792169
  • 2015年09月30日 22:08
  • 4113

汇编语言编写时钟程序

在CMOS的RAM中存放系统时间,CMOS是由电池供电,计算机断电后,RAM中的信息也不会丢失,在RAM的0,2,4,7,8,9号单元分别存放的是秒,分,时,日,月,年,各占一个字节。 读取端口的方...
  • arlenwen
  • arlenwen
  • 2012年01月07日 14:58
  • 729

c++ 类 实现时钟程序

c++ 类 实现时钟程序   /*******以下程序用VS2013编译通过********/ /********时钟类*********/ //文件clock.h #pragma...
  • qq_33775402
  • qq_33775402
  • 2016年08月02日 16:28
  • 1030

定义一个时钟类,并编写一个成员函数模拟时钟运行,当运行到设置时间响铃

#include using namespace std; class Clock { private: int hour,minute,second; int Ahour,Aminute,Ase...
  • u012495573
  • u012495573
  • 2013年11月17日 11:17
  • 1099
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个时钟类的设计
举报原因:
原因补充:

(最多只允许输入30个字)