遊戲介面基本佈局
貪吃蛇是基於JFrame的一款小遊戲。它主要有兩部分組成,一個是顯示區域,一個是按鈕區域。這兩個區域都用JPanel來實現。
首先需要建立一個基於JFrame的類,例如建立一個MyFrame,讓其繼承於JFrame。
然後建立一個顯示區域的類MyPanel,一個按鈕區域的類Button,當然了這兩個類都基於JPanel。
第三步:在MyFrame類中例項化兩個JPanel類。並在MyFrame構造方法中設定窗體的logo、窗體的標題、窗體初始位置、窗體的大小、窗體的背景顏色、窗體的關閉方式等。
第四步:繼續清空MyFrame的佈局管理器、設定窗體為固定大小不可更改、新增兩個區域並顯示、設定鍵盤監聽焦點(控制貪吃蛇的移動)等。
遊戲顯示區域
MyPanle實現思路:
- 在構造方法中註冊鍵盤監聽事件、設定容器的座標及大小、設定容器的背景顏色。如果想要新增背景圖片,可以重寫paintComponent方法。
- 建立一個食物類Food,建立一個貪吃蛇類Snake,並在MyPanel裡例項化這兩個類。
- 在MyPanel裡建立一個貪吃蛇的執行緒,並在構造方法裡啟動該執行緒。
- 重寫paint方法,繪製容器。並設定相應的顏色、畫線、呼叫貪吃蛇的移動方法和繪畫方法、呼叫食物的繪畫方法。
配置檔案類:
- 定義佈局所需要的行和列,定義上下左右四個方向
- 定義死亡檢測標識、定義遊戲狀態檢測標識。
貪吃蛇執行緒類:
- 重寫執行緒啟動的方法
- 在啟動方法裡時刻檢測貪吃蛇是否死亡,如果死亡則彈出“遊戲結束”的對話方塊。
食物類:
- 定義食物的座標。
- 定義食物的繪畫方法
- 當食物被吃掉後,我們需要隨機生成一個位置來展示食物,因此需要一個生成隨機位置的方法repair()
- 定義獲取食物座標的方法。在構造方法裡隨機生成食物的座標
結點類:
蛇有蛇頭和蛇身、蛇尾,我們用節點來實現。
- 建立一個結點類,屬性包括所在行、所在列、上個結點、下個節點、前進方向。
- 在有參構造方法中初始化貪吃蛇的位置資訊,指定貪吃和前進的方向。
- 定義繪畫方法,蛇頭顏色為黃色、其餘為藍色。
貪吃蛇類
- 建立一個貪吃蛇類,屬性包括頭、身、尾、食物。
- 定義有參構造方法,引數為食物。並初始化貪吃蛇的初始座標、以及設定結點之間的關係。
- 定義繪畫方法,遍歷貪吃蛇的每個節點,然後把每個節點繪畫出來。
- 定義獲取貪吃蛇座標的方法,用於獲取貪吃蛇的座標。
- 定義貪吃蛇的移動方法。貪吃蛇怎麼移動?新增蛇頭——去蛇尾——吃食物——死亡檢測
- 定義新增蛇頭的方法,設定一個Node臨時變數。根據前進方向判斷,如何新增蛇頭。
- 定義去除蛇尾的方法,把蛇尾的前一個結點的後指標設定為空,把蛇尾的前一個結點設定為蛇尾即可。
- 定義吃食物的方法,三步走。首先判斷貪吃蛇座標和食物座標是否重合,如果重合就新增蛇頭然後重新佈局食物。
- 定義死亡檢測方法,兩步走。第一步判斷是否越界,第二步判斷頭是否和尾重合。
- 定義鍵盤控制方法。當使用者按下WASD鍵,貪吃蛇才可改變方向移動且不能逆向移動。(比如開始向上移動,我不能直接按S鍵讓它向下移動)。
按鈕區域
- 建立屬性:myPanel、暫停、繼續、重新開始、退出。
- 建立帶引數的構造方法,引數為myPanel.
- 在構造方法中設定初始位置及大小、建立四個按鈕並新增。
- 在構造方法裡註冊按鈕監聽。
- 重寫actionPerformed方法。檢測按下按鈕。
- 如果按下繼續遊戲,那麼需要重寫設定鍵盤監聽焦點
- 如果是重新開始遊戲,那麼需要停止當前執行緒,然後重新生成蛇和食物,並把控制條件還原到初始狀態。最後建立新的執行緒物件並啟動,最後再設定鍵盤監聽焦點。