Java 坦克大战单机版 源代码
openkk
12年前
玩法:
方向键:控制走动
Ctrl:控制发弹
A:超级子弹
X:八方向发弹
=:添加敌方坦克
F2:重新开始
其他功能:
在头上实时显示血条
吃到血块时能补血
自动积分
敌方坦克过少时自动添加
收获:
系统复习了J2SE的基本上所有内容
对软件工程的理解进一步加深
对面向对象的思想及其优点进一步加深
熟悉了eclipse的使用,包括打包发布以及Doc的生成
源代码:
//TankClient.java package edu.wkx; import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * 坦克客户端主类 * @author Java_Bean 王凯旋 * */ @SuppressWarnings("serial") public class TankClient extends Frame { static final int GAME_WIDTH = 800; static final int GAME_HEIGHT = 600; private int x = 50; private int y = 50; private int refreshTime = 16; private int bloodTime = 500; private int bloodStep = 0; private int maxBloods = 10; private int minTanks = 3; private int maxTanks = 20; private Image bufImg = null; private Color bgColor = Color.GREEN; private boolean hasGetdist = false; private int disX = 0; private int disY = 0; private int enemyNum = 10; private static Random rand = new Random(); private boolean start = false; private int score = 0; private int killPoint = 5; private Listexplodes = new ArrayList (); private List tanks = new ArrayList (); private List missiles = new ArrayList (); private List walls = new ArrayList (); private List bloods = new ArrayList (); /** * 启动窗口 */ public void launchFrame() { this.setTitle("TankWar"); this.setLocation(300, 300); this.setSize(GAME_WIDTH, GAME_HEIGHT); this.setResizable(false); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { hasGetdist = false; } }); this.addMouseMotionListener(new MouseAdapter() { public void mouseDragged(MouseEvent e) { if (!hasGetdist) { disX = e.getX(); disY = e.getY(); hasGetdist = true; } setLocation(e.getXOnScreen() - disX, e.getYOnScreen() - disY); } }); this.setBackground(bgColor); this.addKeyListener(new KeyMonitor()); this.setVisible(true); gameInit(); } private void gameInit() { tanks.add(new Tank(x, y, true, this)); addTank(10); walls.add(new Wall(300, 400, 300, 30)); walls.add(new Wall(400, 300, 10, 200)); score = 0; start = true; } // 重写paint方法 private void addBlood() { bloodStep++; if (bloodStep >= bloodTime && bloods.size() < maxBloods) { bloodStep = 0; Blood blood = new Blood(x, y); blood.setX(rand.nextInt(GAME_WIDTH - blood.getSize())); blood.setY(rand.nextInt(GAME_HEIGHT - blood.getSize() - 25) + 25); for (int i = 0; i < tanks.size(); i++) if (blood.getRect().intersects(tanks.get(i).getRect())) return; for (int i = 0; i < walls.size(); i++) if (blood.getRect().intersects(walls.get(i).getRect())) return; for (int i = 0; i < bloods.size(); i++) if (blood.getRect().intersects(bloods.get(i).getRect())) return; bloods.add(blood); } } /** * 游戏对象绘制方法 */ public void paint(Graphics g) { if (start) { addBlood(); g.drawString("MissilesCount : " + missiles.size(), 10, 40); g.drawString("ExplodeCount : " + explodes.size(), 10, 50); g.drawString("TanksCount : " + (tanks.size()), 10, 60); g.drawString("WallsCount : " + walls.size(), 10, 70); g.drawString("BloodsCount : " + bloods.size(), 10, 80); g.drawString("Score : " + score, 10, 100); for (int i = 0; i < explodes.size(); i++) explodes.get(i).draw(g); for (int i = 0; i < missiles.size(); i++) { Missile missile = missiles.get(i); for (int j = 0; j < walls.size(); j++) { Wall w = walls.get(j); if (missile.hitWall(w)) missiles.remove(missile); } for (int k = 0; k < tanks.size(); k++) { Tank tank = tanks.get(k); if (missiles.contains(missile) && missile.hitTank(tank)) { missiles.remove(missile); int life = tank.getLife() - missile.getAttackHurt(); if (life <= 0) { score += killPoint; tanks.remove(tank); explodes.add(new Explode(tank.getX() + tank.getSize() / 2, tank.getY() + tank.getSize() / 2, this)); if (tank.isGood()) gameOver(); } else { tank.setLife(life); } } } } for (int i = 0; i < tanks.size(); i++) { Tank t = tanks.get(i); t.draw(g); if (t.isGood()) g.drawString("TankLife : " + t.getLife(), 10, 90); for (int j = 0; j < bloods.size(); j++) { Blood blood = bloods.get(j); if (blood.getRect().intersects(t.getRect())) { bloods.remove(blood); t.setLife(t.getLife() + blood.getBlood()); } } } for (int i = 0; i < missiles.size(); i++) missiles.get(i).draw(g); for (int i = 0; i < walls.size(); i++) walls.get(i).draw(g); for (int i = 0; i < bloods.size(); i++) bloods.get(i).draw(g); if(tanks.size() 0){ boolean addAble=true; Tank t = new Tank(x, y, false, TankClient.this); t.setX(rand.nextInt(GAME_WIDTH - t.getSize())); t.setY(rand.nextInt(GAME_HEIGHT - t.getSize() - 25) + 25); for (int i = 0; i < tanks.size(); i++) if (t.getRect().intersects(tanks.get(i).getRect())){ addAble=false; break; } for (int i = 0; i < walls.size(); i++) if (t.getRect().intersects(walls.get(i).getRect())){ addAble=false; break; } if(addAble){ tanks.add(t); tankNum--; } } } /** * 主方法 * @param args 命令行参数 */ public static void main(String[] args) { TankClient tc = new TankClient(); tc.launchFrame(); new Thread(tc.new PaintThread()).start(); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getRefreshTime() { return refreshTime; } public void setRefreshTime(int refreshTime) { this.refreshTime = refreshTime; } public Image getBufImg() { return bufImg; } public void setBufImg(Image bufImg) { this.bufImg = bufImg; } public Color getBgColor() { return bgColor; } public void setBgColor(Color bgColor) { this.bgColor = bgColor; } public boolean isHasGetdist() { return hasGetdist; } public void setHasGetdist(boolean hasGetdist) { this.hasGetdist = hasGetdist; } public int getDisX() { return disX; } public void setDisX(int disX) { this.disX = disX; } public int getDisY() { return disY; } public void setDisY(int disY) { this.disY = disY; } public List getExplodes() { return explodes; } public void setExplodes(List explodes) { this.explodes = explodes; } public List getTanks() { return tanks; } public void setTanks(List tanks) { this.tanks = tanks; } public List getMissiles() { return missiles; } public void setMissiles(List missiles) { this.missiles = missiles; } public int getEnemyNum() { return enemyNum; } public void setEnemyNum(int enemyNum) { this.enemyNum = enemyNum; } public List getWalls() { return walls; } public void setWalls(List walls) { this.walls = walls; } }
//Tank.java package edu.wkx; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.util.Random; /** * 坦克类 * @author Java_Bean 王凯旋 * */ public class Tank { private int x; private int y; private int size = 50; private int xSpeed = 10; private int ySpeed = 10; private boolean bU = false; private boolean bD = false; private boolean bL = false; private boolean bR = false; private Direction dir = Direction.STOP; private Direction fireDir = Direction.R; private boolean good = true; private static Random rand = new Random(); private int moveStep = 0; private int moveSpeed = 5; private int fireStep = 0; private int fireSpeed = 100; private int turnStep = 0; private int turnSpeed = 100; private int oriX = 0; private int oriY = 0; private int superFireSize = 100; private int totalLife = 100; private int life = 0; private int lifeBarLength = 7; private int lifeBarWidth = 70; private Color goodColor = Color.RED; private Color enemyColor = Color.DARK_GRAY; private Color fireColor = Color.BLUE; private Color lifeBarColor = Color.BLUE; private TankClient tc = null; enum Direction { U, D, L, R, LU, RU, LD, RD, STOP }; /** * 构造方法 * @param x 坦克出现位置的x坐标 * @param y 坦克出现位置的y坐标 * @param good 坦克的类别 */ public Tank(int x, int y, boolean good) { this.x = x; this.y = y; this.good = good; this.life = this.totalLife; } /** * 构造方法 * @param x 坦克出现位置的x坐标 * @param y 坦克出现位置的y坐标 * @param good 坦克的类别 * @param tc 坦克所属主类的引用 */ public Tank(int x, int y, boolean good, TankClient tc) { this(x, y, good); this.tc = tc; moveStep = rand.nextInt(moveSpeed); fireStep = rand.nextInt(fireSpeed); turnStep = rand.nextInt(turnSpeed); } /** * 在屏幕上画出它自己 * @param g 图形类 */ public void draw(Graphics g) { Color orgColor = g.getColor(); if (good) g.setColor(goodColor); else { g.setColor(enemyColor); turnStep++; if (turnStep == turnSpeed) { Direction[] dirs = Direction.values(); dir = dirs[rand.nextInt(dirs.length)]; if (dir != Direction.STOP) fireDir = dir; turnStep = 0; } moveStep++; if (moveStep == moveSpeed) { move(); moveStep = 0; } fireStep++; if (fireStep == fireSpeed) { fire(); fireStep = 0; } } g.fillOval(x, y, size, size); g.setColor(fireColor); switch (fireDir) { case U: g.drawLine(x + size / 2, y + size / 2, x + size / 2, y); break; case D: g.drawLine(x + size / 2, y + size / 2, x + size / 2, y + size); break; case L: g.drawLine(x + size / 2, y + size / 2, x, y + size / 2); break; case R: g.drawLine(x + size / 2, y + size / 2, x + size, y + size / 2); break; case LU: g.drawLine(x + size / 2, y + size / 2, x, y); break; case RU: g.drawLine(x + size / 2, y + size / 2, x + size, y); break; case LD: g.drawLine(x + size / 2, y + size / 2, x, y + size); break; case RD: g.drawLine(x + size / 2, y + size / 2, x + size, y + size); break; } // lifeBarlifeBarLength g.setColor(lifeBarColor); g.drawRect(x + size / 2 - lifeBarWidth / 2, y - 5 - lifeBarLength, lifeBarWidth, lifeBarLength); g.setColor(Color.RED); g.fillRect( x + size / 2 - lifeBarWidth / 2 + 2, y - 5 - lifeBarLength + 2, (int) ((double) life / (double) totalLife * (double) (lifeBarWidth - 4)+1), lifeBarLength - 3); g.setColor(orgColor); } private void move() { switch (dir) { case U: y -= ySpeed; break; case D: y += ySpeed; break; case L: x -= xSpeed; break; case R: x += xSpeed; break; case LU: x -= xSpeed; y -= ySpeed; break; case RU: x += xSpeed; y -= ySpeed; break; case LD: x -= xSpeed; y += ySpeed; break; case RD: x += xSpeed; y += ySpeed; break; case STOP: break; } boolean condition = x < 0 || x + size > TankClient.GAME_WIDTH || y - 20 < 0 || y + size > TankClient.GAME_HEIGHT; for (int i = 0; i < tc.getWalls().size(); i++) { Wall wall = tc.getWalls().get(i); if (this.getRect().intersects(wall.getRect())) condition = true; } for (int i = 0; i < tc.getTanks().size(); i++) { Tank t = tc.getTanks().get(i); if (!this.equals(t) && this.getRect().intersects(t.getRect())) condition = true; } if (condition) { x = oriX; y = oriY; return; } oriX = x; oriY = y; } /** * 键盘按下的处理 * @param key 键位值 */ public void keyPressed(int key) { if (good) { switch (key) { case KeyEvent.VK_UP: bU = true; makeDir(); move(); break; case KeyEvent.VK_DOWN: bD = true; makeDir(); move(); break; case KeyEvent.VK_LEFT: bL = true; makeDir(); move(); break; case KeyEvent.VK_RIGHT: bR = true; makeDir(); move(); break; case KeyEvent.VK_CONTROL: fire(); break; case KeyEvent.VK_A: bigFire(); break; case KeyEvent.VK_X: xFire(); break; } } } private void fire() { tc.getMissiles().add( new Missile(x + size / 2, y + size / 2, fireDir, this, tc)); } private void bigFire() { tc.getMissiles().add( new Missile(x + size / 2, y + size / 2, fireDir, this, tc, superFireSize)); } private void xFire() { Direction[] dirs = Direction.values(); for (int i = 0; i < dirs.length - 1; i++) tc.getMissiles().add( new Missile(x + size / 2, y + size / 2, dirs[i], this, tc)); } /** * 按键释放的处理 * @param key 键位值 */ public void keyReleased(int key) { if (good) { switch (key) { case KeyEvent.VK_UP: bU = false; makeDir(); break; case KeyEvent.VK_DOWN: bD = false; makeDir(); break; case KeyEvent.VK_LEFT: bL = false; makeDir(); break; case KeyEvent.VK_RIGHT: bR = false; makeDir(); break; } } } private void makeDir() { if (bU && !bD && !bL && !bR) fireDir = dir = Direction.U; if (!bU && bD && !bL && !bR) fireDir = dir = Direction.D; if (!bU && !bD && bL && !bR) fireDir = dir = Direction.L; if (!bU && !bD && !bL && bR) fireDir = dir = Direction.R; if (bU && !bD && bL && !bR) fireDir = dir = Direction.LU; if (bU && !bD && !bL && bR) fireDir = dir = Direction.RU; if (!bU && bD && bL && !bR) fireDir = dir = Direction.LD; if (!bU && bD && !bL && bR) fireDir = dir = Direction.RD; } public Rectangle getRect() { return new Rectangle(x, y, size, size); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getxSpeed() { return xSpeed; } public void setxSpeed(int xSpeed) { this.xSpeed = xSpeed; } public int getySpeed() { return ySpeed; } public void setySpeed(int ySpeed) { this.ySpeed = ySpeed; } public boolean isbU() { return bU; } public void setbU(boolean bU) { this.bU = bU; } public boolean isbD() { return bD; } public void setbD(boolean bD) { this.bD = bD; } public boolean isbL() { return bL; } public void setbL(boolean bL) { this.bL = bL; } public boolean isbR() { return bR; } public void setbR(boolean bR) { this.bR = bR; } public Direction getDir() { return dir; } public void setDir(Direction dir) { this.dir = dir; } public Direction getFireDir() { return fireDir; } public void setFireDir(Direction fireDir) { this.fireDir = fireDir; } public boolean isGood() { return good; } public void setGood(boolean good) { this.good = good; } public Color getGoodColor() { return goodColor; } public void setGoodColor(Color goodColor) { this.goodColor = goodColor; } public Color getEnemyColor() { return enemyColor; } public void setEnemyColor(Color enemyColor) { this.enemyColor = enemyColor; } public Color getFireColor() { return fireColor; } public void setFireColor(Color fireColor) { this.fireColor = fireColor; } public TankClient getTc() { return tc; } public void setTc(TankClient tc) { this.tc = tc; } public static Random getRand() { return rand; } public static void setRand(Random rand) { Tank.rand = rand; } public int getMoveStep() { return moveStep; } public void setMoveStep(int moveStep) { this.moveStep = moveStep; } public int getMoveSpeed() { return moveSpeed; } public void setMoveSpeed(int moveSpeed) { this.moveSpeed = moveSpeed; } public int getFireStep() { return fireStep; } public void setFireStep(int fireStep) { this.fireStep = fireStep; } public int getFireSpeed() { return fireSpeed; } public void setFireSpeed(int fireSpeed) { this.fireSpeed = fireSpeed; } public int getTurnStep() { return turnStep; } public void setTurnStep(int turnStep) { this.turnStep = turnStep; } public int getTurnSpeed() { return turnSpeed; } public void setTurnSpeed(int turnSpeed) { this.turnSpeed = turnSpeed; } public int getOriX() { return oriX; } public void setOriX(int oriX) { this.oriX = oriX; } public int getOriY() { return oriY; } public void setOriY(int oriY) { this.oriY = oriY; } public int getSuperFireSize() { return superFireSize; } public void setSuperFireSize(int superFireSize) { this.superFireSize = superFireSize; } public int getTotalLife() { return totalLife; } public void setTotalLife(int totalLife) { this.totalLife = totalLife; } public int getLife() { return life; } public void setLife(int life) { if(life>this.totalLife) life=this.totalLife; if(life<0) life=0; this.life = life; } }
//Wall.java package edu.wkx; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; /** * 墙类 * @author Java_Bean 王凯旋 * */ public class Wall { private int x = 0; private int y = 0; private int width = 0; private int height = 0; private Color color = Color.BLACK; /** * 构造方法 * @param x 墙出现的x坐标 * @param y 墙出现的y坐标 * @param width 墙的宽度 * @param height 墙的高度 */ public Wall(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } /** * 构造方法 * @param x 墙出现的x坐标 * @param y 墙出现的y坐标 * @param width 墙的宽度 * @param height 墙的高度 * @param color 墙的颜色 */ public Wall(int x, int y, int width, int height, Color color) { this.x = x; this.y = y; this.width = width; this.height = height; this.color = color; } /** * 在屏幕上画出它自己 * @param g 图形类 */ public void draw(Graphics g) { Color orgColor = g.getColor(); g.setColor(color); g.fillRect(x, y, width, height); g.setColor(orgColor); } /** * 得到代表所占范围的矩形 * @return 代表他所占范围的矩形 */ public Rectangle getRect() { return new Rectangle(x, y, width, height); } }
//Explode.java package edu.wkx; import java.awt.Color; import java.awt.Graphics; /** * 爆炸类 * @author Java_Bean 王凯旋 * */ public class Explode { private int x = 0; private int y = 0; private Color color = Color.WHITE; private int totalStep = 70; private int speed = 8; private int step = 0; private TankClient tc = null; /** * 构造函数 * @param x 爆炸地点的x坐标 * @param y 爆炸地点的y坐标 * @param tc 所属主类的引用 */ public Explode(int x, int y, TankClient tc) { this.x = x; this.y = y; this.tc = tc; } /** * 在屏幕上能画出他自己 * @param g 图形类 */ public void draw(Graphics g) { Color orgColor = g.getColor(); g.setColor(color); g.fillOval(x - step / 2, y - step / 2, step, step); step+=speed; if (step >= totalStep) { step = 0; tc.getExplodes().remove(this); } g.setColor(orgColor); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getTotalStep() { return totalStep; } public void setTotalStep(int totalStep) { this.totalStep = totalStep; } public int getStep() { return step; } public void setStep(int step) { this.step = step; } public TankClient getTc() { return tc; } public void setTc(TankClient tc) { this.tc = tc; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } }
//Missile.java package edu.wkx; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; /** * 子弹类 * @author Java_Bean 王凯旋 * */ public class Missile { private int x = 0; private int y = 0; private int size = 7; private Color color = Color.BLACK; private int xSpeed = 15; private int ySpeed = 15; private Tank.Direction dir = Tank.Direction.STOP; private TankClient tc = null; private Tank t = null; private int attackHurt = 10; private int bigAttackHurt = 100; /** * 构造函数 * @param x 子弹所在位置的x坐标 * @param y 子弹所在位置的y坐标 * @param dir 子弹飞出的方向 * @param t 发出子弹的坦克的引用 * @param tc 子弹所属主类的引用 */ public Missile(int x, int y, Tank.Direction dir, Tank t, TankClient tc) { this.x = x - size / 2; this.y = y - size / 2; this.dir = dir; this.tc = tc; this.t = t; } /** * 构造函数 * @param x 子弹所在位置的x坐标 * @param y 子弹所在位置的y坐标 * @param dir 子弹飞出的方向 * @param t 发出子弹的坦克的引用 * @param tc 子弹所属主类的引用 * @param size 子弹的大小 */ public Missile(int x, int y, Tank.Direction dir, Tank t, TankClient tc, int size) { this.size = size; this.x = x - size / 2; this.y = y - size / 2; this.dir = dir; this.tc = tc; this.t = t; this.attackHurt = bigAttackHurt; } /** * 在屏幕上画出他自己 * @param g 图形类 */ public void draw(Graphics g) { Color orgColor = g.getColor(); g.setColor(color); g.fillOval(x, y, size, size); g.setColor(orgColor); move(); } private void move() { switch (dir) { case U: y -= ySpeed; break; case D: y += ySpeed; break; case L: x -= xSpeed; break; case R: x += xSpeed; break; case LU: x -= xSpeed; y -= ySpeed; break; case RU: x += xSpeed; y -= ySpeed; break; case LD: x -= xSpeed; y += ySpeed; break; case RD: x += xSpeed; y += ySpeed; break; } if (x + size / 2 < 0 || y + size / 2 < 0 || x + size / 2 > TankClient.GAME_WIDTH || y + size / 2 > TankClient.GAME_HEIGHT) tc.getMissiles().remove(this); } /** * 判断是否撞到了坦克 * @param t 所要判断的坦克 * @return 是否撞到了坦克 */ public boolean hitTank(Tank t) { if (this.getRect().intersects(t.getRect())) { if ((this.t.isGood() && !t.isGood()) || (!this.t.isGood() && t.isGood())) return true; } return false; } /** * 判断是否撞到了墙 * @param w 所要判断的墙 * @return 是否撞到了墙 */ public boolean hitWall(Wall w) { return this.getRect().intersects(w.getRect()); } /** * 得到表示子弹范围的矩形 * @return 表示子弹范围的矩形 */ public Rectangle getRect() { return new Rectangle(x, y, size, size); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getxSpeed() { return xSpeed; } public void setxSpeed(int xSpeed) { this.xSpeed = xSpeed; } public int getySpeed() { return ySpeed; } public void setySpeed(int ySpeed) { this.ySpeed = ySpeed; } public Tank.Direction getDir() { return dir; } public void setDir(Tank.Direction dir) { this.dir = dir; } public TankClient getTc() { return tc; } public void setTc(TankClient tc) { this.tc = tc; } public Tank getT() { return t; } public void setT(Tank t) { this.t = t; } public int getAttackHurt() { return attackHurt; } public void setAttackHurt(int attackHurt) { this.attackHurt = attackHurt; } }
//Blood.java package edu.wkx; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; /** * 补血血块类 * @author Java_Bean 王凯旋 * */ public class Blood { private int x = 0; private int y = 0; private int blood = 15; private int size = 10; private Color color=Color.RED; /** * 构造方法 * @param x 血块出现的x坐标 * @param y 血块出现的y坐标 */ public Blood(int x, int y) { this.x = x; this.y = y; } /** * 构造方法 * @param x 血块出现的x坐标 * @param y 血块出现的y坐标 * @param blood 一个血块回复的生命值 */ public Blood(int x, int y, int blood) { this(x, y); this.blood = blood; } /** * 判断是否和坦克相撞 * @param t 与之相撞的坦克 * @return 是否相撞 */ public boolean hitTank(Tank t) { return this.getRect().intersects(t.getRect()); } /** * 在屏幕上画出他自己 * @param g 图形类 */ void draw(Graphics g) { Color orgColor = g.getColor(); g.setColor(color); g.fillOval(x, y, size, size); g.setColor(orgColor); } /** * 得到血块所代表的矩形 * @return 血块代表的矩形 */ public Rectangle getRect() { return new Rectangle(x, y, size, size); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getBlood() { return blood; } public void setBlood(int blood) { this.blood = blood; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } }
转自:http://blog.csdn.net/jack_wong2010/article/details/7664370