1. 程式人生 > >C/C++坦克大戰專案

C/C++坦克大戰專案

本次坦克大戰專案已實現的功能

背景音效,動畫介面,各級選單選項,暫停遊戲,重新開始,儲存與讀取遊戲進度。

單人,雙人(闖關模式) (自定義遊戲),雙人聯機模式

每輛坦克獨立的HP,MP,移動速度,攻擊CD,自動回HP,MP,3種不同的炮彈攻擊
針對BOSS的自動尋找玩家並攻擊。使用A星演算法。

各種型別食物:無敵,攻擊翻倍,全屏秒殺,無限子彈,全場冰凍。
各種型別敵人:4種按等級區分的普通敵人,1種終極BOSS敵人
各種型別障礙物:鋼牆,土牆,草叢,河流

自定義編輯地圖,儲存地圖,開啟地圖繼續編輯,使用自定義地圖開始遊戲。

原始碼分享:https://github.com/Mr-Hock/MyTank

在這裡插入圖片描述

座標點類:POINTDATA

除了坦克。
各種障礙物,加成道具(食物),炮彈。
都是由每個獨立的座標點組成的
在這裡插入圖片描述

動態陣列:vector

遊戲的每個圖案都是由座標點構成
所以需要用動態陣列儲存每個類的座標點陣列
本次設計所使用的動態陣列均為全域性範圍
在這裡插入圖片描述

遊戲主要類

坦克類
食物類
子彈類
障礙物類
在這裡插入圖片描述

遊戲擴充套件類

PC坦克控制類
自定義地圖類
TCP通訊類
在這裡插入圖片描述

接收按鍵訊息

使用GetAsyncKeyState函式
取非同步按鍵狀態
在這裡插入圖片描述
在這裡插入圖片描述

選單操作使用滑鼠訊息

在這裡插入圖片描述
在這裡插入圖片描述

闖關模式

迴圈讀取關卡地圖
呼叫StartGame函式開始遊戲
過關後跳出函式讀取下一個地圖
繼續下一關。。。
在這裡插入圖片描述


在這裡插入圖片描述

自定義遊戲

彈出Windows檔案框
GetSaveFileNameA
GetOpenFileNameA
自動識別地圖為單人還是雙人
在這裡插入圖片描述
在這裡插入圖片描述

聯機遊戲模式

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

聯機模式構架

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

玩家A實現

在這裡插入圖片描述

玩家B實現

在這裡插入圖片描述
在這裡插入圖片描述

坦克類

該類定義了坦克的所有屬性
編寫了坦克的所有操作

定義一個坦克類物件就有一部坦克
定義N個就有N部

每部坦克都是一個獨立的物件

電腦的坦克只需要用vector儲存
然後通過遍歷陣列,呼叫不同的操作
即可讓每部坦克擁有不同的行為
在這裡插入圖片描述

自動控制PC坦克類

通過對Vector的遍歷
分別對每部坦克進行操作
生成坦克:
New Tank(x,y,dir,hp,mp…)
Vector.push_back(New Tank)
在這裡插入圖片描述

自動控制PC坦克類

判斷坦克數量是否上限,不滿足則生成新坦克
指定一段時間後自動生成指定型別的坦克

遍歷所有在活動的坦克,指定隨機行為
(改變方向,移動,發不同的炮彈)

判斷坦克是否碰到玩家子彈
(減坦克HP,刪除死亡坦克,
炮彈反擊,觸發自動尋路等)

重新整理所有PC坦克
在這裡插入圖片描述
在這裡插入圖片描述

各種食物型別

加攻擊,坦克類函式內有自身的攻擊力變數
無限子彈,在發炮時判斷狀態,減MP
無敵,碰到電腦子彈判斷狀態是否減HP
冰凍敵人,控制PC坦克類不呼叫移動行為即可
全屏秒殺,將PC坦克清除並加分
在這裡插入圖片描述

炮彈型別

判斷炮彈前面是什麼障礙物
如果是土牆,則擦除這塊土牆。
在這裡插入圖片描述

炮彈移動規則

判斷炮彈當前位置是什麼障礙物
執行對應的操作
炮彈對著發射會抵消
在這裡插入圖片描述

無敵實現方法:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

儲存存檔。

首先儲存資料的數量,再儲存具體的資料
最後寫出檔案。使用GetSaveFileNameA函式
在這裡插入圖片描述
在這裡插入圖片描述

讀取存檔

初始化所有動態陣列
將存檔按指定的順序讀入
加入到動態陣列內
在這裡插入圖片描述

首先讀出陣列的數量,再接著往後讀取陣列的資料
讀取後存入申請的臨時空間,並將m_data重新賦值
因為讀出來的是上一次字串地址,並不是圖案
在這裡插入圖片描述

新建自定義地圖

主要使用檢測滑鼠函式完成繪畫
檢測滑鼠點選的位置,將設計畫面分為3個框架
繪圖區,工具介面區,儲存與退出區

在這裡插入圖片描述
在這裡插入圖片描述

再次編輯自定義地圖

在這裡插入圖片描述
在這裡插入圖片描述

儲存自定義地圖

首先將Map類所有畫出的座標與圖案進行判斷歸類
分別壓入不同型別的動態陣列內
然後再按動態陣列型別進行儲存
先儲存陣列元素的數量,再儲存陣列內的資料
最後以二進位制的形式寫到檔案
在這裡插入圖片描述
在這裡插入圖片描述