當前位置: 華文問答 > 遊戲

5.3 作業 Qt貪吃蛇遊戲

2024-02-24遊戲

前驅知識

1.3.6自訂視窗類(繼承QWidget),自訂訊號槽 QMessageBox

5.1.1mousePressEvent 滑鼠點選事件:顯示滑鼠點選位置(完整範例)

5.2.1.1Qt滑鼠點選事件處理:按Escape鍵結束程式

6.1使用QPixmap顯示圖片

遊戲效果

開始界面

玩的過程中

搶金幣

遊戲結束

到左邊界之後還要往左走,出界了,遊戲結束

遊戲功能

程式執行之後,使用者按鍵盤上的上下左右鍵,來控制貪吃蛇的頭部往指定方向移動一個格子。

如果移動的目的地有墻壁,或者蛇自己的身體,遊戲結束。

如果移動的目的地有金幣(食物),蛇就會吃掉這個食物,自己的身體就會變長。

實作邏輯

1 渲染時圖片大小

每個圖片大小在資源裏就已經確定了,可以透過介面獲得。

按照圖片實際大小繪制即可。

2 行數和列數的確定

具體一行幾個圖片,在底層類Snake類的介面裏有。可以獲得。

底層介面獲得的行數列數最終來自於配置檔。

也就是界面最終是由配置檔決定大小的。

即,遊戲的尺寸由data.txt檔裏的配置決定。

3 界面繪制邏輯

假設需要繪制6x7的界面。

那就需要用雙重迴圈繪制6x7=42個圖片資源。

每個圖片資源可以是:1)草地,2)食物,3)蛇頭,4)蛇身)。

具體當然位置是什麽,需要根據底層介面獲得。

一旦確定了當然位置是哪種型別的數據,就會在if else 對應分支裏載入一次qrc中的一個對應的圖片資源。

載入圖片資源可以得到一個QPixmap對物件。

QPixmap物件可以被QPainter繪制到界面上(x, y, width, hight, pixmap)。

這種繪制方式比較低效率,因為每次界面變化都要把所有圖片資源重新讀取(load)一遍。

好在我們無需考慮太多,這樣可以讓程式碼最簡單。同時,使用者也感知不到這種時間上的延遲。

C++的理念就是:不為不需要的東西付出代價。

繪制邏輯在ShowGame函式裏。

4 和控制台貪吃蛇作業的關系

本作業的實作主要是給上面精簡教程裏的貪吃蛇增加一個QT的界面,底層程式碼不變。

而且,本作業主要考察QT的知識,所以裏面貪吃蛇的底層程式碼給了完整的程式碼,無需你再去實作一次之前的貪吃蛇的控制台版本的程式碼。

但是你還是需要理解底層貪吃蛇程式碼的邏輯的。這部份需要你自己去理解。如果之前的教程你都刷過,這部份應該是輕車熟路,一看就會了。

開發環境

本文的計畫為CMake計畫,也可以使用VS作為開發環境,但是我建議你直接使用QtCreator作為開發環境。

因為以往教程都是使用的QtCreator作為開發環境,尤其是往qrc添加資源的時候,QtCreator有直接的界面支持。

啟動程式碼

QSnake · CalmReason/learn-qt-with-code - 碼雲 - 開源中國 (gitee.com)

祝你順利!

個人化

建議每個同學使用自己的圖片素材,以互相區分!

學生完成情況展示