?? ground.java
字號:
package cn.itcast.snake.entities;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.Random;
import cn.itcast.snake.util.Global;
/**
* 可以叫做地形, 或地面<BR>
* <BR>
* 可以通過setRockColor(), setGriddingColor()方法更改石頭或網格的顏色<BR>
* 通過setDrawGridding() 方法設置是否畫網格<BR>
* <BR>
* 可以覆蓋 drawRock(Graphics, int, int, int, int) 方法以改變石頭的顯示方式<BR>
* <BR>
* 可以通過覆蓋genernateRocks() 方法改變石頭產生的布局<BR>
* 覆蓋此方法時, 請使用addRock(int,int) 方法在指定的坐標添加石頭<BR>
* <BR>
* 這個類提供了兩種石頭的布局<BR>
* 默認是使用第一種, 即一圈石頭<BR>
* 如果想使用第二種, 則應該使用如下代碼:<BR>
* <code><BR>
Ground ground = new Ground();<BR>
// 清空石頭<BR>
ground.init();<BR>
// 使用提供的第二種石頭的布局 <BR>
ground.generateRocks2();<BR>
</code> <BR>
*
* @version 1.0, 01/01/08
*
* @author 湯陽光
*
*/
public class Ground {
/* 存放石頭的二維數組 */
private boolean rocks[][] = new boolean[Global.WIDTH][Global.HEIGHT];
/* 存放getFreePoint()方法生成的不是石頭的隨機的坐標 */
private Point freePoint = new Point();
public static final Color DEFAULT_ROCK_COLOR = new Color(0x666666);
/* 石頭的顏色 */
private Color rockColor = DEFAULT_ROCK_COLOR;
public static final Color DEFAULT_GRIDDING_COLOR = Color.LIGHT_GRAY;
/* 網格的顏色 */
private Color griddingColor = DEFAULT_GRIDDING_COLOR;
private Random random = new Random();
/* 是否畫網格的開關 */
private boolean drawGridding = false;
/**
* 默認的構造器, 將調用 init()方法和 generateRocks() 方法
*/
public Ground() {
init();
}
/**
* 初始化地面(清空石頭)
*/
public void clear() {
for (int x = 0; x < Global.WIDTH; x++)
for (int y = 0; y < Global.HEIGHT; y++)
rocks[x][y] = false;
}
public void init() {
clear();
generateRocks();
}
/**
* 產生石頭, 可以覆蓋這個方法改變石頭在地面上的布局
*/
public void generateRocks() {
for (int x = 0; x < Global.WIDTH; x++)
rocks[x][0] = rocks[x][Global.HEIGHT - 1] = true;
for (int y = 0; y < Global.HEIGHT; y++)
rocks[0][y] = rocks[Global.WIDTH - 1][y] = true;
}
/**
* 提供的第二種默認的石頭布局<BR>
* 用這個可以測試蛇從另一邊出現<BR>
* 使用時先調用init()方法清空石頭, 再調用這個方法產生石頭布局<BR>
* 詳細使用請參見類介紹
*/
public void generateRocks2() {
for (int y = 0; y < 6; y++) {
rocks[0][y] = true;
rocks[Global.WIDTH - 1][y] = true;
rocks[0][Global.HEIGHT - 1 - y] = true;
rocks[Global.WIDTH - 1][Global.HEIGHT - 1 - y] = true;
}
for (int y = 6; y < Global.HEIGHT - 6; y++) {
rocks[6][y] = true;
rocks[Global.WIDTH - 7][y] = true;
}
}
/**
* 添加一塊石頭到指定格子坐標
*
* @param x
* 格子坐標 x
* @param y
* 格子坐標 y
*/
public void addRock(int x, int y) {
rocks[x][y] = true;
}
/**
* 蛇是否吃到了石頭
*
* @param p
* @return
*/
public boolean isSnakeEatRock(Snake snake) {
return rocks[snake.getHead().x][snake.getHead().y];
}
/**
* 隨機生成一個不是石頭的坐標, 用于丟食物
*
* @return
*/
public Point getFreePoint() {
do {
freePoint.x = random.nextInt(Global.WIDTH);
freePoint.y = random.nextInt(Global.HEIGHT);
} while (rocks[freePoint.x][freePoint.y]);
return freePoint;
}
/**
* 得到石頭的顏色
*
* @return
*/
public Color getRockColor() {
return rockColor;
}
/**
* 設置石頭的顏色
*
* @param rockColor
*/
public void setRockColor(Color rockColor) {
this.rockColor = rockColor;
}
/**
* 畫自己, 將調用drawRock(Graphics, int, int, int, int) 方法 和
* drawGridding(Graphics, int, int, int, int) 方法
*
* @param g
*/
public void drawMe(Graphics g) {
for (int x = 0; x < Global.WIDTH; x++)
for (int y = 0; y < Global.HEIGHT; y++) {
/* 畫石頭 */
if (rocks[x][y]) {
g.setColor(rockColor);
drawRock(g, x * Global.CELL_WIDTH, y * Global.CELL_HEIGHT,
Global.CELL_WIDTH, Global.CELL_HEIGHT);
} else if (drawGridding) {
/* 畫網格(如果允許) */
g.setColor(griddingColor);
drawGridding(g, x * Global.CELL_WIDTH, y
* Global.CELL_HEIGHT, Global.CELL_WIDTH,
Global.CELL_HEIGHT);
}
}
}
/**
* 畫一塊石頭, 可以覆蓋這個方法改變石頭的顯示
*
* @param g
* @param x
* 像素坐標 x
* @param y
* 像素坐標 y
* @param width
* 寬度(單位:像素)
* @param height
* 高度(單位:像素)
*/
public void drawRock(Graphics g, int x, int y, int width, int height) {
g.fill3DRect(x, y, width, height, true);
}
/**
* 畫網格, 可以覆蓋這個方法改變網格的顯示
*
* @param g
* @param x
* 像素坐標 x
* @param y
* 像素坐標 y
* @param width
* 寬度(單位:像素)
* @param height
* 高度(單位:像素)
*/
public void drawGridding(Graphics g, int x, int y, int width, int height) {
g.drawRect(x, y, width, height);
}
/**
* 得到網格的顏色
*
* @return
*/
public Color getGriddingColor() {
return griddingColor;
}
/**
* 設置網格的顏色
*
* @param griddingColor
*/
public void setGriddingColor(Color griddingColor) {
this.griddingColor = griddingColor;
}
/**
* 是否畫網格
*
* @return
*/
public boolean isDrawGridding() {
return drawGridding;
}
/**
* 設置是否畫網格
*
* @param drawGridding
*/
public void setDrawGridding(boolean drawGridding) {
this.drawGridding = drawGridding;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -