这个是我之前做的一个2D游戏(未完成)中的一部分,
实现的整个游戏的状态机引擎部分框架,在此分享一下我的代码。
众所周知,一个游戏(或者一个应用程序),我们都可以把各部分界面切分为不同的状态,然后整个系统过程就是一个有限状态机。
我这里做的工作就是实现这个状态机框架以及具体的调度过程。
游戏主引擎类头文件
/*
* CopyRight 2009 - 2010 GDE工作室
* 游戏主引擎
* ===================================
* 09/12/12 cg create
*/
#ifndef GDE_GAMEENGINE_H_
#define GDE_GAMEENGINE_H_
#pragma warning(disable:4251)
#pragma warning(disable:4244)
#pragma warning(disable:4018)
#pragma warning(disable:4101)
#pragma warning(disable:4996)
namespace GDE{
//游戏引擎状态
enum GDE_GameEngineStatus
{
Empty = 0, //空
Scence, //场景、菜单渲染
Battle, //战斗
RunningScript //脚本解析
};
//游戏主引擎类
class GDE_GameEngine
{
public:
GDE_GameEngine()
: status_( Empty )
, isquit_( false )
{}
~GDE_GameEngine(){ this->release(); }
void run(); //运行
private:
void init(); //初始化
void release(); //释放
void run_scence(); //运行场景
void run_script(); //解析脚本
void run_battle(); //运行战场
private:
GDE_GameEngineStatus status_; //引擎状态
bool isquit_; //是否退出
};//class GDE_GameEngine
}//namespace GDE
#endif
实现的核心部分代码
void GDE_GameEngine::run()
{
this->init();
status_ = Scence;
//status_ = Battle;
while( isquit_ == false )
{
switch( this->status_ )
{
case Scence:
run_scence();
break;
case RunningScript:
run_script();
break;
case Battle:
run_battle();
break;
default:
break;
}
}
}
对于每一个状态处理器,我定义了一个基类,必须实现状态处理过程,以及反馈给游戏引擎处理结果。
如下面定义的GDE_GameEngineHelper
/*
* CopyRight 2009 - 2010 GDE工作室
* 游戏引擎 - 引擎辅助类组
* ===================================
* 09/12/12 cg create
*/
#ifndef GDE_SCRIPT_EXECUTER_H_
#define GDE_SCRIPT_EXECUTER_H_
#include <string>
#include "GDE_MAP/GDE_map.h"
#include "GDE_GameEngine.h"
namespace GDE
{
//游戏引擎辅助类
class GDE_GameEngineHelper
{
public:
GDE_GameEngineHelper(){}
virtual ~GDE_GameEngineHelper(){}
/**
* 辅助类运行
*
* \param[in] status 改变游戏引擎状态
* \param[in] target_filename 目标文件名
*
*/
virtual void run( GDE_GameEngineStatus& status, std::string& target_filename ) = 0;
};
//脚本执行器
class GDE_ScriptExecuter : public GDE_GameEngineHelper
{
public:
GDE_ScriptExecuter( std::string start_file_id );//起始脚本ID
virtual void run( GDE_GameEngineStatus& status, std::string& target_filename );//执行
private:
void dialog();
void combobox();
void war();
void item();
void checkitem();
void info();
void backpic();
void music();
};
//场景渲染器
class GDE_ScenceRender : public GDE_GameEngineHelper
{
public:
GDE_ScenceRender( std::string filename );//场景
virtual void run( GDE_GameEngineStatus& status, std::string& target_filename );//执行
};
//战场管理器
class GDE_BattleManager : public GDE_GameEngineHelper
{
public:
GDE_BattleManager( std::string filename );//战场数据文件
virtual void run( GDE_GameEngineStatus& status, std::string& target_filename );//执行
private:
GDE::Map map_;
bool quit_flag_;
};
}
#endif
这样通过整个游戏引擎 可以调度所有状态,状态又反馈给引擎需要调度的新状态,实现整个状态机。
very simple,isn't it?
分享到:
相关推荐
总的来说,"c++ 2d RPG游戏引擎实现"项目是一个全面的学习资源,涵盖了从基本的图形渲染到复杂的逻辑处理等多个方面。通过研究和理解这个项目,开发者不仅可以提升C++编程技能,还能深入理解游戏开发的各个核心环节...
9. **状态机**:为了管理游戏的不同状态(如战斗、探索等),可以设计和实现一个状态机模型。 10. **设计模式**:在大型项目中,设计模式如工厂模式、单例模式等可以帮助提高代码的可维护性和可扩展性。 在实际的...
这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、嵌入式系统以及各种...
DirectX是由微软提供的一个API集合,包括Direct3D(用于3D图形渲染)、DirectInput(处理用户输入)和DirectSound(管理音频)等组件,这些都是构建游戏引擎必不可少的部分。 在游戏编程中,内存管理是关键。Visual...
虽然这个项目可能不包含所有专业游戏引擎的复杂特性,但它提供了一个很好的学习平台,让学生能够实际动手制作一款简单但完整的游戏,体验从无到有的过程。 通过分析“mario(白金版)”这个压缩包,我们可以推测其中...
本项目"超级玛丽,c++实现的"是一个利用C++编程语言构建的2D平台游戏,旨在展示C++在游戏开发中的应用及其潜能。该项目的功能完备,具有很高的参考价值,无论是对于初学者还是经验丰富的开发者来说,都是一个宝贵的...
本篇文章将深入探讨标题所提及的"C++战斗机游戏代码",带你了解如何利用C++构建一个战斗机游戏的基础框架。 首先,让我们从游戏的核心——逻辑控制开始。在战斗机游戏中,玩家的飞机需要进行移动、射击、躲避敌方...
在C++中,这可以通过状态机或条件分支实现。 9. **错误处理和调试**:为了确保游戏稳定运行,良好的错误处理和调试机制是必不可少的。这包括日志记录、断点、单元测试等。 10. **编译与运行**:项目中的"Cards...
游戏中的智能体(NPC)可能利用简单的AI算法,如状态机或行为树。 5. **内存管理**:C++允许手动内存管理,这对游戏性能至关重要。开发者需要了解如何有效地分配和释放内存,防止内存泄漏。 6. **多线程与并发**:...
本项目“游戏毕业设计:C++实现的战斗机小游戏”是一个典型的游戏编程实例,旨在展示如何利用C++这一强大且灵活的编程语言来创建一款互动性强、趣味性十足的小游戏。 C++是一种静态类型的、编译式的、通用的、大小...
在本项目中,我们将深入探讨如何使用cocos2d-x3.10版本来实现一个水果机游戏。 首先,我们要理解cocos2d-x的核心概念。cocos2d-x提供了一个基于场景(Scene)的架构,每个场景代表游戏中的一个独立屏幕或状态。在这...
综上所述,"C++游戏源码"的学习和理解不仅需要掌握C++语言基础,还需要深入了解面向对象编程、图形编程、物理模拟、状态机设计、内存管理和优化等多个方面。同时,关注用户体验和服务也是成功游戏开发的重要组成部分...
在C++中,可以定义一系列的状态(如静止、行走、跳跃),并使用状态机来控制这些状态之间的切换,同时配合定时器更新游戏帧,实现流畅的动画效果。 此外,音效和音乐也是游戏体验的重要组成部分。QT提供QSound和...
在本项目中,我们关注的是一个使用C++编程语言开发的小游戏。C++是一种强大的、通用的编程语言,尤其适合创建高性能的应用程序,包括游戏。它具有面向对象的特性,支持封装、继承和多态性,这使得C++在游戏开发中...
这些状态的切换可以通过设计一个状态机来实现,每个状态对应一个类,通过状态机在不同类间切换来驱动游戏流程。 此外,音效和音乐也是提升游戏体验的重要元素。Cocos2d-x提供了AudioEngine模块,用于播放背景音乐和...
通过C++的类和对象,可以构建一个层次化的游戏对象体系,实现对象的创建、更新和销毁。 在学习源代码时,不仅要理解每一部分的功能,还要关注代码的组织结构、变量命名规范、错误处理和优化技巧。通过分析和修改源...
"c++游戏合集1.zip"是一个包含多个C++游戏项目的压缩包,它为我们提供了一个深入学习和研究C++游戏开发的宝贵资源。本文将围绕这个合集,探讨C++在游戏开发中的应用,以及如何通过这些项目来提升我们的技能。 1. ...
本文将深入探讨使用VC++进行游戏编程的基础知识,以及如何实现一个简单游戏引擎的过程。 首先,我们要了解游戏引擎的核心组成部分。一个基本的游戏引擎通常包括以下几个模块: 1. **图形渲染引擎**:负责处理图像...
这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、嵌入式系统以及各种...
本项目以 Visual C++ 为开发环境,实现了一款3D 台球游戏,它不仅提供了引人入胜的游戏体验,更是一份宝贵的教育资源,让开发者有机会深入了解3D 游戏引擎的工作原理和资源管理。本文将围绕项目中的关键知识点展开,...