2020-07-28
這章主要描述下飛機大戰的整體架構。這章開始,內容將基於我的 v2.0.0
這裡所闡述的過程是通用的,是和老師提供的模板程式一樣的,但是**會有些許不同。
/*planegame.h line16*/
;/*planegame.cpp line67*/
隨後從cview派生cplanegameview,並呼叫oninitialupdate()方法:
/*planegameview.cpp line125*/
void cplanegameview::oninitialupdate()
可以看到,我們在這裡呼叫了initgame()
函式。你會發現正是這個函式,建立了很多遊戲所需的物件,並啟動了遊戲。
mfc程式是由事件驅動的。當乙個事件產生,程式將呼叫相對應的事件處理函式;而沒有事件產生時,它將不會做任何額外的事情。我們知道,飛機大戰需要不斷自動移動飛機和子彈,也就是說我們需要不斷產生乙個事件,使畫面重新整理、物件移動。所以我們需要啟動乙個定時器,不斷產生乙個 wm_timer 事件,並使它不斷呼叫ontimer()
函式。
/*planegameview.cpp line795*/
//它本來在initgame()中,需要實現其他功能而移動了位置
settimer(1, 30, null);
/*planegameview.cpp line710*/
void cplanegameview::ontimer(uint_ptr nidevent)
updateframe()
用於重新整理影象,而ai()
用於響應鍵盤事件和處理各種亂七八糟的事情。整個程式在定時器的作用下不斷重複呼叫這兩個函式,使整個遊戲執行起來,直到遊戲結束,程式被退出。退出時會產生 wm_destroy 事件,並呼叫ondestry()
函式:
/*planegameview.cpp line719*/
void cplanegameview::ondestroy()
/*planegameview.cpp line132*/
void cplanegameview::stopgame()
在initgame()
函式中被建立的物件都將在stopgame()
函式中被釋放。這裡需要注意的是,delete
乙個空指標並不會產生錯誤。通讀程式後可以發現, m_pme 和 m_pfriend 大部分時候都被delete
了兩遍,因此在第一次delete
時,我們需要將它置為null
,否則會成為野指標並在第二次delete
時產生段錯誤。
由於我的修改,整個程式的執行和老師提供的模板程式有幾點不同。
為了在遊戲開始之前有乙個介面,供玩家選擇模式,我為 wm_create 事件新增了事件處理函式。這主要是指導程式產生視窗用的,動態建立了按鈕。**比較長便不全貼上:
/*planegameview.cpp line726*/
int cplanegameview::oncreate(lpcreatestruct lpcreatestruct)
通過訊息對映(作用是將各個控制項產生的事件和與之對應的訊息處理函式繫結),對映到onbuttonclick()
函式,對不同的模式初始化一些變數,並釋放這些不再需要的按鈕:
/*planegameview.cpp line751*/
void cplanegameview::onbuttonclick(uint uid)
default:
break;
} //啟動遊戲
settimer(1, 30, null);
delete button1;
delete button2;
delete button3;
delete button4;
button1 = button2 = button3 = button4 = null;
}
容易發現,我是在按鈕被按下後再啟動遊戲的。
我們能啟動乙個定時器,當然也能停止乙個計時器。killtimer()
就是用來停止乙個計時器。settimer(1, 30, null);
中,第乙個引數是定時器的標識,我們用killtimer(《標識》)
即可停止這個計時器:
/*planegameview.cpp line804*/
void cplanegameview::pausegame()
pausedlg
是乙個對話方塊,提示遊戲已經暫停是否繼續。這裡需要注意的是,settimer()
並不是任何地方都可以呼叫的,它更像是cplanegameview
的乙個方法。所以我在某個合適的時候儲存了 cview 物件的指標,通過指標來呼叫settimer()
以實現遊戲的繼續。
本章完by sdust weilinfox
前章 續章
小學期實踐1
這次的小學期是軟體工程實踐。這三天進行了各種軟體的安裝和環境配置,和資料庫的連線以及部分 的編寫。首先安裝了myeclipse,它是一種 整合開發環境 在建立工程後新增了包 主要的內容有這些 還有n icat premium,這是 一款資料庫管理工具 在實踐的時候遇到了一些問題 1.配置tomcat...
小學期 第1天
今日工作 分組,確定所需完成專案 小組名稱 南理第三區交通委 小組成員 廖小姍 組長 學號917106840604 孫 磊 組員 學號914106840128 謝炎成 組員 學號916106840436 專案名稱 高速公路行車安全距離實時測定的輔助駕駛軟體實現 明日計畫 小組明日將合作完成以下幾點 ...
飛機大戰(1) 新增logo和載入動畫
注 以下 都是用scratch 3.0版本編寫 一 背景新增 匯入背景之後,就開始組織 著手編寫 1.在事件裡面,找到小綠旗被點選,再拖出來,放到 介面 2.在運動裡面,找到移到x 0 y 0 ps 這裡背景移到x軸和y軸為0,這樣背景就是居中的 3.在外觀裡面,找到後移 30 層 ps 移30層的...