最代码官方
2017-06-20 18:03:04
证
java swing实现的简单的坦克大战小游戏
只实现了简单的绘制敌我坦克,开炮,移动功能,击中没有实现,可以做为swing游戏开发的初学参考下。
import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class Tank3 extends JFrame { private static final long serialVersionUID = 1L; Tank3(String title) { //重构 this.setTitle(title); //窗体名称 this.setSize(415, 500); //窗体大小 this.setLocation(300, 300); //窗体位置 this.setBackground(Color.WHITE); MyTank3 singlePlayer1 = new MyTank3();// 类Mytank3中包含所有游戏信息 this.add(singlePlayer1); this.addKeyListener(singlePlayer1); new Thread(singlePlayer1).start(); // MyBullet3 singlePlayer2 = new MyBullet3(); // this.add( singlePlayer2 ); // this.addKeyListener(singlePlayer2); // new Thread(singlePlayer2).start(); } public static void main(String[] args) { Tank3 h = new Tank3("坦克大战(版本1.1)"); h.setVisible(true); } } // 存储地图网格数据的类,以判断坦克碰撞,0为可行区域,大于0为不可行区域 class groundData { volatile public int ground[][] = new int[18][18]; } //主线程,我方坦克线程,paint线程 三合一 (这里应该更明确地对象化) class MyTank3 extends JPanel implements KeyListener, Runnable { private static final long serialVersionUID = 1L; groundData o = new groundData();//地图数据,会在本线程中实时更新 int perStep = 1, sleepTime = 7;//线程的睡眠时间以及每次睡眠后坦克移动的像素 int x = 105, y = 355;//我方坦克出生点 int op = 0; // 0:up 1:right 2:down 3:left 方向指示 int tankStep = 0; //用于在tank移动中计数 int life = 100, score = 0, difficulty = 20; //生命,得分,难度 int enemyNum = 0, enemyMax = 6;//现有敌人数量,画面允许敌人的最大数量 boolean stuck = false;//坦克是否无法前行 MyBullet3 bullet = new MyBullet3();//我方坦克炮弹 //敌方坦克炮弹 MyBullet3 sBullet = new MyBullet3(); MyBullet3 enemyBullet[] = {sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet, sBullet}; //敌方坦克 EnemyTank sEnemy = new EnemyTank(2, 5, 5, o, -2); EnemyTank enemy[] = {sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy, sEnemy}; //绘制坦克方法,i为坦克标号,我方为1,敌方大于1 public void drawTank(Graphics g, int op, int x, int y, int i) { if (i == 1) { g.setColor(Color.yellow);//我方黄色,敌方红色 } else { g.setColor(Color.red); } if (op == 0) { g.fillRect(x, y, 40, 40); //坦克体 g.setColor(Color.black); g.drawRect(x + 10, y + 5, 20, 20);//轮廓 g.drawRect(x, y, 40, 40); g.drawRect(x - 5, y - 5, 10, 50);//左右两侧履带 g.fillOval(x - 5, y - 5, 10, 10); g.fillOval(x - 5, y + 5, 10, 10); g.fillOval(x - 5, y + 15, 10, 10); g.fillOval(x - 5, y + 25, 10, 10); g.fillOval(x - 5, y + 35, 10, 10); g.drawRect(x + 35, y - 5, 10, 50); g.fillOval(x + 35, y - 5, 10, 10); g.fillOval(x + 35, y + 5, 10, 10); g.fillOval(x + 35, y + 15, 10, 10); g.fillOval(x + 35, y + 25, 10, 10); g.fillOval(x + 35, y + 35, 10, 10); g.fillRect(x + 15, y - 20, 10, 40); //炮口 g.fillOval(x + 5, y + 30, 10, 10); //天线 g.fillOval(x + 25, y + 30, 10, 10); }// end of if ( op == 1 ) if (op == 1) { g.fillRect(x, y, 40, 40); g.setColor(Color.black); g.drawRect(x + 15, y + 10, 20, 20); g.drawRect(x, y, 40, 40); g.drawRect(x - 5, y - 5, 50, 10); g.fillOval(x - 5, y - 5, 10, 10); g.fillOval(x + 5, y - 5, 10, 10); g.fillOval(x + 15, y - 5, 10, 10); g.fillOval(x + 25, y - 5, 10, 10); g.fillOval(x + 35, y - 5, 10, 10); g.drawRect(x - 5, y + 35, 50, 10); g.fillOval(x - 5, y + 35, 10, 10); g.fillOval(x + 5, y + 35, 10, 10); g.fillOval(x + 15, y + 35, 10, 10); g.fillOval(x + 25, y + 35, 10, 10); g.fillOval(x + 35, y + 35, 10, 10); g.fillRect(x + 20, y + 15, 40, 10); g.fillOval(x, y + 5, 10, 10); g.fillOval(x, y + 25, 10, 10); }// end of if (op==2) if (op == 2) { g.fillRect(x, y, 40, 40); g.setColor(Color.black); g.drawRect(x + 10, y + 15, 20, 20); g.drawRect(x, y, 40, 40); g.drawRect(x - 5, y - 5, 10, 50); g.fillOval(x - 5, y - 5, 10, 10); g.fillOval(x - 5, y + 5, 10, 10); g.fillOval(x - 5, y + 15, 10, 10); g.fillOval(x - 5, y + 25, 10, 10); g.fillOval(x - 5, y + 35, 10, 10); g.drawRect(x + 35, y - 5, 10, 50); g.fillOval(x + 35, y - 5, 10, 10); g.fillOval(x + 35, y + 5, 10, 10); g.fillOval(x + 35, y + 15, 10, 10); g.fillOval(x + 35, y + 25, 10, 10); g.fillOval(x + 35, y + 35, 10, 10); g.fillRect(x + 15, y + 20, 10, 40); g.fillOval(x + 5, y, 10, 10); g.fillOval(x + 25, y, 10, 10); } //end of if ( op == 3 ) if (op == 3) { g.fillRect(x, y, 40, 40); g.setColor(Color.black); g.drawRect(x + 5, y + 10, 20, 20); g.drawRect(x, y, 40, 40); g.drawRect(x - 5, y - 5, 50, 10); g.fillOval(x - 5, y - 5, 10, 10); g.fillOval(x + 5, y - 5, 10, 10); g.fillOval(x + 15, y - 5, 10, 10); g.fillOval(x + 25, y - 5, 10, 10); g.fillOval(x + 35, y - 5, 10, 10); g.drawRect(x - 5, y + 35, 50, 10); g.fillOval(x - 5, y + 35, 10, 10); g.fillOval(x + 5, y + 35, 10, 10); g.fillOval(x + 15, y + 35, 10, 10); g.fillOval(x + 25, y + 35, 10, 10); g.fillOval(x + 35, y + 35, 10, 10); g.fillRect(x - 20, y + 15, 40, 10); g.fillOval(x + 30, y + 5, 10, 10); g.fillOval(x + 30, y + 25, 10, 10); } //end of if ( op == 4 ) } //绘图 public void paint(Graphics g) { super.paint(g); this.setBackground(Color.WHITE); //设置下方血条和得分的显示 g.setColor(Color.black); g.fillRect(0, 400, 415, 100); g.setColor(Color.red); g.fillRect(50, 420, life * 3, 10); //为坦克的阻塞区域填色,调试用 // for ( int i = 0; i < 18 ; i++ ) // for ( int j = 0; j < 18 ; j++ ) // if (o.ground[i][j] == 1 ) { // g.setColor(Color.red) ; // g.fillRect((i-1)*25, (j-1)*25, 25, 25);} // else if (o.ground[i][j] == 2 ) { // g.setColor(Color.blue) ; // g.fillRect((i-1)*25, (j-1)*25, 25, 25);} // else if (o.ground[i][j] == 3 ) { // g.setColor(Color.yellow) ; // g.fillRect((i-1)*25, (j-1)*25, 25, 25);} // else if (o.ground[i][j] == 4 ) { // g.setColor(Color.green) ; // g.fillRect((i-1)*25, (j-1)*25, 25, 25);} // else if (o.ground[i][j] == 5 ) { // g.setColor(Color.gray) ; // g.fillRect((i-1)*25, (j-1)*25, 25, 25);} g.setColor(Color.white); g.drawString("生命:", 10, 430); g.drawRect(50, 420, 300, 10); g.drawString("得分: " + score, 10, 450); g.setColor(Color.gray); //画网格线,调试用 // for ( int i = 0; i <= 405 ; i = i+50) { // g.drawLine(0, i , 425, i); // g.drawLine(i, 0, i, 450); // } //绘制本方坦克 drawTank(g, op, x, y, 1); //绘制本方炮弹 if (bullet.flying) { g.fillOval(bullet.bx, bullet.by, 10, 10); } //绘制敌方坦克与炮弹 for (int i = 0; i < enemyNum; i++) if (enemy[i] != null) if (enemy[i].alive) { drawTank(g, enemy[i].op, enemy[i].x, enemy[i].y, i + 2); if (enemyBullet[i].flying) g.fillOval(enemyBullet[i].bx, enemyBullet[i].by, 10, 10); } } //坦克前行 public void stepForward(MyTank3 ref) { if (tankStep > 0) {//为对齐格子,每次必须行进25像素 switch (op) { case 0: { ref.y = ref.y - perStep; ref.tankStep--; } break; case 1: { ref.x = ref.x + perStep; ref.tankStep--; } break; case 2: { ref.y = ref.y + perStep; ref.tankStep--; } break; case 3: { ref.x = ref.x - perStep; ref.tankStep--; } break; } } } //主线程 public void run() { int j = 0, i = 0; //将地图四周设置成最高的阻塞等级 for (i = 0; i < 18; i++) { o.ground[0][i] = 255; o.ground[17][i] = 255; o.ground[i][0] = 255; o.ground[i][17] = 255; } //我方坦克出生点,坦克的阻塞等级为坦克标号,即1 o.ground[(int) ((x + 20) / 25)][(int) ((y + 20) / 25)] = 1; o.ground[(int) ((x + 45) / 25)][(int) ((y + 20) / 25)] = 1; o.ground[(int) ((x + 20) / 25)][(int) ((y + 45) / 25)] = 1; o.ground[(int) ((x + 45) / 25)][(int) ((y + 45) / 25)] = 1;//由像素坐标转到游戏坐标 //大循环 for (int a = 0; a < 60000; a++) { stepForward(this);//行进 if (tankStep == 13) {//行进一半时移动格子的阻塞属性以配合坦克移动 switch (op) { case 0: { i = (int) ((x + 20) / 25); j = (int) ((y + 32) / 25); o.ground[i][j - 1] = 1; o.ground[i + 1][j - 1] = 1; o.ground[i][j + 1] = 0; o.ground[i + 1][j + 1] = 0; } break; case 1: { i = (int) ((x + 8) / 25); j = (int) ((y + 20) / 25); o.ground[i + 2][j] = 1; o.ground[i + 2][j + 1] = 1; o.ground[i][j] = 0; o.ground[i][j + 1] = 0; } break; case 2: { i = (int) ((x + 20) / 25); j = (int) ((y + 8) / 25); o.ground[i][j + 2] = 1; o.ground[i + 1][j + 2] = 1; o.ground[i][j] = 0; o.ground[i + 1][j] = 0; } break; case 3: { i = (int) ((x + 32) / 25); j = (int) ((y + 20) / 25); o.ground[i - 1][j] = 1; o.ground[i - 1][j + 1] = 1; o.ground[i + 1][j] = 0; o.ground[i + 1][j + 1] = 0; } break; } }// if step == 13 try { //sleep,否则游戏太快 Thread.sleep(sleepTime); } catch (Exception e) { e.printStackTrace(); } //以下是敌军回合 if (enemyNum < enemyMax) {//若场上坦克数未达到最大 i = 5 + 175 * (int) (3 * Math.random());//三个随即出生点 j = 5; // if (enemy[k] != null) //若该出生点未被堵塞 if (o.ground[(int) ((i + 20) / 25)][1] + o.ground[(int) ((i + 45) / 25)][1] + o.ground[(int) ((i + 20) / 25)][2] + o.ground[(int) ((i + 45) / 25)][2] < 1) { for (int k = 0; k < enemyMax; k++) //坦克少或坦克死了,则出生 if ((k >= enemyNum) || (enemy[k].alive == false)) { groundData a1 = new groundData(); enemy[k] = new EnemyTank(2, i, j, a1, k);//k是坦克数组的标号,k+2即为坦克及其地面标号 this.o.ground[(int) ((i + 20) / 25)][(int) ((j + 20) / 25)] = k + 2; this.o.ground[(int) ((i + 45) / 25)][(int) ((j + 20) / 25)] = k + 2; this.o.ground[(int) ((i + 20) / 25)][(int) ((j + 45) / 25)] = k + 2; this.o.ground[(int) ((i + 45) / 25)][(int) ((j + 45) / 25)] = k + 2; //出生点阻塞 new Thread(enemy[k]).start();//开始活动 enemy[k].getGroundData(this);//敌军载入全局地图 enemyNum++;//敌军数加1 break;//跳出循环,一次只出生一辆坦克 } } } for (int k = 0; k < enemyNum; k++) if (enemy[k].alive)//如果活动 { enemy[k].getGroundData(this);//刷新全局地图 //将自己的位置写入全局地图 if ((enemy[k].tankStep == 13) && (enemy[k].stepping) && (!enemy[k].stuck)) regGround(enemy[k].op, enemy[k].x, enemy[k].y, this, k); //判断自己的子弹是否击中阻塞 if ((enemyBullet[k].flying) && ((enemyBullet[k].bx + 5) <= 4) && ((enemyBullet[k].by + 5) <= 4)) bulletHit(enemyBullet[k], o, enemyBullet[k].bk); } //己方坦克是否击中阻塞 if ((bullet.flying) && ((bullet.bx + 5) <= 4) && ((bullet.by + 5) <= 4)) bulletHit(bullet, o, bullet.bk); //重画 this.repaint(); } } //敌军坦克对地图的刷新(注册) public void regGround(int op, int x, int y, MyTank3 ref, int k) { int i, j; ref.enemy[k].stepping = false; //stepping为真时,进行地面阻塞移动,移动后将stepping置为false,即一次移动只注册一次 switch (op) { case 0: { i = (int) ((x + 20) / 25); j = (int) ((y + 32) / 25); ref.o.ground[i][j - 1] = 2 + k; ref.o.ground[i + 1][j - 1] = 2 + k; ref.o.ground[i][j + 1] = 0; ref.o.ground[i + 1][j + 1] = 0; } break; case 1: { i = (int) ((x + 8) / 25); j = (int) ((y + 20) / 25); ref.o.ground[i + 2][j] = 2 + k; ref.o.ground[i + 2][j + 1] = 2 + k; ref.o.ground[i][j] = 0; ref.o.ground[i][j + 1] = 0; } break; case 2: { i = (int) ((x + 20) / 25); j = (int) ((y + 8) / 25); ref.o.ground[i][j + 2] = 2 + k; ref.o.ground[i + 1][j + 2] = 2 + k; ref.o.ground[i][j] = 0; ref.o.ground[i + 1][j] = 0; } break; case 3: { i = (int) ((x + 32) / 25); j = (int) ((y + 20) / 25); ref.o.ground[i - 1][j] = 2 + k; ref.o.ground[i - 1][j + 1] = 2 + k; ref.o.ground[i + 1][j] = 0; ref.o.ground[i + 1][j + 1] = 0; } break; } } //按键功能 public void keyPressed(KeyEvent e) { int i, j; i = (int) ((x + 20)) / 25; j = (int) ((y + 20)) / 25; if (e.getKeyCode() == KeyEvent.VK_UP) { if (tankStep <= 0) { stuck = false; op = 0; tankStep = 25; if ((o.ground[i][j - 1] > 0) || (o.ground[i + 1][j - 1] > 0)) { //转弯后判断是否阻塞 stuck = true; tankStep = 0;//如果阻塞则不移动 } } } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { if (tankStep <= 0) { stuck = false; op = 1; tankStep = 25; if ((o.ground[i + 2][j] > 0) || (o.ground[i + 2][j + 1] > 0)) { stuck = true; tankStep = 0; } } } if (e.getKeyCode() == KeyEvent.VK_DOWN) { if (tankStep <= 0) { stuck = false; op = 2; tankStep = 25; if ((o.ground[i][j + 2] > 0) || (o.ground[i + 1][j + 2] > 0)) { stuck = true; tankStep = 0; } } } if (e.getKeyCode() == KeyEvent.VK_LEFT) { if (tankStep <= 0) { stuck = false; op = 3; tankStep = 25; if ((o.ground[i - 1][j] > 0) || (o.ground[i - 1][j + 1] > 0)) { stuck = true; tankStep = 0; } } } if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (bullet.flying == false) {//若炮弹在飞则发不出第二发 new Thread(bullet).start(); bullet.bx = x + 15; bullet.by = y + 15; bullet.bop = op; bullet.flying = true; } } //esc直接退出 if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.exit(0); } this.repaint(); } //重写 public void keyReleased(KeyEvent arg0) { } public void keyTyped(KeyEvent arg0) { } //判断子弹是否击中 public void bulletHit(MyBullet3 ref, groundData o, int k) { int i, j; i = (int) ((ref.bx + 5) / 25); j = (int) ((ref.by + 5) / 25); // System.out.print("hit: i "+i+" , j "+j+" \n"); if (k == 1) {//我方击中 if (o.ground[i][j] > 1) { ref.flying = false; if (o.ground[i][j] < 100) killTank(o.ground[i][j] - 2, this); } if (o.ground[i + 1][j] > 1) { ref.flying = false; if (o.ground[i + 1][j] < 100) killTank(o.ground[i + 1][j] - 2, this); } if (o.ground[i][j + 1] > 1) { ref.flying = false; if (o.ground[i][j + 1] < 100) killTank(o.ground[i][j + 1] - 2, this); } if (o.ground[i + 1][j + 1] > 1) { ref.flying = false; if (o.ground[i + 1][j + 1] < 100) killTank(o.ground[i + 1][j + 1] - 2, this); } } if (k > 1) {//敌方击中 if ((o.ground[i][j] > 0) && (o.ground[i][j] != k)) { ref.flying = false; if (o.ground[i][j] == 1) life = life - difficulty; } if ((o.ground[i + 1][j] > 0) && (o.ground[i + 1][j] != k)) { ref.flying = false; if (o.ground[i + 1][j] == 1) life = life - difficulty; } if ((o.ground[i][j + 1] > 0) && (o.ground[i][j + 1] != k)) { ref.flying = false; if (o.ground[i][j + 1] == 1) life = life - difficulty; } if ((o.ground[i + 1][j + 1] > 0) && (o.ground[i + 1][j + 1] != k)) { ref.flying = false; if (o.ground[i + 1][j + 1] == 1) life = life - difficulty; if (life <= 0) { // 弹出对话框 JOptionPane.showMessageDialog(null, "你的得分 : " + score, "游戏结束!", JOptionPane.ERROR_MESSAGE); // 结束游戏 System.exit(0); } } } } //击毁敌方坦克 public void killTank(int k, MyTank3 ref) { int i, j, m, n; if (ref.enemy[k].alive) { ref.enemyNum--; ref.enemy[k].alive = false; } score = score + 100; i = (int) ((ref.enemy[k].x + 20) / 25); j = (int) ((ref.enemy[k].y + 20) / 25); // System.out.print("explose: i "+i+" , j "+j+" , k"+k +" \n"); for (n = i - 1; n < i + 3; n++) for (m = j - 1; m < j + 3; m++) if ((m > 0) && (m < 18) && (n > 0) && (n < 18)) if (ref.o.ground[n][m] == k + 2) { ref.o.ground[n][m] = 0; //消除地面阻塞 // System.out.print("m "+m+", n "+n+" \n") ; } } //炮弹类 class MyBullet3 extends Thread { int bx = 0, by = 0, bop = 0, speed = 8, bk = 1;//bk为射出当前炮弹的坦克标号 boolean flying = false; public void run() { flying = true; if (bk > 1) speed = 6; for (int a = 0; a < 60000; a++) { if (flying) { switch (bop) { case 0: { by = by - speed; } break; case 1: { bx = bx + speed; } break; case 2: { by = by + speed; } break; case 3: { bx = bx - speed; } break; } } if ((bx < 0) || (bx > 400) || (by < 0) || (by > 400)) { // System.out.print(" Bullet out of Frame!"); flying = false; } if (flying == false) return; try { Thread.sleep(25); } catch (Exception e) { e.printStackTrace(); } }// end of for }// end of run }// end of class //敌方坦克类 class EnemyTank extends Thread { groundData o; int x = 0, y = 0, op = 0, tk = 0; boolean alive = false, stuck = false, stepping = false; int tankStep = 0, perStep = 1; //重构方法 EnemyTank(int top, int tx, int ty, groundData to, int k) { this.x = tx; this.y = ty; this.o = to; this.op = top; this.alive = true; this.tk = k; this.o.ground[(int) ((x + 20) / 25)][(int) ((y + 20) / 25)] = k + 2; this.o.ground[(int) ((x + 45) / 25)][(int) ((y + 20) / 25)] = k + 2; this.o.ground[(int) ((x + 20) / 25)][(int) ((y + 45) / 25)] = k + 2; this.o.ground[(int) ((x + 45) / 25)][(int) ((y + 45) / 25)] = k + 2; } public void run() { for (int a = 0; a < 60000; a++) { if (alive) { if (tankStep == 0) { if ((stuck) || (Math.random() < 0.1)) turnAround(this); //遇到阻塞或者随机 转弯 tankStep = 25; stepping = true; judgeStuck(this); //判断是否被堵塞 } proceed(this); if ((Math.random() < 0.3) && (enemyBullet[tk].flying == false)) shootBullet();//未发射炮弹情况下随即发射 } else return; try { Thread.sleep(20); } catch (Exception e) { e.printStackTrace(); } }//end of for }//end of run void shootBullet() { //申请新的炮弹 new Thread(enemyBullet[tk]).start(); enemyBullet[tk].speed = 6; enemyBullet[tk].bx = x + 15; enemyBullet[tk].by = y + 15; enemyBullet[tk].bop = op; enemyBullet[tk].bk = tk + 2; enemyBullet[tk].flying = true; } void judgeStuck(EnemyTank ref) { int i, j; i = (int) ((x + 20)) / 25; j = (int) ((y + 20)) / 25; stuck = false; switch (op) { case 0: if ((o.ground[i][j - 1] > 0) || (o.ground[i + 1][j - 1] > 0)) { ref.stuck = true; } break; case 1: if ((o.ground[i + 2][j] > 0) || (o.ground[i + 2][j + 1] > 0)) { ref.stuck = true; } break; case 2: if ((o.ground[i][j + 2] > 0) || (o.ground[i + 1][j + 2] > 0)) { ref.stuck = true; } break; case 3: if ((o.ground[i - 1][j] > 0) || (o.ground[i - 1][j + 1] > 0)) { ref.stuck = true; } break; } } void turnAround(EnemyTank ref) { int i = (int) (Math.random() * 2) + 1;//i= 1 2 3 中的随机数 ref.op = (op + i) % 4;//随机转弯 } void getGroundData(MyTank3 d) { this.o = d.o; //载入地图 } void proceed(EnemyTank ref) { if (tankStep > 0) { if (stuck == false) switch (op) { case 0: { ref.y = ref.y - perStep; ref.tankStep--; } break; case 1: { ref.x = ref.x + perStep; ref.tankStep--; } break; case 2: { ref.y = ref.y + perStep; ref.tankStep--; } break; case 3: { ref.x = ref.x - perStep; ref.tankStep--; } break; } else tankStep--;//遇到堵塞后停止一会再转弯 } } }//end of class }
猜你喜欢
请下载代码后再发表评论

- 原 java swing基于jackson练习从api接口获取脑筋急转弯的demo
- 证 java swing开发的拼图小游戏项目
- 证 java swing编写的一个打字小游戏
- 证 java swing实现超级简单,最基础的一个俄罗斯方块和贪吃蛇
- 证精 java swing开发的俄罗斯方块游戏,包含完整代码+详细注释
- 证 java swing开发俄罗斯方块游戏
- 原证 Java swing简单Demo,计算器,界面计算分离
- java swing颜色选择器代码例子下载
- 使用java Timer类实现在swing面板上显示动态时钟
- java swing开发俄罗斯方块游戏
- 基于udp的java swing 聊天
- 证 java swing开发扫雷MineSweeper游戏


gzryue LV6
4月23日
3043864991 LV2
1月5日
哇撒是大帅耶 LV3
2022年12月15日
董畅瑶 LV1
2022年12月8日
xixiwoaini LV3
2022年11月30日
special__tt LV1
2022年11月18日
WEIdong123 LV2
2022年10月26日
微信网友_6190590901735424 LV1
2022年10月25日
337110415 LV7
2022年10月24日
2483935277 LV3
2022年10月8日