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

📄 czdemo.cpp

📁 gamecode 很不错的小游戏源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	Blt(pBBuf,6*32,6*32,shop,GetRect(0,0,640,413),false);
	int x=7*32+20;
	int y=x;
	RECT rect={0,0,100,100};
	int row=0;
	int kind=-1;
	mygame.CheckToolsNum();//检查并更正物品数量
	for(int i=0;i<7;i++)//六种卡片
	{
		kind++;
		if(row>3)//从0开始到3共四个
		{
			y=7*32+50+130;
			x=7*32+20-4*100-4*40;
		}
		switch(kind)
		{
		case COMPMANAGER:
			Blt(pBBuf,x+row*100+row*40,y,cm,rect,true);
			//测试
			_itoa(mygame.cmnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case REMODICE:
			Blt(pBBuf,x+row*100+row*40,y,rd,rect,true);
			//测试
			_itoa(mygame.rdnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case PASSPORT:
			Blt(pBBuf,x+row*100+row*40,y,pp,rect,true);
			//测试
			_itoa(mygame.ppnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case STOPCARD:
			Blt(pBBuf,x+row*100+row*40,y,sc,rect,true);
			//测试
			_itoa(mygame.stcnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case SUPERCAR:
			Blt(pBBuf,x+row*100+row*40,y,suc,rect,true);
			//测试
			_itoa(mygame.scnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case TORTCARD:
			Blt(pBBuf,x+row*100+row*40,y,tt,rect,true);
			//测试
			_itoa(mygame.tcnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		case BUYCARD:
			Blt(pBBuf,x+row*100+row*40,y,bc,rect,true);
			//测试
			_itoa(mygame.bcnum,showcardnum,10);
			PrintText(pBBuf,x+row*100+row*40,y+100,"余张数:",RGB(0,0,0));
			PrintText(pBBuf,x+row*100+row*40+80,y+100,showcardnum,RGB(0,0,0));
			row++;
			break;
		}
	}
	//Flip();
	PrintText(pBBuf,7*32+10,7*32-18,"请选择要购买的物品,按回车键确定:",RGB(0,0,0));				
	PrintText(pBBuf,7*32+10,7*32+310,"放弃购买请按Ctrl键退出菜单。",RGB(0,0,0));				
	return;
}

//显示除了playerid的所有角色头像
int showplayerpics(int playerid)
{
	GL_GamePicShowSilence();
	int count=0;
	int x=7*32+20;
	int y=x;
	Blt(pBBuf,6*32,6*32,pDialog1,GetRect(0,0,640,382),false);
	RECT rect={0,0,140,163};
	int row=0;
	for(int i=0;i<mygame.GetMode();i++)
	{
		if(row>3)//从0开始到3共四个
		{
			y=7*32+50+160;
			x=7*32+20-4*120-4*20;
		}
		if(i!=playerid && players[i].IsExist())//需要显示其头像
		{
			//使用带缩放的帖图
			SBlt(pBBuf,GetRect(x+row*160,y,x+row*160+117,y+136),players[i].pPhoto1,GetRect(0,0,140,163),false);
			row++;
			count++;//可收购对象记数
		}
	}
	PrintText(pBBuf,7*32+10,7*32-18,"请选择角色对象,按回车键确定:",RGB(255,255,255),OPAQUE,RGB(0,0,0));				
	PrintText(pBBuf,7*32+10,7*32+300,"放弃使用请按Ctrl键退出菜单。",RGB(255,255,255),OPAQUE,RGB(0,0,0));
	return count;
}

//显示playerid的建筑
int showbuilding(int playerid,bool& hasbu,bool& hasfa)
{
	int playerBuinum=players[playerid].buildingnum;
	int playerFacnum=players[playerid].factorynum;
	int bandfnum=0;//房屋和建筑的总数量
	if(playerBuinum<=0 && playerFacnum<=0)
	{
		return 0;//这种情况一般不会出现,在前面应有检测
	}
	else
	{
		GL_GamePicShowSilence();
		Blt(pBBuf,6*32,6*32,pDialog1,GetRect(0,0,640,382),false);
		int x=6*32+20+190; //建筑左上角坐标
		int y=6*32+50;
		RECT rect={0,0,96,96};
		int row=0;		
		//显示所选的人头像
		Blt(pBBuf,6*32+20,6*32+70,players[playerid].pPhoto1,GetRect(0,0,140,163),false);

		if(playerBuinum>=1)
			hasbu=true;
		if(playerFacnum>=1)
			hasfa=true;

		int Num=playerFacnum;//playerFacnum;//总的工厂数量
		if(hasbu && Num>=5)
			Num=5;
		if(!hasbu && Num>=6)
			Num=6;
		//若有房产,则先帖一个图
		if(hasbu)
		{
			RECT rect={0,0,96,96};//房屋大图片
			Blt(pBBuf,x,y,buildingSur,rect,true);
			row++;
			bandfnum++;
		}
		bandfnum+=Num;//记录建筑总数
		int si=1;//记录收索到了的index位置
		if(hasfa)
		{
			MyFactory tempf;
			while(si<=maps.pfactory.listlength())
			{
				if(row>=3)//从0开始到2共三个
				{
					y=6*32+50+150;
					x=6*32+20+190-3*96-3*43;
				}
				else
				{
					x=6*32+20+190; 
					y=6*32+50;
				}
				maps.pfactory.getelem(si,tempf);
				if(tempf.owner==playerid)//找到一个factory主人。
				{
					switch (tempf.kind)
					{
					case BUILDFACTORY0:
						Blt(pBBuf,x+row*(96+43),y,autofSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY1:
						Blt(pBBuf,x+row*(96+43),y,foodfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY2:
						Blt(pBBuf,x+row*(96+43),y,restafSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY3:
						Blt(pBBuf,x+row*(96+43),y,minerfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY4:
						Blt(pBBuf,x+row*(96+43),y,spinmfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY5:
						Blt(pBBuf,x+row*(96+43),y,smeltfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					default:
						Blt(pBBuf,x+row*(96+43),y,autofSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					}//switch tempf.kind根据kind作图
				//	break;//退出while
				}//if找到了
				si++;
			}//while
		}//if(playerFacnum!=0)作工厂图		
		
		//}
		PrintText(pBBuf,6*32+15,6*32+10,"请选择建筑:");	
		PrintText(pBBuf,7*32+10,7*32+300,"放弃使用请按Ctrl键退出菜单。");	
		//	Flip();
	}
	return bandfnum;//Building AND Factory NUMber->bandfnum 
}

//显示playerid的建筑
int _showbuilding(int playerid,bool& hasbu,bool& hasfa,int* recordkind)
{
	int playerBuinum=players[playerid].buildingnum;
	int playerFacnum=players[playerid].factorynum;
	int bandfnum=0;//房屋和建筑的总数量
	if(playerBuinum==0 && playerFacnum==0)
	{
		return 0;//这种情况一般不会出现,在前面应有检测
	}
	else
	{
		GL_GamePicShowSilence();
		Blt(pBBuf,6*32,6*32,pDialog1,GetRect(0,0,640,382),false);
		int x=6*32+20+190; //建筑左上角坐标
		int y=6*32+50;
		RECT rect={0,0,96,96};
		int row=0;		
		//显示所选的人头像
		Blt(pBBuf,6*32+20,6*32+70,players[playerid].pPhoto1,GetRect(0,0,140,163),false);

		if(playerBuinum!=0)
			hasbu=true;
		if(playerFacnum!=0)
			hasfa=true;

		int Num=playerFacnum;//playerFacnum;//总的工厂数量
		if(hasbu && Num>=5)
			Num=5;
		if(!hasbu && Num>=6)
			Num=6;
		//若有房产,则先帖一个图
		if(hasbu)
		{
			RECT rect={0,0,96,96};//房屋大图片
			Blt(pBBuf,x,y,buildingSur,rect,true);
			row++;
			bandfnum+=1;
		}
		bandfnum+=Num;//记录建筑总数

		int si=1;//记录收索到了的index位置

		//不能在这个函数里为其分配空间
		//recordkind=new int[bandfnum];//分配选项记录个数空间

		int inofrk=0;//index of recordkind
		if(hasbu)
		{
			recordkind[inofrk]=0;//0表示为房屋
			inofrk++;
		}
		if(hasfa)
		{
			MyFactory tempf;
			while(si<=maps.pfactory.listlength())
			{
				if(row>=3)//从0开始到2共三个
				{
					y=6*32+50+150;
					x=6*32+20+190-3*96-3*43;
				}
				else
				{
					x=6*32+20+190; 
					y=6*32+50;
				}
				maps.pfactory.getelem(si,tempf);
				if(tempf.owner==playerid)//找到一个factory主人。
				{
					recordkind[inofrk]=tempf.kind;
					inofrk++;
					switch (tempf.kind)
					{
					case BUILDFACTORY0:
						Blt(pBBuf,x+row*(96+43),y,autofSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY1:
						Blt(pBBuf,x+row*(96+43),y,foodfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY2:
						Blt(pBBuf,x+row*(96+43),y,restafSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY3:
						Blt(pBBuf,x+row*(96+43),y,minerfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY4:
						Blt(pBBuf,x+row*(96+43),y,spinmfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					case BUILDFACTORY5:
						Blt(pBBuf,x+row*(96+43),y,smeltfSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					default:
						Blt(pBBuf,x+row*(96+43),y,autofSur,rect,true);
						if(tempf.affe_money<0)
							PrintText(pBBuf,x+row*(96+43),y+98,"(亏损)");
						row++;
						break;
					}//switch tempf.kind根据kind作图
				//	break;//退出while
				}//if找到了
				si++;
			}//while
		}//if(playerFacnum!=0)作工厂图		
		
		PrintText(pBBuf,6*32+15,6*32+10,"请选择建筑:");	
		PrintText(pBBuf,7*32+10,7*32+300,"放弃使用请按Ctrl键退出菜单。");				
		
	}
	return bandfnum;
}

//购买商店物品
void buyinshop(int playerid)
{
	shopshow();
	int x=7*32;
	int y=x;
	Blt(pBBuf,x+120,y+60,choice,GetRect(0,0,28,27),true);
	Flip();
	bool dochoose=true;//在选择之中
	int thechoice=0;
	int Num=7;//物品数量
	int count=0;//记录所指物品
	bool soldout;//某产品出售完
	while(dochoose==true)
	{
		soldout=false;
		PressKey(VK_CONTROL,1);//吸收Ctrl
		PressKey(VK_RETURN,1);
		PressKey(VK_UP,1);
		PressKey(VK_DOWN,1);
		if( GetAsyncKeyState(VK_RIGHT) )	//下一项
		{
			PressKey(VK_RIGHT,1);
			thechoice=(thechoice+1)%Num;
			count=(count+1)%Num;
			shopshow();//刷新菜单
			if(count>3)
			{
				y=7*32+150;
				x=7*32-4*140;
			}
			else
			{
				x=7*32;
				y=x;
			}
			Blt(pBBuf,x+120+count*140,y+60,choice,GetRect(0,0,28,27),true);
			PlayDirectSound(selectsnd);
			Flip();
		}
		if( GetAsyncKeyState(VK_LEFT) )	//上一项
		{
			PressKey(VK_LEFT,1);
			if( thechoice==0 ) 
			{
				thechoice=Num-1;
				count=Num-1;
			}
			else 
			{
				thechoice--;
				count--;
			}
			if(count>3)
			{
				y=7*32+150;
				x=7*32-4*140;
			}
			else
			{
				x=7*32;
				y=x;
			}
			shopshow();//刷新菜单
			Blt(pBBuf,x+120+count*140,y+60,choice,GetRect(0,0,28,27),true);
			PlayDirectSound(selectsnd);
			Flip();
		}
		if( GetAsyncKeyState(VK_RETURN) )	//确定
		{
			MyTool* tool;
			PressKey(VK_RETURN,1);	//防止连击。
			switch(thechoice)
			{
			case COMPMANAGER:
				{
					compmanager *cm=new compmanager;
					tool=(MyTool*)cm;
					if(mygame.cmnum>0 && players[playerid].BuyTools(tool,playerid))
					{
						MyMenus mymenu(360,260,"pics/menu.fim",280,120,GetRect(0,0,280,120));
						char* tchoice[]={"确定"};	
						PressKey(VK_RETURN,1);
						mymenu.ShowtMenu("聘请了企业管理人!",tchoice,1);
						mygame.cmnum--;
						GL_GamePicShowSilence();
						Flip();
						return;
					}
					else if(mygame.cmnum<=0)
					{
						MyMenus mymenu(360,260,"pics/menu.fim",280,120,GetRect(0,0,280,120));
						char* tchoice[]={"确定"};	
						PressKey(VK_RETURN,1);
						mymenu.ShowtMenu("没有企业管理人了!",tchoice,1);
						soldout=true;
						shopshow();//刷新菜单
						Blt(pBBuf,x+120+count*140,y+60,choice,GetRect(0,0,28,27),true);
						Flip();
						break;
					}
				}
				break;
			case PASSPORT:
				{
					passport *pp=new passport;
					tool=(MyTool*)pp;
					if(mygame.ppnum>0 && players[playerid].BuyTools(tool,playerid))
					{
						MyMenus mymenu(360,260,"pics/menu.fim",280,120,GetRect(0,0,280,120));
						char* tchoice[]={"确定"};	
						PressKey(VK_RETURN,1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -