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

📄 mygame.cpp

📁 本人初学C和directx时编的RPG游戏源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	rect.left = 0;
	rect.right = nTileW;
	rect.top = 0;
	rect.bottom =  nTileH;
	Blt(lpDDSBack, 0, 0, lpDDSMenuback, rect, FALSE);
	// 右上
	rect.left = 288 - nTileW;
	rect.right = 288;
	rect.top = 0;
	rect.bottom =  nTileH;
	Blt(lpDDSBack, 640 - nTileW, 0, lpDDSMenuback, rect, FALSE);
	// 左下
	rect.left = 0;
	rect.right = nTileW;
	rect.top = 144 - nTileH;
	rect.bottom = 144;
	Blt(lpDDSBack, 0, 480 - nTileH, lpDDSMenuback, rect, FALSE);
	// 右下
	rect.left = 288 - nTileW;
	rect.right = 288;
	rect.top = 144 - nTileH;
	rect.bottom = 144;
	Blt(lpDDSBack, 640 - nTileW, 480 - nTileH, lpDDSMenuback, rect, FALSE);
}

//显示状态;
void StatusDisplay()
{
	char *Stat[] = {"金钱", "等级","经验", "生命", "怒气", "攻击", "防御", "速度", "武器", "防具"};
	char Temp[100];
	RECT rect;
	int N;
	MSG msg;
	while (1)
	{
		DIms->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);  //取得键盘状态;
	    if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
			if(!GetMessage(&msg, NULL, 0, 0)) return;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if (bActive)
		{
			DrawMenuback();
	        rect = GetRect(0, 0, 150, 200);
	        Blt(lpDDSBack, 120, 20, lpDDSPortrait, rect, TRUE);
	        sprintf(Temp, "%s:%10d", Stat[0], role.nMoney);
	        PrintText(lpDDSBack, 140, 300, Temp);
	        PrintText(lpDDSBack, 400, 40, role.Name, RGB(64, 0, 224));
	        sprintf(Temp, "%s:%10d", Stat[1], role.nLevel);
	        PrintText(lpDDSBack, 350, 100, Temp);
            sprintf(Temp, "%s:%10d/100", Stat[2], role.nExp);
	        PrintText(lpDDSBack, 350, 150, Temp);
            sprintf(Temp,"%s:%10d/%d",Stat[3], role.nCurLife, role.nMaxLife);	//生命
	        PrintText(lpDDSBack, 350, 200, Temp);
            sprintf(Temp, "%s:%10d/100", Stat[4], role.nPower);
	        PrintText(lpDDSBack, 350, 250, Temp);
            sprintf(Temp,"%s:%10d",Stat[5], role.nAttack);	//攻击
	        PrintText(lpDDSBack, 350, 300, Temp);
	        sprintf(Temp,"%s:%10d",Stat[6], role.nDefence);   //防御	
	        PrintText(lpDDSBack, 350, 350, Temp);
            sprintf(Temp,"%s:%10d",Stat[7], role.nSpeed);	//速度
	        PrintText(lpDDSBack, 350, 400, Temp);
	        if (role.Weapon != 0)
			{
				N = role.Item[role.Weapon] - 0x2f;
	            sprintf (Temp,"%s:%10s",Stat[8], Items[N].Name );
	            PrintText(lpDDSBack, 140, 350, Temp);
			}
			else
			{
				sprintf (Temp,"%s:",Stat[8]);
	            PrintText(lpDDSBack, 140, 350, Temp);
			}
			if (role.Armor != 0)
			{
				N = role.Item[role.Armor] - 0x2f;
		        sprintf (Temp,"%s:%10s",Stat[9], Items[N].Name);	
	            PrintText(lpDDSBack, 140, 400, Temp);
			}
			else
			{
				sprintf (Temp,"%s:",Stat[9] );	
	            PrintText(lpDDSBack, 140, 400, Temp);
			}
			if (KEYDOWN(DIK_ESCAPE))
			{
				DWORD dwTick = GetTickCount();
       		    while(GetTickCount()-dwTick < 150);
				return;
			}
			Flip();
		}
		//等待消息
		else WaitMessage();
	}
}

