`
rcfalcon
  • 浏览: 228684 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的游戏引擎核心状态机的C++实现

阅读更多

这个是我之前做的一个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++ 2d RPG游戏引擎实现"项目是一个全面的学习资源,涵盖了从基本的图形渲染到复杂的逻辑处理等多个方面。通过研究和理解这个项目,开发者不仅可以提升C++编程技能,还能深入理解游戏开发的各个核心环节...

    文字游戏引擎C++

    9. **状态机**:为了管理游戏的不同状态(如战斗、探索等),可以设计和实现一个状态机模型。 10. **设计模式**:在大型项目中,设计模式如工厂模式、单例模式等可以帮助提高代码的可维护性和可扩展性。 在实际的...

    一个免费的c++小游戏集合

    这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、嵌入式系统以及各种...

    Visual C++游戏编程框架/引擎

    DirectX是由微软提供的一个API集合,包括Direct3D(用于3D图形渲染)、DirectInput(处理用户输入)和DirectSound(管理音频)等组件,这些都是构建游戏引擎必不可少的部分。 在游戏编程中,内存管理是关键。Visual...

    C++超级马里奥的游戏

    虽然这个项目可能不包含所有专业游戏引擎的复杂特性,但它提供了一个很好的学习平台,让学生能够实际动手制作一款简单但完整的游戏,体验从无到有的过程。 通过分析“mario(白金版)”这个压缩包,我们可以推测其中...

    超级玛丽,c++实现的

    本项目"超级玛丽,c++实现的"是一个利用C++编程语言构建的2D平台游戏,旨在展示C++在游戏开发中的应用及其潜能。该项目的功能完备,具有很高的参考价值,无论是对于初学者还是经验丰富的开发者来说,都是一个宝贵的...

    c++战斗机游戏代码

    本篇文章将深入探讨标题所提及的"C++战斗机游戏代码",带你了解如何利用C++构建一个战斗机游戏的基础框架。 首先,让我们从游戏的核心——逻辑控制开始。在战斗机游戏中,玩家的飞机需要进行移动、射击、躲避敌方...

    一个C++卡片游戏示例(含代码及运行结果)

    在C++中,这可以通过状态机或条件分支实现。 9. **错误处理和调试**:为了确保游戏稳定运行,良好的错误处理和调试机制是必不可少的。这包括日志记录、断点、单元测试等。 10. **编译与运行**:项目中的"Cards...

    C++游戏合集一共11个

    游戏中的智能体(NPC)可能利用简单的AI算法,如状态机或行为树。 5. **内存管理**:C++允许手动内存管理,这对游戏性能至关重要。开发者需要了解如何有效地分配和释放内存,防止内存泄漏。 6. **多线程与并发**:...

    游戏毕业设计战斗机小游戏c++

    本项目“游戏毕业设计:C++实现的战斗机小游戏”是一个典型的游戏编程实例,旨在展示如何利用C++这一强大且灵活的编程语言来创建一款互动性强、趣味性十足的小游戏。 C++是一种静态类型的、编译式的、通用的、大小...

    cocos2d-x3.10 c++ 水果机

    在本项目中,我们将深入探讨如何使用cocos2d-x3.10版本来实现一个水果机游戏。 首先,我们要理解cocos2d-x的核心概念。cocos2d-x提供了一个基于场景(Scene)的架构,每个场景代表游戏中的一个独立屏幕或状态。在这...

    C++游戏源码

    综上所述,"C++游戏源码"的学习和理解不仅需要掌握C++语言基础,还需要深入了解面向对象编程、图形编程、物理模拟、状态机设计、内存管理和优化等多个方面。同时,关注用户体验和服务也是成功游戏开发的重要组成部分...

    一个基于QT,使用c++编写的2D超级玛丽游戏.zip

    在C++中,可以定义一系列的状态(如静止、行走、跳跃),并使用状态机来控制这些状态之间的切换,同时配合定时器更新游戏帧,实现流畅的动画效果。 此外,音效和音乐也是游戏体验的重要组成部分。QT提供QSound和...

    一个C++编的小游戏

    在本项目中,我们关注的是一个使用C++编程语言开发的小游戏。C++是一种强大的、通用的编程语言,尤其适合创建高性能的应用程序,包括游戏。它具有面向对象的特性,支持封装、继承和多态性,这使得C++在游戏开发中...

    cocos2d x跑酷源码 C++版

    这些状态的切换可以通过设计一个状态机来实现,每个状态对应一个类,通过状态机在不同类间切换来驱动游戏流程。 此外,音效和音乐也是提升游戏体验的重要元素。Cocos2d-x提供了AudioEngine模块,用于播放背景音乐和...

    无敌战机c++游戏源代码

    通过C++的类和对象,可以构建一个层次化的游戏对象体系,实现对象的创建、更新和销毁。 在学习源代码时,不仅要理解每一部分的功能,还要关注代码的组织结构、变量命名规范、错误处理和优化技巧。通过分析和修改源...

    c++游戏合集1.zip

    "c++游戏合集1.zip"是一个包含多个C++游戏项目的压缩包,它为我们提供了一个深入学习和研究C++游戏开发的宝贵资源。本文将围绕这个合集,探讨C++在游戏开发中的应用,以及如何通过这些项目来提升我们的技能。 1. ...

    VC++游戏编程一个游戏引擎的实现很细很基础

    本文将深入探讨使用VC++进行游戏编程的基础知识,以及如何实现一个简单游戏引擎的过程。 首先,我们要了解游戏引擎的核心组成部分。一个基本的游戏引擎通常包括以下几个模块: 1. **图形渲染引擎**:负责处理图像...

    一个免费的c++小游戏集合代码

    这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、嵌入式系统以及各种...

    Visual C++一款3d台球游戏,包含引擎代码和资源

    本项目以 Visual C++ 为开发环境,实现了一款3D 台球游戏,它不仅提供了引人入胜的游戏体验,更是一份宝贵的教育资源,让开发者有机会深入了解3D 游戏引擎的工作原理和资源管理。本文将围绕项目中的关键知识点展开,...

Global site tag (gtag.js) - Google Analytics