Beginning Android Games 2 nd Edition(19)ゲームWorld類を読む
3260 ワード
このクラスの機能は主に以下のとおりです.
1.食いしん坊ヘビの実例を追跡し、「汚れ」の実例を生成し、ゲームの世界に「汚れ」が1つしか存在しないことを保証する
2.時間軸を基準として、貪食ヘビを更新する方法を提供する(0.5秒ごとにセルを移動する距離)
3.ゲームのスコアを追跡し、「汚れ」の10倍を食べる
4.「汚れ」を1つ食べるごとに、ヘビの移動速度を増やし、ゲームの挑戦性を高める
5.食いしん坊ヘビが生きているかどうかを追跡し、ゲームが終わるべきかどうかを判断する
6.ヘビを食いしばって「汚れ」を食べた後、新しい「汚れ」を生成する
1.食いしん坊ヘビの実例を追跡し、「汚れ」の実例を生成し、ゲームの世界に「汚れ」が1つしか存在しないことを保証する
2.時間軸を基準として、貪食ヘビを更新する方法を提供する(0.5秒ごとにセルを移動する距離)
3.ゲームのスコアを追跡し、「汚れ」の10倍を食べる
4.「汚れ」を1つ食べるごとに、ヘビの移動速度を増やし、ゲームの挑戦性を高める
5.食いしん坊ヘビが生きているかどうかを追跡し、ゲームが終わるべきかどうかを判断する
6.ヘビを食いしばって「汚れ」を食べた後、新しい「汚れ」を生成する
package com.badlogic.androidgames.mrnom;
import java.util.Random;
public class World {
static final int WORLD_WIDTH = 10;
static final int WORLD_HEIGHT = 13;
static final int SCORE_INCREMENT = 10;
static final float TICK_INITIAL = 0.5f;
static final float TICK_DECREMENT = 0.05f;
public Snake snake;
public Stain stain;
public boolean gameOver = false;;
public int score = 0;
//
boolean fields[][] = new boolean[WORLD_WIDTH][WORLD_HEIGHT];
Random random = new Random();
float tickTime = 0;
float tick = TICK_INITIAL;
// ,
public World() {
snake = new Snake();
placeStain();
}
//
private void placeStain() {
// false
for (int x = 0; x < WORLD_WIDTH; x++) {
for (int y = 0; y < WORLD_HEIGHT; y++) {
fields[x][y] = false;
}
}
//
int len = snake.parts.size();
// true
for (int i = 0; i < len; i++) {
SnakePart part = snake.parts.get(i);
fields[part.x][part.y] = true;
}
//
int stainX = random.nextInt(WORLD_WIDTH);
int stainY = random.nextInt(WORLD_HEIGHT);
// ( false )
while (true) {
if (fields[stainX][stainY] == false)
break;
stainX += 1;
//x,y , 0
if (stainX >= WORLD_WIDTH) {
stainX = 0;
stainY += 1;
if (stainY >= WORLD_HEIGHT) {
stainY = 0;
}
}
}
//
stain = new Stain(stainX, stainY, random.nextInt(3));
}
public void update(float deltaTime) {
if (gameOver)
return;
tickTime += deltaTime;
while (tickTime > tick) {
tickTime -= tick;
snake.advance();
// ,
if (snake.checkBitten()) {
gameOver = true;
return;
}
SnakePart head = snake.parts.get(0);
// ,
if (head.x == stain.x && head.y == stain.y) {
// , 10
score += SCORE_INCREMENT;
//eat
snake.eat();
// , ,
if (snake.parts.size() == WORLD_WIDTH * WORLD_HEIGHT) {
gameOver = true;
return;
} else {
placeStain();
}
// 100 , 0.05 ,TICK_DECREMENT ,tick
if (score % 100 == 0 && tick - TICK_DECREMENT > 0) {
tick -= TICK_DECREMENT;
}
}
}
}
}