void ReCalAbi()
{
	//计算变化后的能力;
	int nAppAtt[2], nAppDef[2], nAppSpeed[2];
	if (role.Weapon == 0)    //未装备武器;
	{
		nAppAtt[0] = 0;
		nAppDef[0] = 0;
		nAppSpeed[0] = 0;
	}
	else                       //装备武器; 
	{
		int N = role.Item[role.Weapon] - 0x2f;
		nAppAtt[0]  = Items[N].Attack;
		nAppDef[0] = Items[N].Defence;
		nAppSpeed[0] = Items[N].Speed;
	}
	if ( role.Armor ==0 )      //未装备防具;
	{
		nAppAtt[1] = 0;
		nAppDef[1] = 0;
		nAppSpeed[1] = 0;
	}
	else                        //装备防具;
	{
		int N = role.Item[role.Armor] - 0x2f;
		nAppAtt[1] = Items[N].Attack;
		nAppDef[1] = Items[N].Defence;
		nAppSpeed[1] = Items[N].Speed;
	}
	//加上所有装备的附加能力;
    role.nAttack = role.nOriAtt + nAppAtt[0] + nAppAtt[1];
    role.nDefence = role.nOriDef + nAppDef[0] + nAppDef[1];
	role.nSpeed = role.nOriSpeed + nAppSpeed[0] + nAppSpeed[1];
}

//做出的选择;
int Options(char *szTxt1, char *szTxt2, int nOpt = 1)
{
	MSG msg;
	RECT rect={0, 0, 76, 77};
	while (!KEYDOWN(DIK_ESCAPE))
	{
		DIms->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);  //取得键盘状态;
		if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{ 
			if(!GetMessage(&msg, NULL, 0, 0 )) return 0;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if (bActive)
		{
			if (KEYDOWN(DIK_UP))
			{
				DWORD dwTick = GetTickCount();
       		    while(GetTickCount()-dwTick < 150);
			    nOpt = 1;
			}
		    if (KEYDOWN(DIK_DOWN))
			{
				DWORD dwTick = GetTickCount();
		        while(GetTickCount()-dwTick < 150);
			    nOpt = 2;
			}
		    if (KEYDOWN(DIK_RETURN))
			{
				DWORD dwTick = GetTickCount();
		        while(GetTickCount()-dwTick < 150);
			    return nOpt;
			}
            //将备份页面重画;
	        Blt(lpDDSBack, 0, 0, lpDDSBackup, GetRect(0, 0, ScreenX, ScreenY), FALSE);
	        //画选择框;
		    Blt(lpDDSBack, 282, 192, lpDDSOptionBox, rect, TRUE);
		    //画选择色条;
	        Bar(lpDDSBack, 290, 175 + nOpt * 30, 350, 195 + nOpt * 30, RGB(156,119,5));
            //打印文字;
		    PrintText(lpDDSBack, 305, 205, szTxt1, RGB(255,255,255));
		    PrintText(lpDDSBack, 305, 235, szTxt2, RGB(255,255,255));
		    Flip();
		}
		//等待消息
		else WaitMessage();
	}
	//延时;
	DWORD dwTick = GetTickCount();
    while(GetTickCount()-dwTick < 150);
	return 0;	
}

