⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mygame.h

📁 gamecode 很不错的小游戏源代码
💻 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 + -