#include "..\\..\\include\\游戏过程\\Scene.h"
void Scene :: SoundJudge()
{
static bool modified1 = false;
static bool modified2 = false;
int Dimen_id = background -> GetPicNum();
if(scene_id == 3)
{
if(Dimen_id == 4)
{
if(!modified1)
{
WaterEffect = ResourceManager ::getEffect("WaterEffect");
WaterChannel = hge -> Effect_PlayEx(WaterEffect, 100, 0, 1, true);
modified1 = true;
}
else
hge -> Channel_Resume(WaterChannel);
}
else
hge -> Channel_Pause(WaterChannel);
}
else
{
if((!modified2) && (scene_id == 4))
{
hge -> Channel_Stop(WaterChannel);
hge -> Effect_Free(WaterEffect);
modified2 = true;
}
}
//播放背景音乐
if(!(hge->Channel_IsPlaying(SceneBgMusic)) )
SceneBgStream = hge ->Stream_Play(SceneBgMusic, true, 100);
}
bool FrameFunc_scene()
{
float dt = hge -> Timer_GetDelta();
static float time = 0;
if( time <= 5.000 )
{
time += dt;
HDMenu::GetInstance( Account::getLevelId() )->ResetGuan( Account::getLevelId() );
gui -> Enter();
if( Account::getLevelId() == 2 )
{
time = 5.1;
}
}
else
{
HDMenu::GetInstance(Account::getLevelId())->spr_before = NULL;
gui -> SetNavMode( HGEGUI_NONAVKEYS );
////此处暂定为按“E”键切换场景“scene”
int level_id = Account :: getLevelId();
//侧边栏的逻辑判断
SideMenuLogic();
if(hge -> Input_GetKeyState(HGEK_E))
{
Account :: setLevelId(++level_id);
time = 0;
HDMenu::GetInstance( Account::getLevelId())->SetCask();
if( Account :: getLevelId() == 3 )
gui ->DelCtrl(2);
if( Account :: getLevelId() == 4 )
{
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
}
}
//暂时将此作为开启道具的方法
//开启升降梯的钥匙:
if(hge -> Input_GetKeyState(HGEK_K))
Account :: getAccount()->getProperty(_KEY) -> setUsing(true);
//使用木桶
if(hge -> Input_GetKeyState(HGEK_C))
Account :: getAccount()->getProperty(_CASK) -> setUsing(true);
//使用可移动的梯子
if(hge -> Input_GetKeyState(HGEK_M))
Account :: getAccount()->getProperty(_MOBILE_LADDER) -> setUsing(true);
//使用杀虫剂
if(hge -> Input_GetKeyState(HGEK_P))
Account :: getAccount()->getProperty(_PESTICIDE) -> setUsing(true);
//通过单件模式取得场景、小人的实例
Scene* SceneNow = Scene :: getScene(level_id);
Player* thePlayer = Player :: getPlayer(level_id);
//鼠标手势的检测,依托于当前场景的调用
SceneNow -> TransformJudge(thePlayer);
//取得当前的维度
Dimensionality* DimenNow = SceneNow -> getDimenNow();
//声音效果的函数
SceneNow -> SoundJudge();
//小人的输入检测
thePlayer -> KeyboardInput();
//小人撞墙检测
HitMap(thePlayer, DimenNow -> getMap());
level_id = Account :: getLevelId();
//如果当前没有进行维度转换,则正常进行逻辑处理
if (SceneNow -> getState() == NORMAL)
{
//此处是当前维度的所有可用机关的逻辑调用
GameState gs = DimenNow -> DoohLogic(thePlayer);
switch(gs)
{
case SUCCESS :
//如果过关了,就将关卡数加1
Account :: setLevelId(++level_id);
time = 0;
HDMenu::GetInstance( Account::getLevelId())->SetCask();
if( Account :: getLevelId() == 3 )
gui ->DelCtrl(2);
if( Account :: getLevelId() == 4 )
{
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
}
break;
case DEAD :
//如果死了,切换渲染函数,之后等三秒,重新开始
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_dead);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_dead);
break;
case OVER :
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_over);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_over);
break;
case GOON :
default :
break;
}
//道具的逻辑判断
Account :: getAccount() -> PropertyLogic(thePlayer, DimenNow->getMap());
}
//根据状态的不同,更新小人的位置
thePlayer -> UpdatePos(dt);
}
return false;
}
bool FrameFunc_dead()
{
static float time = 0;
if(++time >= 3.0f)
{
int id_now = Account ::getLevelId();
int id = id_now - 1;
Scene::getScene(id_now) ->setSceneID(id);
Scene::getScene(id_now);
Scene::getScene(id_now)->setState(NORMAL);
Player :: getPlayer(id_now) -> setLevelID(id);
Player :: getPlayer(id_now);
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_scene);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_scene);
}
return false;
}
bool RenderFunc_dead()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
Scene ::getScene() ->getDeadSprite() ->Render(500, 400);
hge->Gfx_EndScene();
return false;
}
bool FrameFunc_over()
{
static float time = 0;
if((time += 0.02) >= 5.0)
{
Scene ::getScene(Account ::getLevelId()) ->deleteBook();
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
}
return false;
}
bool RenderFunc_over()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
hgeSprite* book = Scene :: getScene(Account :: getLevelId()) ->getBook();
if(book != NULL)
book -> Render(500, 400);
hge->Gfx_EndScene();
return false;
}
char* get(int x ,int y, Dimensionality* DimenNow)
{
char* s = NULL;
DoohSpecies species = DimenNow -> MapSpecies(x, y);
if(species == AIR)
s = "AIR";
else if(species == ROCK)
s = "ROCK";
else if(species == SOFTLAND)
s = "SOFTLAND";
else if(species == LADDER)
s = "LADDER";
else if(species == SEED)
s = "Seed";
return s;
}
void SideMenuLogic()
{
float dt = hge -> Timer_GetDelta();
if( dt < 0.02 )
{
Sleep( 20 - ( int )( 1000 * dt ) );
}
static float t = 0.0f;
static int lastid = 0;
int id;
id = gui -> Update( dt );
if( id == -1 )
{
switch( lastid )
{
case 1:
//返回主菜单
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
hge->Channel_Pause(SceneBgStream);
//此处再加释放GUI资源的相关函数
gui ->DelCtrl(1);
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
gui ->DelCtrl(5);
gui ->DelCtrl(7);
HDMenu::GetInstance(Account::getLevelId())->numberOfGUI = 0;
break;
case 2:
/*HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( 2 );*/
break;
case 3:
//制作人员名单,显示
/*HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( 3 );*/
break;
case 4:
break;
default :
gui -> Enter();
break;
}
}
else if( id == 2 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );//
gui -> ShowCtrl( id, false );
}
else if( id == 1 )
{
//返回主菜单
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
//此处再加释放GUI资源的相关函数
gui ->DelCtrl(1);
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
gui ->DelCtrl(5);
gui ->DelCtrl(6);
gui ->DelCtrl(7);
HDMenu::GetInstance(Account::getLevelId())->numberOfGUI = 0;
}
else if( id == 3 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
else if( id == 4 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
else if( id == 5 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
//else if( id )
//{
// //lastid = id;
// //gui -> Leave();
//}
}
bool RenderFunc_scene()
{
unsigned int level_id = Account :: getLevelId();
Scene* SceneNow = Scene :: getScene(level_id);
Player* thePlayer = Player :: getPlayer(level_id);
float x = thePlayer -> getX();
float y = thePlayer -> getY();
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
//场景地图的渲染
SceneNow->background->BackGroundRender();
//维度的渲染
if(SceneNow -> get
没有合适的资源?快使用搜索试试~ 我知道了~
混沌的世界——基于HGE游戏引擎
共88个文件
h:45个
cpp:42个
res:1个
2星 需积分: 15 46 下载量 165 浏览量
2010-05-21
19:09:56
上传
评论
收藏 66KB RAR 举报
温馨提示
此款游戏基于HGE游戏引擎,代码完全原创,符合基本的工程规范。游戏题材为冒险解谜,加入了科幻的平行宇宙的概念,玩家通过在平行宇宙之间穿梭,可以破解机关谜题,找到最后答案。由于上传大小限制,只上传源代码……
资源推荐
资源详情
资源评论
收起资源包目录
混沌的世界.rar (88个子文件)
resources.res 24KB
include
制作人员介绍
credit.h 1KB
主人公
Player.h 3KB
维度转换
BackGround4.h 2KB
BackGround3.h 1KB
BackGround.h 545B
BackGround1.h 1KB
物理计算
MapCal.h 1KB
游戏中道具
_Key.h 234B
_Pesticide.h 293B
_Cask.h 585B
_Tortoise2.h 258B
_Tortoise4.h 258B
_MobileLadder.h 267B
property.h 575B
_Tortoise1.h 258B
_Tortoise3.h 258B
资源管理
ResourceManager.h 936B
游戏中机关
Elevator.h 304B
Killer.h 307B
Coffin.h 682B
MobileLadder.h 368B
Cave.h 831B
Snare.h 363B
Tortoise.h 367B
BookEstrade.h 677B
SoftLand.h 335B
Fish.h 570B
Water.h 356B
Seed.h 440B
Pearl.h 313B
Doohickey.h 1KB
CaskFragment.h 422B
Ladder.h 253B
Door.h 294B
Key.h 308B
Pesticide.h 345B
主体
GameInitialize.h 142B
MyHGE.h 232B
defines.h 364B
游戏过程
Scene.h 2KB
Dimensionality.h 1KB
账户
Account.h 1002B
GUI
Menu.h 720B
HDButton.h 799B
SideMenu.h 2KB
src
主人公
Player.cpp 4KB
维度转换
BackGround3.cpp 6KB
BackGround1.cpp 4KB
BackGround4.cpp 6KB
物理计算
MapCal.cpp 415B
phsical.cpp 2KB
游戏中道具
_Tortoise4.cpp 265B
_MobileLadder.cpp 2KB
_Key.cpp 235B
_Tortoise1.cpp 265B
_Tortoise3.cpp 265B
_Tortoise2.cpp 265B
_Pesticide.cpp 697B
_Cask.cpp 2KB
资源管理
ResourceManager.cpp 1KB
游戏中机关
Cave.cpp 6KB
Pesticide.cpp 2KB
Ladder.cpp 1KB
SoftLand.cpp 2KB
Fish.cpp 2KB
Water.cpp 2KB
MobileLadder.cpp 2KB
Key.cpp 2KB
Snare.cpp 1KB
Elevator.cpp 1KB
CaskFragment.cpp 2KB
Door.cpp 1KB
BookEstrade.cpp 2KB
Seed.cpp 3KB
Killer.cpp 1KB
Pearl.cpp 996B
Tortoise.cpp 2KB
Coffin.cpp 4KB
credit
credit.cpp 3KB
主体
main.cpp 354B
GameInitialize.cpp 2KB
游戏过程
Scene.cpp 12KB
dimensionality.cpp 3KB
账户
Account.cpp 3KB
GUI
SideMenu.cpp 11KB
Menu.cpp 4KB
HDGUIButton.cpp 2KB
共 88 条
- 1
资源评论
- ryanz11232011-10-31楼主发布的文件不全。。。不能编译。。。价值大打折扣啊
- jusnxie2011-09-15有工程就更好了
li19890328
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功