這個練習仍然是3.1鍵盤訊息和3.3定時器訊息的組合;所謂貪吃蛇半部指的是我們只做一半,因為完整的需要比較多的時間,至少是個把小時,我們的基礎練習盡量在10~20分鐘內能夠完成,目前還不適合涉及太多的瑣碎的地方。
練習主要分2大部分來完成,具體步驟如下:
1. 完成乙個字元的定時移動,鍵盤控制方向:
1.1 定義全域性變數 ,自定義格點與pix之間的比例關係,例如 20pix為1個格點,設定遊戲區範圍是20*16格點,從(10,10)開始,則相對座標為 (10+20* x)
1.2 處理wm_paint訊息,在其中先畫乙個邊框(畫筆hpen的使用練習),再畫出單個字元(在遊戲區的中心位置)
1.3 在wm_create中,開啟定時器settimer
1.4 處理wm_timer訊息,根據當前x向和y向及正負,使用字元移動乙個格點
1.5 處理鍵盤訊息,實現根據上下左右按鍵改變運動方向
int gx = 10, gy = 8; //中心位置
int vx = 1, vy = 0; //預設向右移動
case wm_paint:
break;
case wm_timer:
break;
case wm_keydown:
invalidaterect(hwnd, null, true);
} break;
2. 完成多個字元(組成一條蛇)的移動,鍵盤控制方向:
2.1 單個字元的鍵盤響應移動已經奠定了基礎,在此基礎上再進一步就需要把蛇的身體(幾個字元)造出來,如果是想練習鍊錶就用鍊錶做,需要練習陣列就用陣列做,練習c++類就用class來做,這次的練習我們來建乙個snake的類,成員變數為節數,並用vector相當於建立2個動態陣列,分別存放每個節點的x和y的格點值;
2.2 在主函式之前,用snake(i) 建立物件並構造有i個字元的蛇;
2.3 在snake類,建乙個showsnake()的成員函式,傳遞hdc即可
2.4 在wm_paint處理中,將textout單個字元改換成呼叫showsnake()進行蛇身各節點的繪製
2.5 在snake類,建乙個movesnake()的成員函式,由於在這個函式將在定時器訊息中使用,需要把hdc宣告為全域性
2.6 在wm_timer中,呼叫movesnake()函式,實現整條蛇的移動
class snake
; snake(int num)//構造蛇各節 }
};
snake s(8);
void showsnake(hdc hdc)
}
case wm_paint:
void movesnake()
vecx[0] = vecx[0] + vx;
vecy[0] = vecy[0] + vy;
}
case wm_timer:
break;
至此,貪吃蛇的建立、移動以及根據按鍵改變方向的功能就完成了,當然完整的程式後面還有碰撞檢測(包含碰邊界死亡、碰自身死亡、碰豆子增加一節...)以及隨機放豆子等功能就不在這裡練習了。
從3.5,3.6兩節練習可以看到,定時器+鍵盤的靈活搭配,已經可以製作簡單的可玩耍的遊戲了,這些立竿見影的基本功,還不多多練習?
win32強化練習4 0 資源相關練習簡介
第4部分,我們對資源進行強化練習!資源簡單的講有abcdimst這幾類,這當然不包括全部,其中 a accelerator 快捷鍵 b bitmap 位圖 c cursor 游標 d dialog 對話方塊 i icon 圖示 m menu 選單 s stringtable 字串表 t 工具欄 我們...
win32強化練習0 1 開發環境搭建
所謂win32,即32位的 windows 作業系統下 windows 早期是16 位的,稱為 win16 而 32位的就稱為 win32 win32 向下相容 win16。而所謂 applicationprogramminginte ce api 即應用程式介面 api是作業系統提供的介面,舉例來...
win32強化練習4 7 快速建立TreeView
這一節的練習就是快速建立乙個treevew,我們分成2步來完成,第1步是用win32 sdk,第2步是自己封裝類來簡化操作。首先是win32 sdk建立乙個treeview 1.包含標頭檔案 include 2.宣告hwnd htreeview後,使用createwindow建立乙個treeview...