對這方面感興趣想學習C/C 或者正在學習C/C 的同學可以加群:558502932,群内有大量C/C 學習資料,也有大神答疑,大家一起學習交流咯!!
對于正在學習C/C 的同學來說,學了C/C 之後能做什麼這是一個很大的問題。然後就會出現很多迷茫的同學們,有些同學知道學了能作什麼,但是不知道具體該怎麼學,那也開始迷茫了起來。
而我今天就是給大家發送一個福利了,對于正在學習C/C 想去往遊戲方面發展的人來說,一個遊戲的核心部分,就是遊戲的心髒,而怎麼樣才能寫好這個心髒呢?我就來分享一下,我之前一直在更新的夢幻西遊遊戲中的心髒部分,希望能對你們有所幫助咯!
在學習C/C 或者想學習C/C 可以加群:558502932
代碼如下:
//-----------------------------------【Game_Main( )函數】--------------------------------------
//描述:遊戲Main函數,遊戲的心髒,處理遊戲大大小小函數的合理調用與運作
//--------------------------------------------------------------------------------------------------
VOID Game_Main(HWND hwnd)
{
wchar_t str[100];
//先在mdc中貼上背景圖
SelectObject(g_bufdc, g_hBackGround);
BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
//下雪效果的繪制
if (!g_bGameOver)//如果遊戲未結束
{
Snow_Paint(); //調用封裝了雪花飛舞粒子效果的函數,模拟下雪場景
}
//顯示對戰消息
SetTextColor(g_mdc, RGB(255, 255, 255));
for (int i = 0; i<g_iTxtNum; i )
TextOut(g_mdc, 20, 410 i * 18, text[i], wcslen(text[i]));
//貼上怪物圖以及顯示怪物血量
if (Boss.NowHp>0)
{
//貼上怪物圖360
SelectObject(g_bufdc, g_hMonsterBitmap);
//BitBlt(g_mdc, 60, 100, 250, 250, g_bufdc, 250, 0, SRCAND);
//BitBlt(g_mdc, 60, 100, 250, 250, g_bufdc, 0, 0, SRCPAINT);
TransparentBlt(g_mdc, 90, 150, 250, 250, g_bufdc, g_Bnum*250, 0, 250, 250, RGB(0, 0, 0));//采用TransparentBlt透明貼圖函數
//顯示怪物血量
swprintf_s(str, L"%d / %d", Boss.NowHp, Boss.MaxHp);
SetTextColor(g_mdc, RGB(255, 10, 10));
TextOut(g_mdc, 155, 345, str, wcslen(str));
g_Bnum ;
if (g_Bnum == 16)
g_Bnum = 0;
}
//貼上玩家圖以及玩家生命值,魔法值的顯示
if (Hero.NowHp>0)
{
//貼上人物圖
SelectObject(g_bufdc, g_hHeroBitmap);
TransparentBlt(g_mdc, 330, 280, 250, 250, g_bufdc, g_Hnum*250, 0, 250, 250, RGB(0, 0, 0));//透明色為RGB(0,0,0)純黑色
//BitBlt(g_mdc, 400, 300, 150, 227, g_bufdc, 150, 0, SRCAND);
//BitBlt(g_mdc, 400, 300, 150, 227, g_bufdc, 0, 0, SRCPAINT);
//顯示血量
swprintf_s(str, L"%d / %d", Hero.NowHp, Hero.MaxHp);
SetTextColor(g_mdc, RGB(255, 10, 10));
TextOut(g_mdc, 436, 500, str, wcslen(str));
//顯示魔法值
swprintf_s(str, L"%d / %d", Hero.NowMp, Hero.MaxMp);
SetTextColor(g_mdc, RGB(10, 10, 255));
TextOut(g_mdc, 450, 515, str, wcslen(str));
g_Hnum ;
if (g_Hnum == 14)
g_Hnum = 0;
}
//判斷遊戲是否結束
if (g_bGameOver)
{
if (Hero.NowHp <= 0) //玩家陣亡,就貼出“GameOver”圖片
{
SelectObject(g_bufdc, g_hGameOver);
BitBlt(g_mdc, 120, 50, 543, 396, g_bufdc, 543, 0, SRCAND);
BitBlt(g_mdc, 120, 50, 543, 396, g_bufdc, 0, 0, SRCPAINT);
}
else //怪物陣亡,就貼出“勝利”圖片
{
SelectObject(g_bufdc, g_hVictory);
TransparentBlt(g_mdc, 240, 195, 294, 147, g_bufdc, 0, 0, 294, 147, RGB(0, 0, 0));//透明色為RGB(0,0,0)
}
}
//如果遊戲沒結束,且為玩家可攻擊狀态,便依次貼上技能圖标
else if (!g_bCanAttack)//貼上技能按鈕
{
SelectObject(g_bufdc, g_hSkillButton1);
BitBlt(g_mdc, 590, 200, 40, 40, g_bufdc, 0, 0, SRCCOPY);
SelectObject(g_bufdc, g_hSkillButton2);
BitBlt(g_mdc, 590, 250, 40, 40, g_bufdc, 0, 0, SRCCOPY);
SelectObject(g_bufdc, g_hSkillButton3);
BitBlt(g_mdc, 590, 300, 40, 40, g_bufdc, 0, 0, SRCCOPY);
SelectObject(g_bufdc, g_hSkillButton4);
BitBlt(g_mdc, 590, 350, 40, 40, g_bufdc, 0, 0, SRCCOPY);
}
//遊戲沒結束,且為玩家不可攻擊狀态,便開始接下來的繪圖
else
{
g_iFrameNum ;
//想要學習C/C 或者對這方面感興趣可以加群:558502932,大家一起學習交流。
//第5~10個畫面時顯示玩家攻擊效果圖
if (g_iFrameNum >= 5 && g_iFrameNum <= 10)
{
//第5個畫面時根據之前的輸入計算出遊戲邏輯并進行消息顯示
if (g_iFrameNum == 5)
{
HeroAction_Logic();
Die_Check(Boss.NowHp, false);
}
//根據人物的動作類型進行相應貼圖
HeroAction_Paint();
}
//第15個畫面時判斷怪物進行哪項動作
if (g_iFrameNum == 15)
{
BossAction_Logic();
}
//第26~30個畫面時顯示怪物攻擊圖标
if (g_iFrameNum >= 26 && g_iFrameNum <= 30)
{
BossAction_Paint();
}
if (g_iFrameNum == 30)//回合結束
{
g_bCanAttack = false;
g_iFrameNum = 0;
//每回合的魔法自然恢複,6點固定值加上0到智力值之間的一個随機值的三倍
if (!g_bGameOver)
{
int MpRecover = 2 * (rand() % Hero.Intelligence) 6;
Hero.NowMp = MpRecover;
if (Hero.NowMp >= Hero.MaxMp)
{
Hero.NowMp = Hero.MaxMp;
}
swprintf_s(str, L"回合結束,自動恢複了【%d】點魔法值", MpRecover);
Message_Insert(str);
}
}
}
//将mdc中的全部内容貼到hdc中
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
g_tPre = GetTickCount(); //記錄此次繪圖時間
}
以上,就是今天的遊戲内容核心的全部内容辣!!希望能對你們有所幫助。不喜勿噴
想要學習C/C 或者正在學習C/C 可以加群:558502932,群内有大量C/C 學習資料,大家一起學習交流咯!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!