Tank java 工程

  • u9_392237
    了解作者
  • 121.1KB
    文件大小
  • 7z
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-14 11:43
    上传日期
有中文注释的tank小游戏,自己可以尝试改进,四java个文件,整个java工程都在内 多线程实现 界面简单
JavaNetwork_TANK.7z
内容介绍
package nchu.tank; import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.util.Random; public class Tank { /** * tank有x,y坐标位置,是否为生,移动速度,移动方向,可以开炮,可以移动 */ private int x, y;// x,y坐标 private TankClient tc; private boolean good; private boolean live = true; public static final int X_SPEED = 10; public static final int Y_SPEED = 10; public static final int TANK_WIDTH = 50; public static final int TANK_HEIGHT = 50; private static Random r = new Random();// 产生随机数对象 private boolean bL = false, bU = false, bR = false, bD = false; enum Direction { L, LU, U, RU, R, RD, D, LD, STOP }; private Direction dir = Direction.STOP;// 移动方向 private Direction ptDir = Direction.D; private int step = r.nextInt(12) + 3; public Tank(int x, int y, boolean good) { /** * */ this.x = x; this.y = y; this.good = good; } public Tank(int x, int y, boolean good, Direction d, TankClient tc) { /** * */ this(x, y, good); this.tc = tc; this.dir = d; } public void paint(Graphics g) { /** * 绘制坦克(以圆圈表示),炮管(以线表示) */ if (!live) return; Color c = g.getColor(); if (good) { g.setColor(Color.RED);// 自己,颜色为红色 } else { g.setColor(Color.BLUE);// 敌人,颜色为红色 } g.fillOval(x, y, 50, 50); g.setColor(c); switch (ptDir) { case L: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x, y + TANK_HEIGHT / 2); break; case LU: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x, y); break; case U: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x + TANK_WIDTH / 2, y); break; case RU: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x + TANK_WIDTH, y); break; case R: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x + TANK_WIDTH, y + TANK_HEIGHT / 2); break; case RD: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x + TANK_WIDTH, y + TANK_HEIGHT); break; case LD: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x, y + TANK_HEIGHT); break; case D: g.drawLine(x + TANK_WIDTH / 2, y + TANK_HEIGHT / 2, x + TANK_WIDTH / 2, y + TANK_HEIGHT); break; case STOP: break; } move(); } void locateDirection() { /** * */ if (bL && !bU && !bR && !bD) { dir = Direction.L; } else if (!bL && bU && !bR && !bD) { dir = Direction.U; } else if (!bL && !bU && bR && !bD) { dir = Direction.R; } else if (!bL && !bU && !bR && bD) { dir = Direction.D; } else if (bL && bU && !bR && !bD) { dir = Direction.LU; } else if (bL && !bU && !bR && bD) { dir = Direction.LD; } else if (!bL && bU && bR && !bD) { dir = Direction.RU; } else if (!bL && !bU && bR && bD) { dir = Direction.RD; } else if (!bL && !bU && !bR && !bD) { dir = Direction.STOP; } } public void keyPressed(KeyEvent e) { /** * 监听键盘按键被按下 */ int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_A: bL = true; break; case KeyEvent.VK_W: bU = true; break; case KeyEvent.VK_D: bR = true; break; case KeyEvent.VK_S: bD = true; break; } locateDirection(); } public void keyReleased(KeyEvent e) { /** * 监听键盘按键被松开 */ int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_SPACE: fire(); break; case KeyEvent.VK_A: bL = false; break; case KeyEvent.VK_W: bU = false; break; case KeyEvent.VK_D: bR = false; break; case KeyEvent.VK_S: bD = false; break; } locateDirection(); } void move() { /** * 坦克移动 */ switch (dir) { case L: x -= X_SPEED; break; case LU: x -= X_SPEED; y -= Y_SPEED; break; case U: y -= Y_SPEED; break; case RU: x += X_SPEED; y -= Y_SPEED; break; case R: x += X_SPEED; break; case RD: x += X_SPEED; y += Y_SPEED; break; case LD: x -= X_SPEED; y += Y_SPEED; break; case D: y += Y_SPEED; break; case STOP: break; } if (this.dir != Direction.STOP) { this.ptDir = this.dir; } if (x < 0) { x = 0; } if (y < 30) { y = 30; } if (x > 800 - TANK_WIDTH) { x = 800 - TANK_WIDTH; } if (y > 600 - TANK_HEIGHT) { y = 600 - TANK_HEIGHT; } if (!good) { // 是敌军的话,随机移动 Direction[] dirs = Direction.values(); if (step == 0) { step = r.nextInt(12) + 5; int rn = r.nextInt(dirs.length); dir = dirs[rn]; } step--; if (r.nextInt(40) > 35)// 随机开炮 { this.fire(); } } } private Missile fire() { /** * 坦克开炮 */ if (!live) return null; if (good) {//如果是自己在开炮,发出声音 WavePlayer waveplayer = new WavePlayer("Shoot.wav"); waveplayer.start(); } int x = this.x + TANK_WIDTH / 2 - Missile.MISSILE_WIDTH / 2; int y = this.y + TANK_HEIGHT / 2 - Missile.MISSILE_HEIGHT / 2; Missile m = new Missile(x, y, good, ptDir, this.tc); tc.missiles.add(m); return m; } public Rectangle getRec() { return new Rectangle(x, y, TANK_WIDTH, TANK_HEIGHT); } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public boolean isGood() { return good; } 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; } }
评论
    相关推荐
    • Java
      Java 对于Java练习
    • java
      Java Java基础
    • Java
      Java 我创建的Java项目
    • JAVA教程
      一本非常不错的清华大学java教程,讲解非常详细,看了就知道。
    • Java Cipher
      Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码
    • javabank
      Java银行 Java com的模拟操作将在bancárias上发布! 要求:Java 8。
    • java 李兴华
      java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java ...
    • Java204
      支持中文,支持动态注释的超强Java语言反编译器。 注意:Java204的工作目录中不能包含中文字符!! 支持现有所有Java环境产生的Class代码,而最重要的是它生成的源代码可读性极好,又充分考虑了国人的Java编码习惯,...
    • java程序
      java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点
    • Java
      Java 2021/02/19 .java Main.java 学生.java Bmi.java 。班级 Bmi类 主类 MyBmi.class 学生班 学生样本类 2021/02/20 .java DeleteFile.java WriteFile.java MyDataPrint.java 。班级 DeleteFile.class ...