貪吃蛇的演算法分析(4) (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
James @
WormPit類
WormPit類中包括了Worm和WormFood。貪吃蛇將會在畫面中移動尋找食物。如果它吃到食物它將會長一格。如果它碰到邊界或者吃到自己將Game Over。
下面介紹幾個重要的:
l private void paintPitContents(Graphics g)
重繪螢幕上的所有元素
// 貪吃蛇的狀態
myWorm.update(g);
// 頭部的位置和食物的位置重合就吃到食物
if (myFood.isAt(myWorm.getX(), myWorm.getY())) {
myWorm.eat();
re += level;
foodEaten++;
if (foodEaten > (level << 1)) {
/* 增加遊戲難度 */
forceRedraw = true;
foodEaten = 0;
level++;
if (tone != null) {
try {
tonePlayer.setMediaTime(0);
tonePlayer.start();
} catch (MediaException me) { } }
} else {
if (audioPlayer != null) {
try {
Manager.playTone(69, 50, 100); // Play audio
} catch (MediaException me) { } } }
g.setColor(WormPit.ERASE_COLOUR);
// 填充長方形(三個字的寬度)
g.fillRect((width - (SCORE_CHAR_WIDTH * 3))-START_POS,
height-START_POS,
(SCORE_CHAR_WIDTH * 3),
SCORE_CHAR_HEIGHT);
g.setColor(WormPit.DRAW_COLOUR);
// 顯示新的分數
g.drawString("" + score,
width - (SCORE_CHAR_WIDTH * 3) - START_POS,
height - START_POS, Graphics.TOP|Graphics.LEFT);
// 重新生成食物
myFood.regenerate();
int x = myFood.getX();
int y = myFood.getY();
while (myWorm.contains(x, y)) {
// 如果食物和貪吃蛇的身體重複就重新生成
myFood.regenerate();
x = myFood.getX(); y = myFood.getY(); } }
// 畫出食物
myFood.paint(g);
} catch (WormException se) { gameOver = true; }
l public void run()
主迴圈體:
while (!gameDestroyed) { // 遊戲不終止就一直迴圈
try {
synchronized (myWorm) { // 多執行緒中要進行同步
// 如果遊戲結束
if (gameOver) {
if (WormScore.getHighScore(level) < score) {
// 把最高分儲存
WormScore.setHighScore(level, score, "me"); }
if ((audioPlayer != null) &&
(audioPlayer.getState() == Player.STARTED)) {
try {
audioPlayer.stop();
Manager.playTone(60, 400, 100);
} catch (Exception ex) { } }
// 重繪
repaint();
// 遊戲結束時等待重新開始
myWorm.wait();
} else if (gamePaused) {
//重繪
repaint();
// 遊戲暫停時等待使用者重新開始
myWorm.wait();
} else {
// 遊戲繼續
myWorm.moveOnUpdate();
repaint();
// 這裡的等待時間決定了遊戲難度!!!
myWorm.wait(DEFAULT_WAIT-(level*40));
}
}
} catch (.lang.InterruptedException ie) {
}
}
關於作者:
沈晨,高階員,SCJP
to:JinaShen@BenQ.com">JinaShen@BenQ.com
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982174/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 貪吃蛇
- 04 貪吃蛇
- 貪吃蛇jsJS
- 溫習資料演算法—貪吃蛇演算法
- 《貪吃蛇巴士》:《貪吃蛇》和《瘋狂計程車》的「完美結晶」
- python實現貪吃蛇Python
- 貪吃蛇c原始碼原始碼
- Java實現貪吃蛇Java
- Python:遊戲:貪吃蛇Python遊戲
- Python3 貪吃蛇Python
- Python實現貪吃蛇大作戰Python
- OpenGL實現貪吃蛇程式碼
- [譯] RxJS 遊戲之貪吃蛇JS遊戲
- 貪吃蛇完整版小案例
- C語言貪吃蛇原始碼C語言原始碼
- C語言實現桌面貪吃蛇C語言
- pygame試水,寫一個貪吃蛇GAM
- 用 Python 寫個貪吃蛇,保姆級教程!Python
- 貪吃蛇大作戰JavaFx版完整原始碼Java原始碼
- 自動玩貪吃蛇的小白痴機器人機器人
- Android-貪吃蛇小遊戲-分析與實現-Kotlin語言描述Android遊戲Kotlin
- .NET分散式Orleans - 9 - 貪吃蛇專案演示分散式
- 【Python】 Python小遊戲-貪吃蛇大冒險Python遊戲
- STM32最小系統板OLED貪吃蛇
- 爽!用golang 手擼了個簡單的貪吃蛇Golang
- C語言小遊戲------貪吃蛇----小白專用C語言遊戲
- 開發Windows貪吃蛇遊戲——(一)前期準備Windows遊戲
- GUI 基於Swing製作貪吃蛇小遊戲GUI遊戲
- h5+js實現單機版貪吃蛇H5JS
- js+jquery實現貪吃蛇經典小遊戲JSjQuery遊戲
- JavaScript-開發一個簡單的貪吃蛇小遊戲JavaScript遊戲
- c/c++實現簡單的貪吃蛇視覺化遊戲C++視覺化遊戲
- 利用python實現簡易版的貪吃蛇遊戲(面向python小白)Python遊戲
- vue3 自定義渲染器 + canvas 寫一個《貪吃蛇?》VueCanvas
- (完整原始碼)貪吃蛇小遊戲——HTML+CSS+JavaScript實現原始碼遊戲HTMLCSSJavaScript
- .NET分散式Orleans - 8 - 貪吃蛇專案實戰(準備階段)分散式
- 100行Python程式碼實現貪吃蛇小遊戲(超詳細)Python遊戲
- 從零開始學 Web 之 JavaScript 高階(一)原型,貪吃蛇案WebJavaScript原型
- C++自定義貪吃蛇Snake類一系列問題的解決C++