📄 gamez.cpp
字号:
#include "GameH.h"
//有限状态机
CFont fontv; //字体引擎
BOOL CEngine::Init()
{
m_GameState=GAME_AVI;
return TRUE;
}
void CEngine::GameLoop()
{
switch(m_GameState)
{
case GAME_AVI:
Game_LOGO();
break;
case GAME_LOADG:
RunGame=false; //表明不是游戏状态
IsMouse=false;
Clrscr(lpDDS[1],0);
sprintf(tmpc,"%s%s",PicPath,MousePic); //格式化输出
DDReLoadBitmap(lpDDS[3],tmpc); //鼠标指针
sprintf(tmpc,"%s%s",PicPath,TileCPic); //格式化输出
map.SetTileMouse(tmpc); //读取Tile鼠标
sprintf(tmpc,"%s%s",PicPath,MenuPic); //格式化输出
DDReLoadBitmap(lpDDS[6],tmpc); //菜单图标
tile.LoadForIni(TILE_INI); //读取图素INI文件
RunMessage(MS_RUNSCRIPT,0,INIT_SCRIPT,0,0,0,0,NULL,0); //运行脚本
m_GameState=GAME_BEGIN;
break;
case GAME_BEGIN:
BeginGame();
break;
case GAME_RESTGAME:
RunMessage(MS_RUNSCRIPT,0,START_SCRIPT,0,0,0,0,NULL,0); //运行脚本
m_GameState=GAME_LOADMAP;
break;
case GAME_LOADMAP:
Clrscr(lpDDS[1],0);
strcpy(tmpc,ScriptPath);
strcat(tmpc,map.ScrFName);
cscript.LoadScript(tmpc);
XGameLoop(lpDDS[1]);
RunGame=true; //表明开始游戏了
m_GameState=GAME_RUNGAME;
break;
case GAME_RUNGAME:
RunGame=true; //表明开始游戏了
//if (KEYSTATE(VK_ESCAPE)==true){RunMessage(MS_Close,0,NULL,0,0,0,0,NULL,0);}
if (KEYSTATE(VK_ESCAPE)==true){KeyClear(VK_ESCAPE);m_GameState=GAME_MENU;}
if (role.GetActorNum()>0)
{
if (KEYSTATE(VK_RETURN)==true){ZeroMemory(tmpc,MAX_PATH);sprintf(tmpc,"%s%s",ScriptPath,role.GetRoleScriptName());cscript.LoadScript(tmpc);}
if (KEYSTATE(VK_SPACE)==true) {ZeroMemory(tmpc,MAX_PATH);sprintf(tmpc,"%s%s",ScriptPath,role.GetRoleScriptName());cscript.LoadScript(tmpc);}
}
if (KEYSTATE(VK_LEFT)==true){RunMessage(MS_KEYDOWN,LeftFace,NULL,0,0,0,0,NULL,0);}
else if (KEYSTATE(VK_RIGHT)==true){RunMessage(MS_KEYDOWN,RightFace,NULL,0,0,0,0,NULL,0);}
else if (KEYSTATE(VK_UP)==true){RunMessage(MS_KEYDOWN,UpFace,NULL,0,0,0,0,NULL,0);}
else if (KEYSTATE(VK_DOWN)==true){RunMessage(MS_KEYDOWN,DownFace,NULL,0,0,0,0,NULL,0);}
else if (KEYSTATE(VK_LBUTTON)==true){KeyClear(VK_LBUTTON);RunMessage(MS_MOUSEDOWN,0,NULL,0,0,0,0,NULL,0);}
Clrscr(lpDDS[1],0);
Tick();
XGameLoop(lpDDS[1]);
IsMouse=true;
break;
case GAME_MENU:
RunGame=false; //表明不是游戏状态
SystemMenu();
IsMouse=true;
break;
case GAME_LOADLIST:
RunGame=false; //表明不是游戏状态
GameLoadList();
IsMouse=true;
break;
case GAME_EXIT:
IsMouse=true;
break;
}
PrintMouse(lpDDS[1],lpDDS[DDS_Mouse]); //画鼠标 必须
}
bool tmp=false;
void CEngine::BeginGame()
{
int DMenu=-1;
RunGame=false; //表明不是游戏状态
BltFast(lpDDS[1],0,0,lpDDS[6],NULL,SrcKey);
menu.ReInit(ScreenWidth>>1,ScreenHeight>>1);
menu.SetBTextFont(false,19,"新宋体");
menu.AddButton(-40,-60,"开 始 游 戏",Clicksound);
menu.AddButton(-40,-30,"读 取 进 度",Clicksound);
menu.AddButton(-40,0,"退 出 游 戏",Clicksound);
DMenu=menu.Show(lpDDS[1]);
if (DMenu==0) {m_GameState=GAME_RESTGAME;}
if (DMenu==1){m_GameState=GAME_LOADLIST;}
if (DMenu==2){ RunMessage(MS_Close,0,NULL,0,0,0,0,NULL,0);}
//Alpha 混合
Clrscr(lpDDS[DDS_Alpha],0);
if (tmp!=true) tmp=NTLight(lpDDS[1],lpDDS[DDS_Alpha],NULL);
if (KEYSTATE(VK_ESCAPE)==true){RunMessage(MS_Close,0,NULL,0,0,0,0,NULL,0);}
IsMouse=true;
}
void CEngine::Game_LOGO()
{
RECT LogoPic1={0,0,377,297};
RunGame=false; //表明不是游戏状态
Clrscr(lpDDS[1],RGB16(255,255,255));
IsMouse=false;
strcpy(tmpc,PicPath); strcat(tmpc,LogoPic);
LoadBitmapSG(lpDDS[7],tmpc,&LogoPic1,&LogoPic1); //Logo 文件读取
BltFast(lpDDS[1],((ScreenWidth-1)>>1)-(LogoPic1.right>>1),((ScreenHeight-1)>>1)-(LogoPic1.bottom>>1),lpDDS[7],&LogoPic1,NoKey); //Logo贴入
//Alpha 混合
CreateRect(tmpr,((ScreenWidth-1)>>1)-(LogoPic1.right>>1),((ScreenHeight-1)>>1)-(LogoPic1.bottom>>1),
((ScreenWidth-1)>>1)+(LogoPic1.right>>1),((ScreenHeight-1)>>1)+(LogoPic1.bottom>>1)); //初始化部分Alpha
if (NTLightTN(lpDDS[1],lpDDS[DDS_Alpha],&tmpr)==true) { m_GameState=GAME_LOADG;}
if (LDown==true) { m_GameState=GAME_LOADG;}
}
void CEngine::GameLoadList()
{
Clrscr(lpDDS[DDS_Alpha],0);
//lpDDS[1]->BltFast(0,0,lpDDS[6],NULL,SrcKey);
BltFast(lpDDS[1],0,0,lpDDS[6],NULL,SrcKey);
fontv.SetFont(19,"新宋体");
fontv.SetColor(RGB(255,0,128));
fontv.PrintText(lpDDS[1],(ScreenWidth>>1)-40,(ScreenHeight>>1)-60,"开 始 游 戏");
fontv.PrintText(lpDDS[1],(ScreenWidth>>1)-40,(ScreenHeight>>1)-30,"读 取 进 度");
fontv.PrintText(lpDDS[1],(ScreenWidth>>1)-40,(ScreenHeight>>1),"退 出 游 戏");
if (RDown==true&&LDown==false) {m_GameState=GAME_BEGIN;}
}
void CEngine::SystemMenu()
{
int DMenu=-1;
const int Lx=58; //从58开始
const int Rx=335; //从335开始
//|-----------------|
//| | |
//| | |
//| | |
//|-----------------|
Clrscr(lpDDS[1],0);
DDReLoadBitmap(lpDDS[1],"pic\\MenuBGP.bmp");
menu.ReInit(Lx,0);
menu.SetBTextFont(false,19,"新宋体");
menu.AddButton(0,235,"状 态",Clicksound);
menu.AddButton(0,265,"物 品",Clicksound);
menu.AddButton(0,295,"法 术",Clicksound);
menu.AddButton(0,325,"特 殊",Clicksound);
menu.AddButton(0,355,"帮 助",Clicksound);
menu.AddButton(0,385,"返 回",Clicksound);
menu.AddButton(0,415,"退 出",Clicksound);
DMenu=menu.Show(lpDDS[1]);
//判断
if (DMenu==0) {i_SystemMenuValue=1;} //状态菜单
if (DMenu==1) {i_SystemMenuValue=2;} //物品菜单
if (DMenu==2) {i_SystemMenuValue=3;} //法术菜单
if (DMenu==3) {i_SystemMenuValue=4;} //特殊菜单
if (DMenu==5) {m_GameState=GAME_RUNGAME;}
if (DMenu==6) {RunMessage(MS_Close,0,NULL,0,0,0,0,NULL,0);}
//右面部分实现
if (i_SystemMenuValue==1)
{
fontv.SetFont(13,"宋体");
fontv.SetColor(RGB(255,0,128));
fontv.bChangeColor=true;
//fontv.PrintText(lpDDS[1],Rx,100,);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -