📄 mygame.cpp
字号:
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 + -