| 目录: 一、概述:......................................................1 1游戏介绍:....................................................1 2推荐配置:....................................................2 3游戏特色:....................................................2 二、游戏角色设计:..............................................2 三、游戏过程截图: ..............................................3 四、项目评语: .................................................5 附录:游戏设计: ...............................................6 一、概述
1、游戏介绍: 游戏名称:《疯狂坦克》 游戏题材:敌方坦克来袭,守卫我方根据地。 游戏风格:射击 游戏类型:即时战斗 运行环境:支持jvm虚拟机的浏览器 开发工具:J2SE 操作方式:键盘 游戏启动方式:进入游戏画面后,用鼠标左键点击屏幕任意位置,游戏即可启动。 方向控制:up down left right 射击炮弹:S键 游戏操作环境:Windows98操作系统以上 2.推荐配置: 处理器CPU: 赛扬1.0 显卡: 集成 声卡: 集成 硬盘: 1M 内存:32MB RAM 操作系统:支持jvm虚拟机的浏览器的操作系统 网络下载: 56K 以上Modem 宽带:(ADSL,Cable Modem) 发行区域:北京 策划编程人员:2 人
所在学校:北京金海计算机培训学校
用户群体:6-30岁
(1)紧张生活中的简单娱乐,一个小小的射击类游戏! (2)操作方法简单易学。 (3)有攻有守,还可两人配合作战。操作你的坦克,移动炮筒,狠狠的打击侵略者。玩家可享受射击的快感,体验战斗的激烈。喜欢小游戏的玩友请不要错过。
二、游戏角色设计 游戏涉及图片: 1.敌方坦克:
          
2.我方坦克:
              
3.陷阱:

4.战壕:
  
5.奖励物品(我方坦克吃后可增强攻击力和自我保护):
   
6.我方根据地:

三、游戏过程截图

可用方向键控制坦克移动方向,S键发射炮弹。
右方边框内显示的是玩家所得的分数和剩余的我方坦克数量.
游戏失败截图:
略
过关提示图:

第二关截图:

