1. 程式人生 > >Java實現貪吃蛇小遊戲(附完整原始碼)

Java實現貪吃蛇小遊戲(附完整原始碼)


今天我就從零開始來完成這個小遊戲,完成的方式也是一步一步的新增功能這樣的方式來實現。

第一步完成的功能:寫一個介面

大家見到的貪吃蛇小遊戲,介面肯定是少不了的。因此,第一步就是寫一個小介面。

實現程式碼如下:

第二步完成的功能:在介面上畫成一格一格的

我們見過的貪吃蛇遊戲,是有一個格子一個格子構成,然後蛇在這個裡面運動。

重寫paint方法,單元格就是橫著畫幾條線豎著畫幾條線即可。

程式碼如下:

效果如下:

第三步完成的功能:建立另外的執行緒來控制重畫

由於,蛇的運動就是改變蛇所在的位置,然後進行重畫,就是我們所看到的運動。因此,在這裡,我們單獨用

一個執行緒來控制重畫。

1、新建一個MyPaintThread類,實現了Runnable介面

2、在SnakeFrame的launchFrame方法中新增程式碼:

new Thread(new MyPaintThread()).start();即可。

完成功能:利用雙緩衝來解決閃爍的問題

 

第四步完成的功能:在介面上畫一個蛇出來

貪吃蛇遊戲中的蛇就是用一系列的點來表示,這裡我們來模擬一個連結串列。連結串列上的每個元素代表一個節點。

首先,我們先新建一個Node類來表示構成蛇的節點,用面向物件的思想,發現,這個類應該有如下的屬性和方法:

1、位置

2、大小,即長度、寬度

3、方向

4、構造方法

5、draw方法

Node類的程式碼如下:

 

irection是一個enum,具體如下:

而在Snake類中,用面向物件的思維,可以發現,Snake類中應該有如下的屬性和方法

1、頭結點

2、尾結點

3、建構函式

3、draw方法

具體程式碼如下:

在SnakeFrame類中new一個Snake物件,然後呼叫Snake物件的draw方法即可。

效果如下:

第五步完成的功能:通過鍵盤控制蛇的上下左右移動

首先想到的是這樣:在Snake類中新增一個keyPressed方法,然後在SnakeFrame的鍵盤事件中呼叫Snake物件的keyPressed方法。

注意:蛇的移動是通過在頭部新增一個單元格,在尾部刪除一個單元格這樣的思想來實現。

具體如下:

Snake類中新增一個keyPressed方法,主要是根據鍵盤的上下左右鍵來確定蛇的頭結點的方向,然後move方法再根據頭結點的方向來在頭部新增一個單元格。

這樣就實現了通過鍵盤來實現蛇的移動。

完成的功能:蛇吃蛋

 

首先我們新建一個蛋Egg的類。

類的屬性和方法有:

1、位置、大小

2、構造方法

3、draw方法

4、getRect方法:用於碰撞檢測

5、reAppear方法:用於重新產生蛋的方法

程式碼如下:

蛇吃蛋,怎麼樣才能判斷蛇吃到蛋了呢,這就需要用到碰撞檢測了。

這裡我們在Snake類中新增一個eatEgg方法。當蛇吃到蛋之後,就需要將蛇的長度+1,這裡處理的是在蛇的頭部新增一個節點,當蛋被吃掉之後,就需要再重新隨機產生一個蛋。

程式碼如下:

publicRectanglegetRect(){

returnnewRectangle(head.col*BLOCK_WIDTH, head.row*BLOCK_HEIGHT, BLOCK_WIDTH, BLOCK_HEIGHT);    }

以上就完成了蛇吃蛋的功能。

完成的功能:新增邊界處理

 

在我們熟悉的貪吃蛇遊戲中,我們一般都知道,當蛇撞到牆或者是撞到自己身體的某一部分,則遊戲就結束。下面我們就來實現這一功能。

在Snake類中,新增checkDead方法

如果蛇撞牆或是撞到自己本身的某一個部分。則呼叫SnakeFrame類中的gameOver()方法來進行一定的處理。

本遊戲的處理方法為:通過設定一個boolean 變數,來停止遊戲並提示相關資訊。

具體程式碼如下:

以上就完成了蛇是否撞牆或是撞到自身一部分的功能。

小結

以上基本上實現了貪吃蛇的基本功能。剩下的一些功能不再介紹,例如:新增得分記錄、通過鍵盤某按鍵來控制遊戲的停止、重新開始、再來一局等。

以上的功能雖然沒有介紹,但是在程式碼中,我有實現這些相應的功能。

完整程式碼可以在這裡獲取:https://github.com/wojiushimogui/Snake

擴充套件閱讀

微信掃碼登入實戰(附程式碼)

乾貨 | 京東購物車的 Java 架構實現及原理!

Spring MVC+Spring+Mybatis實現支付寶支付功能(圖文詳解)

來源:https://www.jianshu.com/p/e7d72be38bc4

微信公眾號:javafirst

掃碼關注免費獲取更多資源