📄 mygame.h
字号:
//************************************************************
//游戏全局类
//作者:曾铮
//时间:2004年6月
//说明:控制游戏存、取;记录游戏一些全局的设置
//************************************************************
#ifndef MyGame_h_
#define MyGame_h_
extern MyPlayer players[4];
extern MyMaps maps;
extern int nextori;
extern int playercount;
extern int PlayerID;
extern int psteploop;
extern void GL_GamePicShowSilence();
extern void savedate(int index);
extern void loaddate(int index);
class MyGame
{
public:
bool Is_Debug;//测试时的键盘操作人物。
bool Is_Justbegin;//是否刚刚开始游戏。
//游戏中共有的卡片数量,买后减少,用后增加
int rdnum;//遥控色子数量
int ppnum;//通行证数量
int tcnum;//乌龟卡数量
int scnum;//高级轿车数量
int cmnum;//企业管理人数量
int stcnum;//停留卡数量
int bcnum;//收购卡的数量
private:
int ScrWidth;//屏幕宽 default:1024
int ScrHeight;//屏幕高 default:768
bool G_begin;//是否开始游戏。
bool Is_Menu;//是否在菜单选择模式。
bool Is_Playing;//是否在游戏过程中。
int GameMode;//游戏模式(人数)。
public:
MyGame(int scrw=1024,int scrh=768);
int GetSW();//取得屏幕宽
int GetSH();//取得屏幕高
int GetMode();//取得游戏模式
bool _IsBegin();//得到是否开始游戏。
bool _IsMenu(); //得到是否在菜单模式。
bool _IsPlaying();//得到是否在游戏过程中。
void _SetBegin(bool);//确定游戏开始
void _SetMenu(bool);//进行菜单模式
void _SetPlaying(bool);//确定在游戏过程中
void SetMode(int );//设置游戏模式(人数)。
bool SaveGame(long *moneyinbank,int mapindex=1);//存档
bool LoadGame(long *moneyinbank,int mapindex=1);//取档
void CheckToolsNum();//检查工具数量是否超过上限。
virtual ~MyGame();
};
MyGame::MyGame(int scrw,int scrh)
{
this->ScrWidth=scrw;
this->ScrHeight=scrh;
this->G_begin=false;
this->Is_Menu=false;
this->Is_Playing=false;
this->Is_Justbegin=true;
this->rdnum=4;
this->ppnum=4;
this->tcnum=4;
this->scnum=4;
this->cmnum=4;
this->stcnum=4;
this->bcnum=4;
}
void MyGame::CheckToolsNum()
{
rdnum>4 ? rdnum=4:rdnum=rdnum;
ppnum>4 ? ppnum=4:ppnum=ppnum;
tcnum>4 ? tcnum=4:tcnum=tcnum;
scnum>4 ? scnum=4:scnum=scnum;
cmnum>4 ? cmnum=4:cmnum=cmnum;
stcnum>4 ? stcnum=4:stcnum=stcnum;
bcnum>4 ? bcnum=4:bcnum=bcnum;
}
MyGame::GetSW()
{
return this->ScrWidth;
}
int MyGame::GetSH()
{
return this->ScrHeight;
}
bool MyGame::_IsBegin()
{
return this->G_begin;
}
bool MyGame::_IsMenu()
{
return this->Is_Menu;
}
bool MyGame::_IsPlaying()
{
return this->Is_Playing;
}
void MyGame::_SetBegin(bool value)
{
this->G_begin=value ;
}
void MyGame::_SetMenu(bool value)
{
this->Is_Menu=value;
}
void MyGame::_SetPlaying(bool value)
{
this->Is_Playing=value;
}
void MyGame::SetMode(int value)
{
this->GameMode=value;
}
int MyGame::GetMode()
{
return this->GameMode;
}
bool MyGame::SaveGame(long *moneyinbank,int mapindex)
{
ofstream savefile;
if(mapindex==1)
savefile.open("gamesave/gamesave1.sav");
else if(mapindex==2)
savefile.open("gamesave/gamesave2.sav");
else
savefile.open("gamesave/gamesave3.sav");
//记录一些全局变量:
savefile<<this->rdnum<<" "<<this->ppnum<<" "<<this->tcnum<<" ";
savefile<<this->scnum<<" "<<this->cmnum<<" "<<this->stcnum<<" ";
savefile<<this->bcnum<<" ";
savefile<<Rx<<" "<<Ry<<" ";
savefile<<nextori<<" "<<playercount<<" "<<PlayerID<<" ";
savefile<<psteploop<<" ";
savefile<<this->GameMode<<" ";
//记录人物变量:
// for(int i=0;i<GameMode;i++)
for(int i=0;i<4;i++)
{
savefile<<moneyinbank[i]<<" ";//银行钱
savefile<<players[i].x<<" "<<players[i].y<<" ";//人物位置
savefile<<players[i].GetMoney()<<" ";//人物钱
savefile<<players[i].GetExp()<<" ";//人物经验
savefile<<players[i].status<<" ";//人物当前状态
savefile<<players[i].level<<" ";//人物经验
savefile<<players[i].speed<<" ";//人物速度
savefile<<players[i].orientation<<" ";//人物走向
savefile<<players[i].rollx<<" "<<players[i].rolly<<" ";//滚屏参数
savefile<<players[i].toolindex<<" ";//人物物品链索引
savefile<<players[i].factorynum<<" ";//工厂数
savefile<<players[i].buildingnum<<" ";//建筑数量
savefile<<players[i].honour<<" ";//人物封号
savefile<<players[i].name<<" ";//角色名字
savefile<<players[i].iscomp<<" ";//电脑与否
//记录人物角色的物品信息。
int llen=players[i].tools.listlength();
if(llen!=0)
{
int index=1;
MyTool *temptool=new MyTool;
do{
players[i].tools.getelem(index,temptool);
savefile<<temptool->kind<<" ";
index++;
}while(index<=llen);
}
}
savefile.close();
//记录地图、建筑信息:
maps.SaveBuilding(mapindex);
maps.SaveFactory(mapindex);
savedate(mapindex);
return true;
}
bool MyGame::LoadGame(long *moneyinbank,int mapindex)
{
//读取地图数据:
//maps.pbuilding.clearlist();
//maps.pfactory.clearlist();
maps.indexb=1;
maps.indexf=1;
maps.LoadBuilding(mapindex);
maps.LoadFactory(mapindex);
loaddate(mapindex);
ifstream loadfile;
if(mapindex==1)
loadfile.open("gamesave/gamesave1.sav");
else if(mapindex==2)
loadfile.open("gamesave/gamesave2.sav");
else
loadfile.open("gamesave/gamesave3.sav");
//读全局变量:
loadfile>>this->rdnum>>this->ppnum>>this->tcnum;
loadfile>>this->scnum>>this->cmnum>>this->stcnum;
loadfile>>this->bcnum;
loadfile>>Rx>>Ry>>nextori>>playercount>>PlayerID>>psteploop>>this->GameMode;
//读人物变量:
// for(int i=0;i<GameMode;i++)
for(int i=0;i<4;i++)
{
loadfile>>moneyinbank[i];
loadfile>>players[i].x;
loadfile>>players[i].y;
loadfile>>players[i].money;
loadfile>>players[i].exp;
loadfile>>players[i].status;
loadfile>>players[i].level;
loadfile>>players[i].speed;
loadfile>>players[i].orientation;
loadfile>>players[i].rollx>>players[i].rolly;
loadfile>>players[i].toolindex;
loadfile>>players[i].factorynum;
loadfile>>players[i].buildingnum;
loadfile>>players[i].honour;
loadfile>>players[i].name;
int isc;
loadfile>>isc;
if(isc==0)//取得是否为电脑。
players[i].iscomp=false;
else
players[i].iscomp=true;
int toolnum=players[i].toolindex;
players[i].toolindex=1;
//加载物品
if(toolnum>=2)//至少有一个物品
{
for(int n=1;n<toolnum;n++)
{
MyTool *tool;
int toolkind;
loadfile>>toolkind;
switch(toolkind)
{
case COMPMANAGER:
{
compmanager *cm=new compmanager;
tool=(MyTool*)cm;
players[i].ChangeMoney(tool->GetPrice());//加一个物品的价格
players[i].BuyTools(tool,i);
}
break;
case PASSPORT:
{
passport *pp=new passport;
tool=(MyTool*)pp;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
case REMODICE:
{
remodice *rm=new remodice;
tool=(MyTool*)rm;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
case STOPCARD:
{
stopcard *sc=new stopcard;
tool=(MyTool*)sc;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
case SUPERCAR:
{
supercar *sca=new supercar;
tool=(MyTool*)sca;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
case TORTCARD:
{
tortcard *tt=new tortcard;
tool=(MyTool*)tt;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
case BUYCARD:
{
buycard *bc=new buycard;
tool=(MyTool*)bc;
players[i].ChangeMoney(tool->GetPrice());
players[i].BuyTools(tool,i);
}
break;
default:
break;//错误数据忽略
}
}//for
}//如果有物品则加载
}//读取完信息
loadfile.close();
players[PlayerID].SetRxy();//调整屏幕显示为读档前状态。
//GL_GamePicShowSilence();
//Flip();
return true;
}
MyGame::~MyGame()
{
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -