貪吃蛇的演算法分析(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 貪吃蛇的演算法分析(1) (轉)演算法
- 貪吃蛇的演算法分析(3) (轉)演算法
- 貪吃蛇的演算法分析(2) (轉)演算法
- 貪吃蛇源程式 (轉)
- Shell寫的貪吃蛇遊戲(轉)遊戲
- 貪吃蛇jsJS
- 04 貪吃蛇
- 初試javascript :貪吃蛇啊 (轉)JavaScript
- 溫習資料演算法—貪吃蛇演算法
- Python:遊戲:貪吃蛇Python遊戲
- Java實現貪吃蛇Java
- 貪吃蛇c原始碼原始碼
- Python3 貪吃蛇Python
- python實現貪吃蛇Python
- jQuery 實現貪吃蛇遊戲jQuery遊戲
- C#貪吃蛇(WPF版)C#
- [譯] RxJS 遊戲之貪吃蛇JS遊戲
- OpenGL實現貪吃蛇程式碼
- C語言貪吃蛇原始碼C語言原始碼
- [原生JS][程式導向]貪吃蛇JS
- C語言實現桌面貪吃蛇C語言
- Python實現貪吃蛇大作戰Python
- js貪吃蛇遊戲程式碼例項JS遊戲
- canvas貪吃蛇遊戲程式碼例項Canvas遊戲
- 多執行緒的Python 教程--“貪吃蛇”執行緒Python
- 貪吃蛇大作戰JavaFx版完整原始碼Java原始碼
- javascript貪吃蛇小遊戲程式碼例項JavaScript遊戲
- html畫布製作貪吃蛇小遊戲HTML遊戲
- H5遊戲開發:貪吃蛇H5遊戲開發
- 自動玩貪吃蛇的小白痴機器人機器人
- canvas實現的貪吃蛇遊戲程式碼例項Canvas遊戲
- 基於51微控制器的貪吃蛇遊戲遊戲
- 用 Python 寫個貪吃蛇,保姆級教程!Python
- 開發Windows貪吃蛇遊戲——(一)前期準備Windows遊戲
- STM32最小系統板OLED貪吃蛇
- C語言小遊戲------貪吃蛇----小白專用C語言遊戲
- 手把手教你寫Android 貪吃蛇 遊戲Android遊戲
- Ubuntu下C語言實現貪吃蛇遊戲UbuntuC語言遊戲