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

📄 sale.cpp

📁 圣剑英雄1的源代码(英雄救美版)。经典PRG游戏编程示例。
💻 CPP
字号:
//==============物品买卖模块==================


//**************************
//显示物品
void ShowGoodsList(Role Boss, int num, int Flag=BUY)
{
	int x=120,y=90;
	char temp[200];
	char TempChar[200];
	
	MainMove();
	rect=GetRect(0,0,420,320);
	Blt(lpDDSBack, x-10,y-10, lpDDSStateBar, rect, TRUE);

	if( Boss.Goods[num] != ' ' )
	{
		int N=Boss.Goods[num]-0x30;
		if( Flag == SALE ) //卖
		{
			sprintf(temp,"%16s  (值:%d 卖价:%d)", Goods[ Boss.Goods[num]-0x30 ].Name, Goods[N].Money, Goods[N].Money/2);
			sprintf(TempChar, "(现金=%4d) CTRL=卖出 ESC=退出", Hero.Money);
		}
		else	//买 
		{
			sprintf(temp,"%16s  (价格:%5d)", Goods[ Boss.Goods[num]-0x30 ].Name, Goods[N].Money);
			sprintf(TempChar, "(现金=%4d) CTRL=购买 ESC=退出", Hero.Money);
		}
		PrintText(lpDDSBack,x,y+20, temp, RGB(255,255,255));
		sprintf(temp,"经验: %3d 生命:%3d 攻击:%3d 防御:%3d",Goods[N].Exp, Goods[N].Lift, Goods[N].Attack, Goods[N].Defend);
		PrintText(lpDDSBack,x+20,y+80, temp, RGB(255,255,255),TRANSPARENT,0, 10);
		PrintText(lpDDSBack,x+150,y+80, Goods[N].About, RGB(255,255,0), TRANSPARENT, 0, 22);
		
	}
	if( Flag == SALE ) //卖
		sprintf(TempChar, "(现金=%4d) CTRL=卖出 ESC=退出", Hero.Money);
	else	//买 
		sprintf(TempChar, "(现金=%4d) CTRL=购买 ESC=退出", Hero.Money);
	PrintText(lpDDSBack,x+10,y+277, TempChar, RGB(255,255,255));

	for(int i=0; i<2; i++)
		for(int j=0; j<8; j++)
		{
			rect=GetRect(0,0,48,48);
			Blt(lpDDSBack, x+5+j*49, 270+i*49, lpDDSGoods, rect, TRUE);

			int good=Boss.Goods[i*8+j]-0x30;
			if( good != ' '-0x30 )
			{
				rect=GetRect(good%8*48, good/8*48, good%8*48+48, good/8*48+48);
				Blt(lpDDSBack, x+5+j*49, 270+i*49, lpDDSGoods, rect, TRUE);
			}
			if( num == i*8+j )
			{
				rect=GetRect(48,0,96,48);
				Blt(lpDDSBack, x+5+j*49, 270+i*49, lpDDSGoods, rect, TRUE);
			}
		}

	Flip();
}

//****************************
//物品对话框
int SaleDialog(Role Boss, int Flag)
{
	int n=0,ret=0;
	ShowGoodsList(Boss, n);
	PressKey(VK_CONTROL,1);

	while( 1 )
	{
		if( GetAsyncKeyState(VK_RIGHT) )	//下一项
		{
			PressKey(VK_RIGHT,1);
			n=(n+1)%16;
			ShowGoodsList(Boss, n, Flag);
		}
		else if( GetAsyncKeyState(VK_LEFT) )	//上一项
		{
			PressKey(VK_LEFT,1);
			if( n==0 ) n=15;
			else n--;
			ShowGoodsList(Boss, n, Flag);
		}
		else if( GetAsyncKeyState(VK_DOWN) )	//下8项
		{
			PressKey(VK_DOWN,1);
			n=(n+8)%16;
			ShowGoodsList(Boss, n, Flag);
		}
		else if( GetAsyncKeyState(VK_UP) )	//上8项
		{
			PressKey(VK_UP,1);
			if( n>=8 ) n-=8;
			else n+=8;
			ShowGoodsList(Boss, n, Flag);
		}
		else if( GetAsyncKeyState(VK_CONTROL) )	//确定
		{
			PressKey(VK_CONTROL,1);
		
		//买东西%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555
		if( Flag == BUY )
		{
			//满了
			if( GetGoodsNums(Hero)==16 )
				ShowMessage("你已经带满了!",240,460);
			//该格有物品
			else if( Boss.Goods[n]!=' ' )
			{
			int NNN=Boss.Goods[n]-0x30;
			
			//买了
			if( Hero.Money>=Goods[ NNN ].Money )
			{
				Boss.Goods[n]=' ';
				ShowGoodsList(Boss, n, Flag);
				Hero.Money-=Goods[NNN].Money;
				AddGoods(Hero, NNN+0x30);

				char Temp[100];
				int x=120, y=90;
				
				sprintf(Temp,"身上现有的物品:");
				PrintText(lpDDSPrimary, x+132, y+10, Temp );
				PrintText(lpDDSPrimary, x+130, y+8, Temp, RGB(255,255,0));
				sprintf(Temp,"身上现有的物品:");
				for(int i=0; i<16; i++)
				{
					memset(Temp,0,100);
					if( Hero.Goods[i] != ' ' )
					{
						sprintf(Temp,"%s", Goods[ Hero.Goods[i]-0x30 ].Name );//金钱
						PrintText(lpDDSPrimary, x+20+i%4*90, y+40+i/4*30, Temp);
						PrintText(lpDDSPrimary, x+18+i%4*90, y+38+i/4*30, Temp,RGB(255,255,255));
					}
				}
				ret=1;
				ShowMessage("这东西属于你了!", 240, 460);
			}
			else //钱不够
				ShowMessage("兄弟,你的钱不够!", 240, 460);
			}
		}

		//卖东西%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
		else if( Flag == SALE )
		{
			//该格有物品
			if( Hero.Goods[n]!=' ' )
			{
				int NNN=Hero.Goods[n]-0x30;
				//卖了
				Hero.Goods[n]=' ';
				Boss.Goods[n]=' ';
				ShowGoodsList(Hero, n, Flag);
				Hero.Money+=Goods[NNN].Money/2;
			
				char Temp[100];
				int x=120, y=90;
				sprintf(Temp,"卖掉[%s]得到:%d",Goods[NNN].Name,Goods[NNN].Money/2);
				PrintText(lpDDSPrimary, x+102, y+110, Temp );
				PrintText(lpDDSPrimary, x+100, y+108, Temp, RGB(255,255,255));
				
				ret=1;
				ShowMessage("这东西归别人了!", 240, 460);
			}
			else //钱不够
				ShowMessage("这儿没有东西!", 240, 460);
		}
			
		}
		else if( GetAsyncKeyState(VK_ESCAPE) )	//退出
		{
			PressKey(VK_ESCAPE,1);
			return ret;
		}
	}
}

⌨️ 快捷键说明

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