//物品操作;
int ItemOperation(BOOL infight = FALSE)
{
	char *Stat[]={"金钱","等级","经验","生命","怒气","攻击","防御","速度","武器","防具"};
	char *optTexts[] = {"装备", "卸下", "使用", "丢弃"};
	char Temp[100];
	MSG msg;
	int N;
	int nOption = 0;
	nTopItem = 1;
	ItemCur.nDispos = ItemCur.nSelected = 1; 
    while (1)
	{
	    DIms->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);  //取得键盘状态;
	    if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
			if(!GetMessage(&msg, NULL, 0, 0)) return 0;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if (bActive)
		{
			DrawMenuback();
	        RECT rect = GetRect(0, 0, 185, 421);
            Blt(lpDDSBack, 339, 18, lpDDSListBox, rect, FALSE);
	        rect = GetRect( 0, 0, 150, 200 );
	        Blt(lpDDSBack, 120, 20, lpDDSPortrait, rect, TRUE);
	        sprintf(Temp,"%s:%10d/%d",Stat[ 3 ], role.nCurLife, role.nMaxLife);	//生命
	        PrintText(lpDDSBack, 140, 240, Temp);
            sprintf(Temp, "%s:%10d/100", Stat[ 4 ], role.nPower);
	        PrintText( lpDDSBack, 140, 270, Temp );
            sprintf(Temp,"%s:%10d",Stat[ 5 ], role.nAttack);	//攻击
	        PrintText( lpDDSBack, 140, 300, Temp);
	        sprintf(Temp,"%s:%10d",Stat[ 6 ], role.nDefence);   //防御	
	        PrintText(lpDDSBack, 140, 330, Temp);
            sprintf(Temp,"%s:%10d",Stat[ 7 ], role.nSpeed);	    //速度
	        PrintText( lpDDSBack, 140, 360, Temp);
	        if ( role.Weapon != 0 )
			{
				N = role.Item[ role.Weapon ]- 0x2f;
	            sprintf (Temp,"%s:%10s",Stat[ 8 ], Items[ N ].Name );
	            PrintText(lpDDSBack, 140, 390, Temp);
			} 
	        else
			{
				sprintf (Temp,"%s:",Stat[ 8 ] );
	            PrintText(lpDDSBack, 140, 390, Temp);
			}
			if ( role.Armor != 0)
			{
				N = role.Item[ role.Armor ] - 0x2f;
		        sprintf (Temp,"%s:%10s",Stat[ 9 ], Items[ N ].Name);	
	            PrintText(lpDDSBack, 140, 420, Temp);
			}
			else
			{
				sprintf (Temp,"%s:",Stat[ 9 ] );	
	            PrintText(lpDDSBack, 140, 420, Temp);
			}
			//画选择色条;
            Bar(lpDDSBack, 352, ItemCur.nDispos * 30, 510, ItemCur.nDispos * 30 + 20, RGB(156,119,5));
	        //显示物品栏内的物品;
	        for (int i=nTopItem; i<nTopItem+9; ++i)
			{
				if (role.Item[ i ] != ' ')
				{
					if (i == role.Weapon)
					{
						rect = GetRect(0, 0, 24, 24);
				        Blt(lpDDSBack, 380, (i - nTopItem + 1) * 30, lpDDSWeapon, rect, TRUE);
					}
			        else if (i == role.Armor)
					{
						rect = GetRect(0, 0, 24, 24);
				        Blt(lpDDSBack, 380, (i - nTopItem + 1) * 30, lpDDSArmor, rect, TRUE);
					}
				    N = role.Item[i] - 0x2f;
		            sprintf (Temp, "%s", Items[N].Name);
	                PrintText(lpDDSBack, 410, (i - nTopItem + 1) * 30, Temp);
				}
			}
	        //显示滚动箭头;
	        if (ItemCur.nSelected != 1)
			{
				rect = GetRect(0, 0, 20, 20);
                Blt(lpDDSBack, 480, 305, lpDDSScrollArrows, rect, TRUE);
			}
	        if (ItemCur.nSelected != 16)
			{ 
				rect = GetRect( 0, 20, 20, 40 );
                Blt(lpDDSBack, 500, 305, lpDDSScrollArrows, rect, TRUE);
			}
			//显示物品简介;
	        if (role.Item[ItemCur.nSelected] != ' ') 
			{
				N = role.Item[ ItemCur.nSelected ] - 0x2f; 
	            PrintText(lpDDSBack, 350, 350, Items[ N ].About, RGB(0, 0, 0), TRANSPARENT, RGB( 255, 255, 255 ), 20);  
			}
	        //上下选择物品;
	        if (KEYDOWN(DIK_UP))                       
			{
				DWORD dwTick = GetTickCount();
		        while(GetTickCount()-dwTick < 150);
		        if (ItemCur.nDispos > 1 )
				{
					ItemCur.nDispos--;
			        ItemCur.nSelected--;
				}
				else if (nTopItem > 1)
				{
					nTopItem--;
			        ItemCur.nSelected--;
				}
			}
			if (KEYDOWN(DIK_DOWN))
			{
				DWORD dwTick = GetTickCount();
		        while(GetTickCount()-dwTick < 150);
		        if (ItemCur.nDispos < 9)
				{
					ItemCur.nDispos++;
			        ItemCur.nSelected++;
				}
				else if (nTopItem < 8)
				{
					nTopItem++;
			        ItemCur.nSelected++;
				}
			}
			if (KEYDOWN(DIK_ESCAPE))
			{
				DWORD dwTick = GetTickCount();
			    while(GetTickCount()-dwTick < 150);
				return 0;
			}
			if (KEYDOWN(DIK_RETURN))
			{
				if (role.Item[ItemCur.nSelected] != ' ')
				{
					N = role.Item[ItemCur.nSelected] - 0x2f;
			        if (Items[N].type == 1)
					{
						if (role.Weapon == ItemCur.nSelected)
						{
							ItemSelected = ARMEDWEAPON;
						}
				        else
						{
							ItemSelected = UNARMEDWEAPON;
						}
					}
					else if (Items[N].type == 2)
					{
						if (role.Armor == ItemCur.nSelected)
						{
							ItemSelected = ARMEDARMOR;
						}
				        else
						{
							ItemSelected = UNARMEDARMOR;
						}
					}
			        else if (Items[N].type == 3)
					{
						ItemSelected = MEDICINE;
					}
					else if (Items[N].type == 4)
					{
						ItemSelected = PLOT;
					}
			        //备份页面;
			        Blt(lpDDSBackup, 0, 0, lpDDSBack, GetRect(0, 0, ScreenX, ScreenY), FALSE );
			        DWORD dwTick = GetTickCount();
			        while(GetTickCount()-dwTick < 150);
					//未装备武器;
					if (ItemSelected==UNARMEDWEAPON)
					{
						nOption = Options(optTexts[0], optTexts[3]);
                        if (nOption==1)
						{
							PlayDirectSound(auEquip);
							role.Weapon = ItemCur.nSelected;
                            N = role.Item[ItemCur.nSelected] - 0x2f;
				        }
						else if (nOption==2)
						{
							PlayDirectSound(auDiscard);
							role.Item[ItemCur.nSelected] = ' ';
				            for (int i=ItemCur.nSelected; i < 17; ++i)
							{
								role.Item[i] = role.Item[i + 1];
							}
							if (role.Weapon > ItemCur.nSelected)
							{
								role.Weapon--;
							}
							if (role.Armor > ItemCur.nSelected)
							{
								role.Armor--;
							}
						}
					}
					//已装备武器;
					else if (ItemSelected == ARMEDWEAPON)
					{
						nOption = Options(optTexts[1], optTexts[3]);
						if (nOption==1)
						{
							PlayDirectSound(auEquip);
							role.Weapon = 0;
				     	}
						else if (nOption==2)
						{
							PlayDirectSound(auDiscard);
							role.Weapon = 0;
				            role.Item[ItemCur.nSelected] = ' ';
				            for (int i = ItemCur.nSelected; i < 17; ++i)
							{
								role.Item[i] = role.Item[i + 1];
							} 
				            if (role.Armor > ItemCur.nSelected)
							{
								role.Armor--;
							}

						}
					}
					//未装备防具;
					else if (ItemSelected == UNARMEDARMOR)
					{
						nOption = Options(optTexts[0], optTexts[3]);
						if (nOption==1)
						{
							PlayDirectSound(auEquip);
							role.Armor = ItemCur.nSelected;
				            N = role.Item[ItemCur.nSelected] - 0x2f;
				        }
						else if (nOption==2)
						{
							PlayDirectSound(auDiscard);
							role.Item[ItemCur.nSelected] = ' ';
				            for (int i=ItemCur.nSelected; i<17; ++i)
							{
								role.Item[i] = role.Item[i + 1];
							}
							if (role.Weapon > ItemCur.nSelected)
							{
								role.Weapon--;
							}
							if (role.Armor > ItemCur.nSelected)
							{
								role.Armor--;
							}
                		}
					}
					//已装备防具;
					else if (ItemSelected == ARMEDARMOR)
					{
						nOption = Options(optTexts[1], optTex

⌨️ 快捷键说明

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