學完C語言一直想做個遊戲,首嘗失敗後參考優秀源碼重寫,先實現核心控制模塊——一個可在窗口自由移動繪圖的「畫圖程序」,為完整貪吃蛇奠基。開發環境:Windows + EasyX圖形庫。
貪吃蛇核心模塊:
本節先實現控制+移動,構建畫圖原型。
屏幕座標原點(0,0)在左上角,X向右增,Y向下增。定義方向向量 Pos array:
| 按鍵 | 方向 | 向量 |
|---|---|---|
| W | 上 | (0, -1) |
| S | 下 | (0, 1) |
| A | 左 | (-1, 0) |
| D | 右 | (1, 0) |
command()void command() {
if (_kbhit()) { // 檢測鍵盤消息,非阻塞
switch (_getch()) { // 直接讀取字符,無需回車
case 'a': array.x = -1; array.y = 0; break;
case 'd': array.x = 1; array.y = 0; break;
case 'w': array.x = 0; array.y = -1; break;
case 's': array.x = 0; array.y = 1; break;
}
}
}
關鍵點:用 _kbhit() + _getch()(conio.h)實現非阻塞即時響應,getchar() 需回車不適合遊戲。
move()void move() {
snake.x += array.x * 10; // 每步10像素
snake.y += array.y * 10;
setcolor(BLUE);
rectangle(snake.x-5, snake.y-5, snake.x+5, snake.y+5); // 畫10x10方塊
}
此版本蛇身僅一節,無軌跡清除,移動留下痕跡,形成畫圖效果。
int main() {
snake.x = 300; snake.y = 300; // 初始位置
array.x = 1; array.y = 0; // 初始向右
initgraph(640, 480); // 初始化圖形窗口
while (true) {
command();
move();
Sleep(100); // 控制幀率 ~10FPS
}
return 0;
}
完整代碼已整合(含結構體定義、全局變量、函數、主循環),編譯運行後可在640x480窗口用WASD控制藍色方塊移動繪圖,無邊界限制可跑出屏幕。這雖是簡陋原型,但驗證了非阻塞鍵盤輸入、向量移動、幀率控制、EasyX繪圖核心鏈路。
敬請期待《貪吃蛇C語言實戰(下):從畫圖程序到完整遊戲》!