SDUST 小學期飛機大戰簡述 1大體的框架

2022-06-05 17:42:09 字數 2679 閱讀 3158

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層的...