下图是我方坦克吃奖励物品时的截图(红圈内所示):
略
四、项目评语
:评语:北京金海计算机培训学校海标工作组(陈余,张卫,黄月光,倪时伟,扬宏毅)设计的游戏是基于Applet平台的游戏,此款游戏功能齐全,编码规范,而且有很好的移植性,稍加修改就能移植到各种无线平台,操作简单,体现了软件开发者先进的编程思想和优秀设计者的素质。我们课程分为三大部(初级,中级,高级)分学员完成游戏是在仅仅学完初级(java语言基础)之后,在没有系统讲解游戏的设计和游戏项目的情况下,设计出来的,可以预见,等到我们全部学习结束之后,一定能成为出色的游戏开发者。
指导老师: 许文超
附录:游戏设计
【教师评语】面向对象的思想理解的非常好,考虑周全,设计规范合理,条理清晰,可读性好。在初级教学中已经展现了他们良好的素质,相信在以后不但深入的学习学员们能取得更大的成功。
游戏程序设计
/**
* 坦克游戏
* 游戏主方法
* 游戏规则:消灭所有的敌方坦克,同时保卫自己的基地不被击毁
* 方向键控制运动S键开火
*/
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CombatTank34 extends Applet
implements KeyListener, ActionListener
{
private Image offScreenImage;
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;
private int sheild;
private int timestop;
private int life;
private int Score;
private boolean gameover;
private boolean stageclear;
private boolean drawVictoryPics;
private Tank tank;
private Image tankImage[];
private int Enemyindex;
private int EnemyNo;
private int Enemylimits;
private Enemy1 E1[];
private Image E1Image[];
private Enemy2 E2[];
private Image E2Image[];
private Enemy3 E3[];
private Image E3Image[];
private Enemy4 E4[];
private Image E4Image[];
private wall Wall[];
private Image WALL;
private Steelwall SteelWall[];
private Image STEELWALL;
private riverRiver[];
private ImageRIVER;
private grass Grass[];
private bullet tankBullet[];
private int indexOftankBullet;
private int tankbulletspeed;
private int tankbulletNumber;
private int bulletpower;
private int tankbulletinterval;
private int TBI;
private bullet enemyBullet[];
private smallBomb SB[];
private int indexOfSB;
private bigBomb BB[];
private int indexOfBB;
private powerup PowerUp[];
private int indexOfpu;
private Image PUimage[];
private boolean UP_TYPED;
private boolean DOWN_TYPED;
private boolean RIGHT_TYPED;
private boolean LEFT_TYPED;
private boolean fire_TYPED;
/**
* 构造方法
*/
public CombatTank34()
{
steelhome = -1;
sheild = -1;
life = 3;
Score = 0x989680;
tankImage = new Image[16];
E1Image = new Image[8];
E2Image = new Image[8];
E3Image = new Image[8];
E4Image = new Image[20];
TBI = 7;
}
/**
* 初始化
*/
public void init()
{
Base = new base();
BASE = new Image[2];
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);
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);
SB = new smallBomb[10000];
indexOfSB = 0;
BB = new bigBomb[10000];
indexOfBB = 0;
PowerUp = new powerup[1000];
indexOfpu = 0;
PUimage = new Image[7];
tankBullet = new bullet[10000];
indexOftankBullet = 2;
tankbulletspeed = 7;
tankbulletNumber = 1;
tankbulletinterval = 8;
bulletpower = 1;
enemyBullet = new bullet[Enemylimits];
BASE[0] = getImage(getDocumentBase(), "image\\Base1.jpg");
BASE[1] = getImage(getDocumentBase(), "image\\Base2.jpg");
for(int i = 0; i < 16; i++)
{
tankImage[i] = getImage(getDocumentBase(), "image\\T" + (i + 1) + ".jpg");
}
for(int j = 0; j < 8; j++)
{
E1Image[j] = getImage(getDocumentBase(), "image\\EN1" + (j + 1) + ".jpg");
}
for(int k = 0; k < 8; k++)
{
E2Image[k] = getImage(getDocumentBase(), "image\\E2" + (k + 1) + ".jpg");
}
for(int l = 0; l < 8; l++)
{
E3Image[l] = getImage(getDocumentBase(), "image\\E3" + (l + 1) + ".jpg");
}
for(int i1 = 0; i1 < 20; i1++)
{
E4Image[i1] = getImage(getDocumentBase(), "image\\E4" + (i1 + 1) + ".jpg");
}
WALL = getImage(getDocumentBase(), "image\\Wall-new.jpg");
STEELWALL = getImage(getDocumentBase(), "image\\SteelWall-new.jpg");
RIVER = getImage(getDocumentBase(), "image\\water.jpg");
for(int j1 = 0; j1 < 7; j1++)
{
PUimage[j1] = getImage(getDocumentBase(), "image\\PU" + (j1 + 1) + ".jpg");
}
addKeyListener(this);
requestFocus();
t = new Ticker(30);
t.addActionListener(this);
t.start();
}
public void stop()
{
}
public void destroy()
{
t.stop();
}
public void actionPerformed(ActionEvent actionevent)
{
GameFlow++;
for(int i = 0; i <= indexOfpu; i++)
{
if(PowerUp[i] == null)
{
continue;
}
PowerUp[i].flashing();
if(PowerUp[i].stopDisplay())
{
PowerUp[i] = null;
}
}
if(steelhome > 0)
{
steelhome--;
}
if(steelhome == 0)
{
for(int j = 0; j < 4; j++)
{
SteelWall[j] = 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 k = 12; k < 20; k++)
{
if(E1[k] != null || E2[k] != null || E3[k] != null || E4[k] != 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;
}
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++;
}
}
if(UP_TYPED || DOWN_TYPED || LEFT_TYPED || RIGHT_TYPED)
{
if(!gameover && !drawVictoryPics)
{
tank.move(E1, E2, E3, E4, Wall, SteelWall, River);
}
tank.accelerate();
}
label0:
for(int l = 0; l <= indexOfpu; l++)
{
if(PowerUp[l] == null || !tank.getBorder().intersects(PowerUp[l].PowerUp()))
{
continue;
}
Score += 100;
if(PowerUp[l].getFunction() == 1)
{
PowerUp[l] = 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;
}
if(PowerUp[l].getFunction() == 2)
{
PowerUp[l] = 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[l].getFunction() == 3)
{
PowerUp[l] = null;
int j1 = 0;
do
{
if(j1 >= Enemyindex)
{
break label0;
}
if(E1[j1] != null)
{
BB[indexOfBB] = new bigBomb(E1[j1].getxPos(), E1[j1].getyPos());
indexOfBB++;
E1[j1] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
}
if(E2[j1] != null)
{
BB[indexOfBB] = new bigBomb(E2[j1].getxPos(), E2[j1].getyPos());
indexOfBB++;
E2[j1] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
}
if(E3[j1] != null)
{
BB[indexOfBB] = new bigBomb(E3[j1].getxPos(), E3[j1].getyPos());
indexOfBB++;
E3[j1] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
}
if(E4[j1] != null)
{
BB[indexOfBB] = new bigBomb(E4[j1].getxPos(), E4[j1].getyPos());
indexOfBB++;
E4[j1] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
}
j1++;
} while(true);
}
if(PowerUp[l].getFunction() == 4)
{
PowerUp[l] = null;
sheild = 660 + (int)(Math.random() * 330D);
break;
}
if(PowerUp[l].getFunction() == 5)
{
PowerUp[l] = null;
timestop = 400 + (int)(Math.random() * 330D);
break;
}
if(PowerUp[l].getFunction() == 6)
{
PowerUp[l] = null;
tank.powerup();
tankbulletNumber = 2;
TBI = 4;
tankbulletspeed = 12;
bulletpower = 2;
tank.changeStatus(4);
break;
}
if(PowerUp[l].getFunction() != 7)
{
continue;
}
PowerUp[l] = null;
life++;
break;
}
for(int i1 = 0; i1 < Enemyindex; i1++)
{
if(E1[i1] != null)
{
E1[i1].move(tank, E1, E2, E3, E4, i1, Wall, SteelWall, River, timestop);
if((int)(Math.random() * 30D) > 27 && enemyBullet[i1] == null && timestop < 1)
{
enemyBullet[i1] = new bullet(E1[i1].getxPos(), E1[i1].getyPos(), E1[i1].getDirection(), 7, 1);
}
}
if(E2[i1] != null)
{
E2[i1].move(tank, E1, E2, E3, E4, i1, Wall, SteelWall, River, timestop);
if((int)(Math.random() * 30D) > 27 && enemyBullet[i1] == null && timestop < 1)
{
enemyBullet[i1] = new bullet(E2[i1].getxPos(), E2[i1].getyPos(), E2[i1].getDirection(), 7, 1);
}
}
if(E3[i1] != null)
{
E3[i1].move(tank, E1, E2, E3, E4, i1, Wall, SteelWall, River, timestop);
if((int)(Math.random() * 30D) > 26 && enemyBullet[i1] == null && timestop < 1)
{
enemyBullet[i1] = new bullet(E3[i1].getxPos(), E3[i1].getyPos(), E3[i1].getDirection(), 12, 1);
}
}
if(E4[i1] == null)
{
continue;
}
E4[i1].move(tank, E1, E2, E3, E4, i1, Wall, SteelWall, River, timestop);
if((int)(Math.random() * 30D) > 27 && enemyBullet[i1] == null && timestop < 1)
{
enemyBullet[i1] = new bullet(E4[i1].getxPos(), E4[i1].getyPos(), E4[i1].getDirection(), 7, 1);
}
}
boolean flag = false;
for(int k1 = indexOftankBullet - 2; k1 <= indexOftankBullet; k1++)
{
boolean flag1 = false;
if(tankBullet[k1] != null)
{
tankBullet[k1].move();
if(!Border.contains(tankBullet[k1].getbulletposition()))
{
flag1 = true;
}
}
if(tankBullet[k1] != null)
{
for(int l1 = 0; l1 < Wall.length; l1++)
{
if(Wall[l1] == null || tankBullet[k1] == null || !Wall[l1].getborder().intersects(tankBullet[k1].getbulletborder()))
{
continue;
}
Wall[l1].damageWall(tankBullet[k1].getbulletborder(), bulletpower, tankBullet[k1].getbulletdirection());
if(Wall[l1].Bulletdestoried())
{
Wall[l1].restore();
flag1 = true;
}
if(Wall[l1].walldestoried())
{
Wall[l1] = null;
}
}
}
if(tankBullet[k1] != null)
{
for(int i2 = 0; i2 < SteelWall.length; i2++)
{
if(SteelWall[i2] == null || tankBullet[k1] == null || !SteelWall[i2].getborder().intersects(tankBullet[k1].getbulletborder()))
{
continue;
}
SteelWall[i2].damageWall(tankBullet[k1].getbulletborder(), bulletpower, tankBullet[k1].getbulletdirection());
if(SteelWall[i2].Bulletdestoried())
{
SteelWall[i2].restore();
flag1 = true;
}
if(SteelWall[i2].walldestoried())
{
SteelWall[i2] = null;
}
}
}
if(tankBullet[k1] != null)
{
int j2 = 0;
do
{
if(j2 >= Enemyindex)
{
break;
}
if(E1[j2] != null && E1[j2].getE1().intersects(tankBullet[k1].getbulletborder()))
{
Score += 100;
BB[indexOfBB] = new bigBomb(E1[j2].getxPos(), E1[j2].getyPos());
indexOfBB++;
flag1 = true;
if(E1[j2].isFlashing())
{
PowerUp[indexOfpu] = new powerup();
indexOfpu++;
}
E1[j2] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
break;
}
if(E2[j2] != null && E2[j2].getE1().intersects(tankBullet[k1].getbulletborder()))
{
Score += 200;
BB[indexOfBB] = new bigBomb(E2[j2].getxPos(), E2[j2].getyPos());
indexOfBB++;
flag1 = true;
if(E2[j2].isFlashing())
{
PowerUp[indexOfpu] = new powerup();
indexOfpu++;
}
E2[j2] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
break;
}
if(E3[j2] != null && E3[j2].getE1().intersects(tankBullet[k1].getbulletborder()))
{
Score += 300;
BB[indexOfBB] = new bigBomb(E3[j2].getxPos(), E3[j2].getyPos());
indexOfBB++;
flag1 = true;
if(E3[j2].isFlashing())
{
PowerUp[indexOfpu] = new powerup();
indexOfpu++;
}
E3[j2] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
break;
}
if(E4[j2] != null && E4[j2].getE1().intersects(tankBullet[k1].getbulletborder()))
{
E4[j2].hurt();
if(E4[j2].getStatus() > 3)
{
Score += 400;
BB[indexOfBB] = new bigBomb(E4[j2].getxPos(), E4[j2].getyPos());
indexOfBB++;
E4[j2] = null;
if(Enemyindex < Enemylimits)
{
EnemyNo++;
}
}
flag1 = true;
if(E4[j2] != null && E4[j2].isFlashing())
{
PowerUp[indexOfpu] = new powerup();
E4[j2].stopFlashing();
indexOfpu++;
}
break;
}
j2++;
} while(true);
}
if(flag1)
{
SB[indexOfSB] = new smallBomb(tankBullet[k1].getbulletposition());
indexOfSB++;
tankBullet[k1] = null;
}
}
boolean flag2 = false;
for(int k2 = 0; k2 < Enemyindex; k2++)
{
boolean flag3 = false;
if(enemyBullet[k2] != null)
{
enemyBullet[k2].move();
if(!Border.contains(enemyBullet[k2].getbulletposition()))
{
flag3 = true;
}
}
if(enemyBullet[k2] != null)
{
for(int j3 = 0; j3 < Wall.length; j3++)
{
if(Wall[j3] == null || enemyBullet[k2] == null || !Wall[j3].getborder().intersects(enemyBullet[k2].getbulletborder()))
{
continue;
}
Wall[j3].damageWall(enemyBullet[k2].getbulletborder(), 1, enemyBullet[k2].getbulletdirection());
if(Wall[j3].Bulletdestoried())
{
Wall[j3].restore();
flag3 = true;
}
if(Wall[j3].walldestoried())
{
Wall[j3] = null;
}
}
}
if(enemyBullet[k2] != null)
{
for(int k3 = 0; k3 < SteelWall.length; k3++)
{
if(SteelWall[k3] == null || enemyBullet[k2] == null || !SteelWall[k3].getborder().intersects(enemyBullet[k2].getbulletborder()))
{
continue;
}
SteelWall[k3].damageWall(enemyBullet[k2].getbulletborder(), 1, enemyBullet[k2].getbulletdirection());
if(SteelWall[k3].Bulletdestoried())
{
SteelWall[k3].restore();
flag3 = true;
}
}
}
if(enemyBullet[k2] != null)
{
int l3 = indexOftankBullet - 2;
do
{
if(l3 > indexOftankBullet)
{
break;
}
if(tankBullet[l3] != null && tankBullet[l3].getbulletborder().intersects(enemyBullet[k2].getbulletborder()))
{
tankBullet[l3] = null;
flag3 = true;
break;
}
l3++;
} while(true);
}
if(enemyBullet[k2] != null && enemyBullet[k2].getbulletborder().intersects(tank.getVBorder()))
{
flag3 = true;
if(sheild <= 0 && tank.gettankhealth() != 2)
{
BB[indexOfBB] = new bigBomb(tank.getxPos(), tank.getyPos());
indexOfBB++;
if(life > 0)
{
life--;
}
if(life > 0)
{
tank = new Tank(223, 498, 0, 1);
sheild = 200;
}
if(life <= 0 && sheild <= 0)
{
tank = new Tank(600, 800, 0, 1);
gameover = true;
}
tankbulletNumber = 1;
bulletpower = 1;
tankbulletspeed = 7;
TBI = 7;
}
if(tank.gettankhealth() == 2)
{
bulletpower = 1;
tank.hurt();
tank.changeStatus(3);
}
}
if(enemyBullet[k2] != null && Base.getImageNo() == 1 && enemyBullet[k2].getbulletborder().intersects(Base.getBaseborder()))
{
Base.doom();
BB[indexOfBB] = new bigBomb(260, 498);
indexOfBB++;
flag3 = true;
gameover = true;
}
if(flag3)
{
SB[indexOfSB] = new smallBomb(enemyBullet[k2].getbulletposition());
indexOfSB++;
enemyBullet[k2] = null;
}
}
if(fire_TYPED && tankBullet[indexOftankBullet - tankbulletNumber] == null && tankbulletinterval <= 0 && !drawVictoryPics && !gameover)
{
tankBullet[indexOftankBullet] = new bullet(tank.getxPos(), tank.getyPos(), tank.getDirection(), tankbulletspeed, bulletpower);
indexOftankBullet++;
tankbulletinterval = TBI;
}
tankbulletinterval--;
for(int l2 = 0; l2 <= indexOfSB; l2++)
{
if(SB[l2] == null)
{
continue;
}
if(SB[l2].BombTimeleft() > 0)
{
SB[l2].keepbombing();
}
if(SB[l2].BombTimeleft() <= 0)
{
SB[l2] = null;
}
}
for(int i3 = 0; i3 <= indexOfBB; i3++)
{
if(BB[i3] == null)
{
continue;
}
if(BB[i3].BombTimeleft() > 0)
{
BB[i3].keepbombing();
}
if(BB[i3].BombTimeleft() <= 0)
{
BB[i3] = null;
}
}
repaint();
}
/**
* 绘制图形
*/
public void paint(Graphics g)
{
g.setColor(new Color(128, 64, 0));
g.fillRect(0, 0, 610, 520);
g.setColor(Color.blue);
g.drawRect(10, 10, 501, 501);
g.drawRect(9, 9, 503, 503);
for(int i = 0; i < Wall.length; i++)
{
if(Wall[i] != null)
{
g.drawImage(WALL, Wall[i].getxPos() - 12, Wall[i].getyPos() - 12, this);
Wall[i].draw(g);
}
}
for(int j = 0; j < SteelWall.length; j++)
{
if(SteelWall[j] != null)
{
g.drawImage(STEELWALL, SteelWall[j].getxPos() - 12, SteelWall[j].getyPos() - 12, this);
SteelWall[j].draw(g);
}
}
for(int k = 0; k < River.length; k++)
{
g.drawImage(RIVER, River[k].getxPos() - 12, River[k].getyPos() - 12, this);
}
for(int l = 0; l <= indexOftankBullet; l++)
{
if(tankBullet[l] != null)
{
tankBullet[l].draw(g);
}
}
for(int i1 = 0; i1 < Enemyindex; i1++)
{
if(enemyBullet[i1] != null)
{
enemyBullet[i1].draw(g);
}
}
g.drawImage(BASE[Base.getImageNo() - 1], 248, 485, this);
for(int j1 = 0; j1 <= indexOfSB; j1++)
{
if(SB[j1] != null)
{
SB[j1].draw(g);
}
}
for(int k1 = 0; k1 <= indexOfBB; k1++)
{
if(BB[k1] != null)
{
BB[k1].draw(g);
}
}
g.drawImage(tankImage[tank.getImageNo()], tank.getxPos() - 12, tank.getyPos() - 12, this);
g.drawImage(tankImage[tank.getImageNo()], tank.getxPos() - 12, tank.getyPos() - 12, this);
g.drawImage(tankImage[0], 520, 450, this);
if(sheild > 0)
{
g.setColor(Color.red);
g.drawRect(tank.getxPos() - 13, tank.getyPos() - 13, 27, 27);
g.drawRect(tank.getxPos() - 12, tank.getyPos() - 12, 25, 25);
}
for(int l1 = 0; l1 < Enemyindex; l1++)
{
if(E1[l1] != null)
{
g.drawImage(E1Image[E1[l1].getImageNo()], E1[l1].getxPos() - 12, E1[l1].getyPos() - 12, this);
}
}
for(int i2 = 0; i2 < Enemyindex; i2++)
{
if(E2[i2] != null)
{
g.drawImage(E2Image[E2[i2].getImageNo()], E2[i2].getxPos() - 12, E2[i2].getyPos() - 12, this);
}
}
for(int j2 = 0; j2 < Enemyindex; j2++)
{
if(E3[j2] != null)
{
g.drawImage(E3Image[E3[j2].getImageNo()], E3[j2].getxPos() - 12, E3[j2].getyPos() - 12, this);
}
}
for(int k2 = 0; k2 < Enemyindex; k2++)
{
if(E4[k2] != null)
{
g.drawImage(E4Image[E4[k2].getImageNo()], E4[k2].getxPos() - 12, E4[k2].getyPos() - 12, this);
}
}
for(int l2 = 0; l2 < Grass.length; l2++)
{
Grass[l2].draw(g);
}
for(int i3 = 0; i3 < indexOfpu; i3++)
{
if(PowerUp[i3] != null)
{
g.drawImage(PUimage[PowerUp[i3].getFunction() - 1], PowerUp[i3].getxPos() - 12, PowerUp[i3].getyPos() - 12, this);
}
}
if(drawVictoryPics)
{
g.setColor(Color.lightGray);
if(GameFlow > 0 && GameFlow < 20)
{
g.fillRect(11, 11, 500, GameFlow * 15);
g.fillRect(11, 510 - GameFlow * 15, 500, GameFlow * 15);
}
if(GameFlow >= 20 && GameFlow <= 208)
{
g.fillRect(11, 11, 500, 500);
}
if(GameFlow > 208 && GameFlow < 229)
{
g.fillRect(11, 11, 500, 260 - (GameFlow - 209) * 15);
g.fillRect(11, 261 + (GameFlow - 209) * 15, 500, 260 - (GameFlow - 209) * 15);
}
Font font = new Font("Century Gothic", 1, 19);
g.setFont(font);
g.setColor(Color.blue);
if(GameFlow >= 20 && GameFlow <= 208)
{
g.drawString("Stage Clear", 200, 250);
}
}
Font font1 = new Font("Century Gothic", 1, 16);
g.setFont(font1);
g.setColor(new Color(81, 94, 255));
g.drawString("x", 550, 468);
g.drawString(life + "", 565, 469);
String s = Score + "";
g.drawString("Scores:", 515, 420);
g.drawString(s.substring(s.length() - 6, s.length()) + "", 525, 438);
g.setColor(new Color(224, 97, 199));
g.drawString("Enemy = " + (20 - Enemyindex), 515, 50);
if(gameover)
{
Font font2 = new Font("Century Gothic", 1, 24);
g.setFont(font2);
g.setColor(new Color(81, 94, 225));
g.drawString("G A M E", 212, 220);
g.drawString("O VER", 212, 250);
}
}
/**
* 按下键盘触发的事件
*/
public void keyPressed(KeyEvent keyevent)
{
if(!gameover && !drawVictoryPics)
{
if(keyevent.getKeyCode() == 38)
{
if(tank.getDirection() != 0)
{
tank.ChangeFace(0);
}
UP_TYPED = true;
}
if(keyevent.getKeyCode() == 37)
{
if(tank.getDirection() != 2)
{
tank.ChangeFace(2);
}
LEFT_TYPED = true;
}
if(keyevent.getKeyCode() == 40)
{
if(tank.getDirection() != 1)
{
tank.ChangeFace(1);
}
DOWN_TYPED = true;
}
if(keyevent.getKeyCode() == 39)
{
if(tank.getDirection() != 3)
{
tank.ChangeFace(3);
}
RIGHT_TYPED = true;
}
if((fire_TYPED || keyevent.getKeyChar() == 's') && tankBullet[indexOftankBullet - tankbulletNumber] == null && tankbulletinterval <= 0)
{
tankBullet[indexOftankBullet] = new bullet(tank.getxPos(), tank.getyPos(), tank.getDirection(), tankbulletspeed, bulletpower);
indexOftankBullet++;
fire_TYPED = true;
tankbulletinterval = TBI;
}
}
}
/**
* 释放键盘触发的事件
*/
public void keyReleased(KeyEvent keyevent)
{
if(keyevent.getKeyCode() == 38 && UP_TYPED)
{
UP_TYPED = false;
}
if(keyevent.getKeyCode() == 40 && DOWN_TYPED)
{
DOWN_TYPED = false;
}
if(keyevent.getKeyCode() == 39 && RIGHT_TYPED)
{
RIGHT_TYPED = false;
}
if(keyevent.getKeyCode() == 37 && LEFT_TYPED)
{
LEFT_TYPED = false;
}
if(keyevent.getKeyChar() == 's' && fire_TYPED)
{
fire_TYPED = false;
}
}
public void keyTyped(KeyEvent keyevent)
{
}
public void update(Graphics g)
{
if(offScreenImage == null)
{
offScreenImage = createImage(610, 520);
}
Graphics g1 = offScreenImage.getGraphics();
g1.setColor(Color.white);
g1.fillRect(0, 0, 610, 520);
paint(g1);
g.drawImage(offScreenImage, 0, 0, this);
}
}
|