📄 combattank34.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
public class CombatTank34 extends Applet implements KeyListener, ActionListener{
private Image offScreenImage;
// Game environment
private final Rectangle Border = new Rectangle(12, 12, 498, 498);
private int GameFlow;
private levels Level;
private int LevelNo;
private Ticker t;
private base Base;
private Image[] BASE;
private int steelhome = -1;
private int sheild = -1;
private int timestop;
private int life = 3;
private int Score = 10000000;
private boolean gameover;
private boolean stageclear;
private boolean drawVictoryPics;
// Moving images;
private Tank tank;
private Image[] tankImage = new Image[16];
private int Enemyindex;
private int EnemyNo;
private int Enemylimits;
private Enemy1[] E1;
private Image[] E1Image = new Image[8];
private Enemy2[] E2;
private Image[] E2Image = new Image[8];
private Enemy3[] E3;
private Image[] E3Image = new Image[8];
private Enemy4[] E4;
private Image[] E4Image = new Image[20];
// static images
private wall[] Wall;
private Image WALL;
private Steelwall[] SteelWall;
private Image STEELWALL;
private river[] River;
private Image RIVER;
private grass[] Grass;
// tank bullets
private bullet[] tankBullet;
private int indexOftankBullet;
private int tankbulletspeed;
private int tankbulletNumber;
private int bulletpower;
private int tankbulletinterval;
private int TBI = 7;
//Enemy bullets
private bullet[] enemyBullet;
// Static Objects
private smallBomb[] SB;
private int indexOfSB;
private bigBomb[] BB;
private int indexOfBB;
private powerup[] PowerUp;
private int indexOfpu;
private Image[] PUimage;
// Control
private boolean UP_TYPED, DOWN_TYPED, RIGHT_TYPED, LEFT_TYPED, fire_TYPED;
//====================================== init ================================================
public void init(){
Base = new base();
BASE = new Image[2];
// define the moving image objects;
sheild = 200;
tank = new Tank(223, 498, 0 , 1);
Enemyindex = 0;
EnemyNo = 3;
Enemylimits = 20;
E1 = new Enemy1[Enemylimits];
E2 = new Enemy2[Enemylimits];
E3 = new Enemy3[Enemylimits];
E4 = new Enemy4[Enemylimits];
LevelNo = 1;
Level = new levels(LevelNo);
//define static images objects (experiment)
Wall = new wall[(Level.getwalls()).length];
Wall = Level.getwalls();
Wall[0] = new wall(248, 498, 2);
Wall[1] = new wall(273, 498, 3);
Wall[2] = new wall(248, 473, 1);
Wall[3] = new wall(273, 473, 1);
SteelWall = new Steelwall[(Level.getSteelwalls()).length];
SteelWall = Level.getSteelwalls();
River = new river[1];
River[0] = new river(600, 600);
Grass = new grass[1];
Grass[0] = new grass(650, 650);
//define static objects
SB = new smallBomb[10000];
indexOfSB = 0;
BB = new bigBomb[10000];
indexOfBB = 0;
PowerUp = new powerup[1000];
indexOfpu = 0;
PUimage = new Image[7];
// define tank bullets
tankBullet = new bullet[10000];
indexOftankBullet = 2;
tankbulletspeed = 7;
tankbulletNumber = 1;
tankbulletinterval = 8;
bulletpower = 1;
//define enemy buulets
enemyBullet = new bullet[Enemylimits];
// load "base" images
BASE[0] = getImage(getDocumentBase(), "image\\Base1.jpg");
BASE[1] = getImage(getDocumentBase(), "image\\Base2.jpg");
// load "Tank" images;
for(int i = 0; i < 16; i++)
tankImage[i] = getImage(getDocumentBase(), "image\\" + "T" + (i + 1) + ".jpg");
// load "enemy1" images
for(int i = 0; i < 8; i++)
E1Image[i] = getImage(getDocumentBase(), "image\\" + "EN1" + (i + 1) + ".jpg");
// load "enemy2" images
for(int i = 0; i < 8; i++)
E2Image[i] = getImage(getDocumentBase(), "image\\" + "E2" + (i + 1) + ".jpg");
// load "enemy3" images
for(int i = 0; i < 8; i++)
E3Image[i] = getImage(getDocumentBase(), "image\\" + "E3" + (i + 1) + ".jpg");
// load "enemy4" images
for(int i = 0; i < 20; i++)
E4Image[i] = getImage(getDocumentBase(), "image\\" + "E4" + (i + 1) + ".jpg");
// load static images
WALL = getImage(getDocumentBase(), "image\\" + "Wall-new.jpg");
STEELWALL = getImage(getDocumentBase(), "image\\" + "SteelWall-new.jpg");
RIVER = getImage(getDocumentBase(), "image\\" + "water.jpg");
// load power up images
for(int i = 0; i < 7; i++)
PUimage[i] = getImage(getDocumentBase(), "image\\" + "PU" + (i + 1) + ".jpg");
addKeyListener(this);
requestFocus();
t = new Ticker(30);
t.addActionListener(this);
t.start();
}
public void stop(){}
public void destroy(){
t.stop();
}
//================================== actionPerformed =========================================
public void actionPerformed(ActionEvent e){
GameFlow++;
for(int i = 0; i <= indexOfpu; i++){
if(PowerUp[i] != null){
PowerUp[i].flashing();
if(PowerUp[i].stopDisplay())
PowerUp[i] = null;
}
}
if(steelhome > 0)
steelhome--;
if(steelhome == 0){
for(int i = 0; i < 4; i++)
SteelWall[i] = null;
Wall[0] = new wall(248, 498, 2);
Wall[1] = new wall(273, 498, 3);
Wall[2] = new wall(248, 473, 1);
Wall[3] = new wall(273, 473, 1);
steelhome = -1;
}
if(sheild > 0)
sheild--;
if(timestop > 0)
timestop--;
if(Enemyindex == Enemylimits && !drawVictoryPics && GameFlow > 600 && !gameover){
stageclear = true;
for(int i = 12; i < 20; i++){
if(E1[i] != null || E2[i] != null || E3[i] != null || E4[i] != null)
stageclear = false;
}
if(stageclear)
GameFlow = 0;
}
if(stageclear && GameFlow >= 200){
drawVictoryPics = true;
stageclear = false;
GameFlow = 0;
}
if(drawVictoryPics && GameFlow == 23){
LevelNo++;
if(LevelNo > 2)
LevelNo = 1;
tank.changePosition(223, 498, 0);
Level = new levels(LevelNo);
Wall = new wall[(Level.getwalls()).length];
Wall = Level.getwalls();
Wall[0] = new wall(248, 498, 2);
Wall[1] = new wall(273, 498, 3);
Wall[2] = new wall(248, 473, 1);
Wall[3] = new wall(273, 473, 1);
SteelWall = new Steelwall[(Level.getSteelwalls()).length];
SteelWall = Level.getSteelwalls();
Grass = new grass[(Level.getgrasses()).length];
Grass = Level.getgrasses();
River = new river[(Level.getrivers()).length];
River = Level.getrivers();
indexOfpu = 0;
indexOfSB = 0;
indexOfBB = 0;
Score+=1000;
}
if(drawVictoryPics && GameFlow == 200)
Enemyindex = 0;
if(drawVictoryPics && GameFlow >= 230){
drawVictoryPics = false;
EnemyNo = Level.getenemyNo();
GameFlow = 0;
sheild = 200;
}
// gernerate enemy tanks
if(Enemyindex < Enemylimits && !drawVictoryPics){
if(Enemyindex%3 == 0 && Enemyindex < EnemyNo && Enemyindex < Enemylimits && GameFlow%50 ==0){
if(Level.getEnemyorders(1, LevelNo, Enemyindex))
E1[Enemyindex] = new Enemy1(23, 23);
if(Level.getEnemyorders(2, LevelNo, Enemyindex))
E2[Enemyindex] = new Enemy2(23, 23);
if(Level.getEnemyorders(3, LevelNo, Enemyindex))
E3[Enemyindex] = new Enemy3(23, 23);
if(Level.getEnemyorders(4, LevelNo, Enemyindex))
E4[Enemyindex] = new Enemy4(23, 23);
}
if(Enemyindex%3 == 1 && Enemyindex < EnemyNo && Enemyindex < Enemylimits && GameFlow%100 ==0){
if(Level.getEnemyorders(1, LevelNo, Enemyindex))
E1[Enemyindex] = new Enemy1(260, 23);
if(Level.getEnemyorders(2, LevelNo, Enemyindex))
E2[Enemyindex] = new Enemy2(260, 23);
if(Level.getEnemyorders(3, LevelNo, Enemyindex))
E3[Enemyindex] = new Enemy3(260, 23);
if(Level.getEnemyorders(4, LevelNo, Enemyindex))
E4[Enemyindex] = new Enemy4(260, 23);
}
if(Enemyindex%3 == 2 && Enemyindex < EnemyNo && Enemyindex < Enemylimits && GameFlow%150 ==0){
if(Level.getEnemyorders(1, LevelNo, Enemyindex))
E1[Enemyindex] = new Enemy1(498, 23);
if(Level.getEnemyorders(2, LevelNo, Enemyindex))
E2[Enemyindex] = new Enemy2(498, 23);
if(Level.getEnemyorders(3, LevelNo, Enemyindex))
E3[Enemyindex] = new Enemy3(489, 23);
if(Level.getEnemyorders(4, LevelNo, Enemyindex))
E4[Enemyindex] = new Enemy4(489, 23);
}
if(Enemyindex != 0 && Enemyindex%4 ==0){
if(E1[Enemyindex] != null)
E1[Enemyindex].flashing();
if(E2[Enemyindex] != null)
E2[Enemyindex].flashing();
if(E3[Enemyindex] != null)
E3[Enemyindex].flashing();
if(E4[Enemyindex] != null)
E4[Enemyindex].flashing();
}
if((E1[Enemyindex] != null || E2[Enemyindex] != null || E3[Enemyindex] != null || E4[Enemyindex] != null) && Enemyindex < Enemylimits)
Enemyindex++;
}
// move the image objects
if(UP_TYPED || DOWN_TYPED || LEFT_TYPED || RIGHT_TYPED){
if(!gameover && !drawVictoryPics)
tank.move(E1, E2, E3, E4, Wall, SteelWall, River);
tank.accelerate();
}
for(int i = 0; i <= indexOfpu; i++){
if(PowerUp[i] != null){
if((tank.getBorder()).intersects(PowerUp[i].PowerUp())){
Score+=100;
if(PowerUp[i].getFunction() == 1){
PowerUp[i] = null;
if(tank.getStatus() == 1){
tankbulletspeed = 12;
tank.changeStatus(2);
TBI = 6;
break;
}
if(tank.getStatus() == 2){
tankbulletNumber = 2;
TBI = 4;
tank.changeStatus(3);
break;
}
if(tank.getStatus() == 3){
bulletpower = 2;
tank.changeStatus(4);
break;
}
break;
}
if(PowerUp[i].getFunction() == 2){
PowerUp[i] = null;
steelhome = 1200;
SteelWall[0] = new Steelwall(248, 498, 2);
SteelWall[1] = new Steelwall(273, 498, 3);
SteelWall[2] = new Steelwall(248, 473, 1);
SteelWall[3] = new Steelwall(273, 473, 1);
break;
}
if(PowerUp[i].getFunction() == 3){
PowerUp[i] = null;
for(int j = 0; j < Enemyindex; j++){
if(E1[j] != null){
BB[indexOfBB] = new bigBomb(E1[j].getxPos(), E1[j].getyPos());
indexOfBB++;
E1[j] = null;
if(Enemyindex < Enemylimits)
EnemyNo++;
}
if(E2[j] != null){
BB[indexOfBB] = new bigBomb(E2[j].getxPos(), E2[j].getyPos());
indexOfBB++;
E2[j] = null;
if(Enemyindex < Enemylimits)
EnemyNo++;
}
if(E3[j] != null){
BB[indexOfBB] = new bigBomb(E3[j].getxPos(), E3[j].getyPos());
indexOfBB++;
E3[j] = null;
if(Enemyindex < Enemylimits)
EnemyNo++;
}
if(E4[j] != null){
BB[indexOfBB] = new bigBomb(E4[j].getxPos(), E4[j].getyPos());
indexOfBB++;
E4[j] = null;
if(Enemyindex < Enemylimits)
EnemyNo++;
}
}
break;
}
if(PowerUp[i].getFunction() == 4){
PowerUp[i] = null;
sheild = 660 + (int)(Math.random()*330);
break;
}
if(PowerUp[i].getFunction() == 5){
PowerUp[i] = null;
timestop = 400 + (int)(Math.random()*330);
break;
}
if(PowerUp[i].getFunction() == 6){
PowerUp[i] = null;
tank.powerup();
tankbulletNumber = 2;
TBI = 4;
tankbulletspeed = 12;
bulletpower = 2;
tank.changeStatus(4);
break;
}
if(PowerUp[i].getFunction() == 7){
PowerUp[i] = null;
life++;
break;
}
}
}
}
for(int i = 0; i < Enemyindex; i++){
if(E1[i] != null){
E1[i].move(tank, E1, E2, E3, E4, i, Wall, SteelWall, River, timestop);
if((int)(Math.random()*30) > 27 && enemyBullet[i] == null && timestop < 1)
enemyBullet[i] = new bullet(E1[i].getxPos(), E1[i].getyPos(), E1[i].getDirection(), 7, 1);
}
if(E2[i] != null){
E2[i].move(tank, E1, E2, E3, E4, i, Wall, SteelWall, River, timestop);
if((int)(Math.random()*30) > 27 && enemyBullet[i] == null && timestop < 1)
enemyBullet[i] = new bullet(E2[i].getxPos(), E2[i].getyPos(), E2[i].getDirection(), 7, 1);
}
if(E3[i] != null){
E3[i].move(tank, E1, E2, E3, E4, i, Wall, SteelWall, River, timestop);
if((int)(Math.random()*30) > 26 && enemyBullet[i] == null && timestop < 1)
enemyBullet[i] = new bullet(E3[i].getxPos(), E3[i].getyPos(), E3[i].getDirection(), 12, 1);
}
if(E4[i] != null){
E4[i].move(tank, E1, E2, E3, E4, i, Wall, SteelWall, River, timestop);
if((int)(Math.random()*30) > 27 && enemyBullet[i] == null && timestop < 1)
enemyBullet[i] = new bullet(E4[i].getxPos(), E4[i].getyPos(), E4[i].getDirection(), 7, 1);
}
}
// move non-image objects
// ---tank bullets
boolean tankbulletdestory = false;
for(int i = indexOftankBullet - 2; i <= indexOftankBullet; i++){
tankbulletdestory = false;
if(tankBullet[i] != null){
tankBullet[i].move();
if(!Border.contains(tankBullet[i].getbulletposition()))
tankbulletdestory = true;
}
if(tankBullet[i] != null){
for(int j = 0; j < Wall.length; j++){
if(Wall[j] != null && tankBullet[i] != null){
if((Wall[j].getborder()).intersects(tankBullet[i].getbulletborder())){
Wall[j].damageWall(tankBullet[i].getbulletborder(), bulletpower, tankBullet[i].getbulletdirection());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -