C++代碼之坦克大戰(2)

編程語言 數據結構 C語言 坦克大戰 IT技術Java交流 2017-05-27

C++代碼之坦克大戰(2)

接上一篇

位置信息數據結構

在遊戲設計過程中,需要記錄大量的位置信息,如果僅僅使用(x,y)座標很容易出錯。這一篇中,我們先定義兩個簡單的數據結構用來保存點和矩形的信息。

在項目中新建Model目錄,創建下面四個文件:

C++代碼之坦克大戰(2)

代碼如下:

Point.h

C++代碼之坦克大戰(2)

C++代碼之坦克大戰(2)

這個頭文件創建了一個Point類,有兩個成員變量m_x,m_y用來記錄一個點的橫、縱座標。一組public方法用來完成給對象賦值和讀取座標值的操作。

這裡我們用到了C++的運算符重載功能,將“=”功能進行重載,方便我們用一個Point對象給另一個Point對象賦值,同時也能夠使我們將Point作為參數進行傳遞。

Point.cpp

C++代碼之坦克大戰(2)

C++代碼之坦克大戰(2)

這個文件中是對Point類的實現,大家一看就明白。

這裡需要強調的是,在類的封裝過程中有一個非常重要的原則是不允許將成員變量用public的方法暴露在外。如果類的外部代碼能夠直接對類成員變量進行修改的話,程序將很不安全。正確的方法是像我們這樣實現一組Get和Set方法進行管理。這樣雖然代碼量多了一些,但對後期維護帶來的幫助是不可估量的。

Rect.h

C++代碼之坦克大戰(2)

C++代碼之坦克大戰(2)

Rect類是用來定義矩形的,它的成員變量是兩個Point對象,分別表示矩形的左上角和右下角。這裡我們強行規定m_startPoint表示左上角,m_endPoint表示右下角。如果創建對象時兩個點順序反了,Check()函數會自動把它們調整過來。

這裡需要注意,GetStartPoint()和GetEndPoint()兩個函數都通過const修飾,表示返回值不能被修改。為什麼要這麼實現呢,因為這個函數的結果將會傳進EasyX接口中,而這些接口大部分都要求參數是const的,如果這裡不做修飾,在傳參時會報錯。

Rect.cpp

C++代碼之坦克大戰(2)

C++代碼之坦克大戰(2)

這個文件中實現了Rect類的成員函數。

下一篇我們接著把坦克升級

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群

639368839,我們一起學C/C++!

相關推薦

推薦中...