📄 mygame.java
字号:
}
catch(Exception e){}
}
//the meteor extends the class Unit
public class meteor extends Unit {
int maxBullet;
int nowBullet;
public meteor()
{
maxBullet=1;
nowBullet=0;
sizeX=40;
sizeY=40;
}
public double bulletCos[] = new double[bulletNumber];
public void moveBullet() {
for (int i = 0; i < bulletNumber; i++) {
if (bulletStatus[i] == 1) //true bullets
{
if (bulletX[i]
> 0 & bulletX[i]
< xSize & bulletY[i]
> 0 & bulletY[i]
< ySize)
//in
{
bulletX[i] =
bulletX[i]
- bulletSpeed
* Math.sqrt(1 - Math.pow(bulletCos[i], 2));
bulletY[i] = bulletY[i] - bulletSpeed * bulletCos[i];
//move
} else //out
{
bulletStatus[i] = 0; //dispear
nowBullet--;
}
}
}
}
public void fire() {
for (int i = 0; i < bulletNumber; i++) {
if (Math.random() > 0.95&nowBullet<=maxBullet) {
if (bulletStatus[i] == 0)
//meteor is alive and this bullet is not true
{
bulletX[i] = x + sizeX/2;
bulletY[i] = y + sizeY;
bulletStatus[i] = 1;
nowBullet++;
double yLength = y - skymaster.getY();
double zLine =
Math.sqrt(
(y - skymaster.getY()) * (y - skymaster.getY())
+ (x - skymaster.getX()) * (x - skymaster.getX()));
bulletCos[i] = yLength / zLine;
break;
}
}
}
}
public void revive() {
}
public void draw(Graphics g) {
if (bombTimer < 1) {
if(status==1)
g.drawImage(meteorImage, (int) x, (int) y, MySize,MySize,applet);
//can draw to applet
} else {
g.drawImage(meteorImage, (int) x, (int) y, MySize, MySize, applet);
if (bombTimer < 6) {
g.drawImage(bomb1, (int) x, (int) y, MySize, MySize, applet);
} else {
if (bombTimer < 12) {
g.drawImage(bomb2, (int) x, (int) y, MySize, MySize,applet);
} else {
g.drawImage(bomb3, (int) x, (int) y, MySize, MySize, applet);
}
}
}
}
public void kill() {
for (int i = 0; i < skymaster.getBulletNumber(); i++) {
if (skymaster.getBulletStatus(i)==1&Math.abs((x +sizeX/2) - (skymaster.bulletX[i]+7))
< sizeX/2 & Math.abs((y + sizeY/2) - (skymaster.bulletY[i]+BulletSize/2))
< sizeY/2) //meteor dead
{
status = 0;
score += 100;
skymaster.setBulletStatus(i, 0);
bombTimer = 6 * 3;
kill.play();
break; //only kill one
}
if (x < 0 | x > getSize().width | y > getSize().height) {
status = 0;
} //judge the death(fly out equals death)
}
if(skymaster.getNucealStatus()==true&Math.abs(y-skymaster.nucealY)<NucealSizeY)
{
status = 0;
score += 100;
bombTimer = 6 * 3;
kill.play();
}
}
public void drawBullet(Graphics g) {
for (int i = 0; i < bulletNumber; i++) {
if (bulletStatus[i] == 1) {
g.drawImage(
meteorBulletImage,
(int) bulletX[i],
(int) bulletY[i],
BulletSize,
BulletSize,
applet);
}
}
}
public void move() {
if (bombTimer < 1) //not bombing
{
y += this.speed;
}
}
} //inner class
//SkyMaster extends the class Unit
public class SkyMaster extends Unit {
public SkyMaster()
{
sizeX=40;
sizeY=40;
x=155;
y=420;
}
public void move() {
if (bombTimer < 1) //not bombing
{
oldX = x;
oldY = y;
if (up == true) //in
{
y -= this.speed;
}
if (down == true) {
y += this.speed;
}
if (left == true) {
x -= this.speed;
}
if (right == true) {
x += this.speed;
}
if (y < 0 | y > getSize().height - MySize) {
y = oldY;
}
if (x < 0 | x > getSize().width - MySize) {
x = oldX;
} //return original values
}
}
public void revive() {
if (bombTimer < 1 & status == 0) {
x = 135;
y = 420;
life -= 1;
status = 1; //regenerate
godTime = 0 * 5; //40*5 maybe OK
}
}
public void draw(Graphics g) {
switch (status) {
case 0 : //dead
if (bombTimer > 0) //bombing
{
g.drawImage(playerImage, (int) x, (int) y, MySize, MySize,applet);
if (bombTimer < 6) {
g.drawImage(bomb1, (int) x, (int) y, MySize, MySize, applet);
} else {
if (bombTimer < 12) {
g.drawImage(bomb2, (int) x, (int) y, MySize, MySize, applet);
} else {
g.drawImage(bomb3, (int) x, (int) y, MySize, MySize, applet);
}
}
}
break;
case 1 : //normal flying
g.drawImage(playerImage, (int) (x), (int) (y), MySize, MySize, applet);
//draw couver
if (godTime > 0)
g.drawImage(cover, (int) (x), (int) (y), MySize, MySize,applet);
break;
}
}
public void moveBullet() {
for (int i = 0; i < bulletNumber; i++) {
if (bulletStatus[i] == 1) {
if (bulletX[i]
< getSize().width & bulletX[i]
> 0 & bulletY[i]
< getSize().height & bulletY[i]
> 0) //in
{
bulletY[i] -= bulletSpeed;
} //move
else //out
{
bulletStatus[i]=0;
}
}
}
if (nucealStatus == true) {
if (nucealX
< getSize().width & nucealX
> 0 &nucealY
< getSize().height & nucealY
> 0) //in
{
nucealY -= nucealSpeed;
} //move
else //out
{
nucealStatus=false;
}
}
} //move bullet
public void drawBullet(Graphics g) {
for (int i = 0; i < bulletNumber; i++) {
g.setColor(Color.yellow);
if (bulletStatus[i] == 1) {
g.drawImage(
bulletImage,
(int) bulletX[i],
(int) bulletY[i],
BulletSize,
BulletSize,
applet);
}
}
}
public void drawNuceal(Graphics g) {
g.setColor(Color.yellow);
if (nucealStatus == true) {
g.drawImage(
nucealImage,
(int) nucealX,
(int) nucealY,
NucealSizeX,
NucealSizeY,
applet);
}
}
public void fire() {
}
public void kill() {
setCenterX();
setCenterY();
for (int i = 0; i < meteorNumber; i++) {
meteor[i].setCenterX();
meteor[i].setCenterY();
if (godTime == 0) //no undead cover and no lives
{
if (meteor[i].getStatus()
== 1
& Math.abs(meteor[i].getCenterX() - skymaster.getCenterX())
<(meteor[i].sizeX/2+skymaster.sizeX/2)
& Math.abs(meteor[i].getCenterY() - skymaster.getCenterY())
<(meteor[i].sizeY/2+skymaster.sizeY/2)
)
{
status = 0; //kill player
crash.play();
if (life == 0) {
restart();
playerStatus = 2;
} else {
bombTimer = 6 * 3;
skymaster.revive();
}
break;
} //meet meteor
for (int j = 0; j < bulletNumber; j++) {
if (meteor[i].getBulletStatus(j)
== 1
& Math.abs(meteor[i].getBulletCenterX(j) - skymaster.getCenterX())
<(BulletSize/2+skymaster.sizeX/2)
& Math.abs(meteor[i].getBulletCenterY(j) - skymaster.getCenterY())
<(BulletSize/2+skymaster.sizeY/2)
)
{
status = 0;
meteor[i].setBulletStatus(j,0);
crash.play();
if (life == 0) {
restart();
playerStatus = 2;
} //gameover
else {
bombTimer = 6 * 3;
skymaster.revive();
} //repair
break;
}
}
} //when undeadTime dispear, SkyMaster would be hurted
}
}
} //inner class
}
abstract class Unit {
Applet applet;
String name = "noname";
//this is for find the center of the unit
// double range=40;
int sizeX;
int sizeY;
double x;
double y;
double oldX;
double oldY;
//be uesd to identify the center of the unit so that we can judge wether the unit is hunted
double centerX;
double centerY;
double speed = 5;
int nucealNumber=3;
int life = 5;
int power;
int width;
int height;
boolean up = false;
boolean down = false;
boolean left = false;
boolean right = false;
int status = 1;
int alive = 1;
int bombTimer = 0;
int fireStatusTimer = 0; //Unit
int bulletNumber = 10;
//make this array big enough for every sub classes
double bulletSpeed = 8; //line move ratio
double bulletX[] = new double[bulletNumber];
double bulletY[] = new double[bulletNumber];
int bulletStatus[] = new int[bulletNumber];
double nucealSpeed=10;
double nucealX;
double nucealY;
boolean nucealStatus;
public double getCenterX() {
return centerX;
}
public void setCenterX() {
centerX=x+sizeX/2;
}
public double getCenterY(){
return centerY;
}
public void setCenterY() {
centerY=y+sizeY/2;
}
public double getX() {
return x;
}
public void setX(double v) {
x = v;
}
public double getY() {
return y;
}
public void setY(double v) {
y = v;
} //x,y
public void setUp(boolean v) {
up = v;
}
public void setDown(boolean v) {
down = v;
}
public void setLeft(boolean v) {
left = v;
}
public void setRight(boolean v) {
right = v;
} //up,down,left,right
public int getBulletStatus(int no) {
return bulletStatus[no];
}
public int getFireStatusTimer() {
return fireStatusTimer;
}
public int getBulletNumber() {
return bulletNumber;
}
public double getBulletCenterX(int no) {
return bulletX[no]+7;
}
public double getBulletCenterY(int no) {
return bulletY[no]+7;
}
public void setBulletStatus(int i, int v) {
bulletStatus[i] = v;
}
public double getNucealX() {
return nucealX;
}
public double getNucealY() {
return nucealY;
}
public boolean getNucealStatus() {
return nucealStatus;
}
public void setNucealStatus(boolean v) {
nucealStatus = v;
}
public void setNucealX(double v) {
nucealX = v;
}
public void setNucealY(double v) {
nucealY = v;
} //nuceal weapons
public void setBulletSpeed(int v) {
bulletSpeed = v;
}
public void setBulletNumber(int v) {
bulletNumber = v;
}
public void setBulletX(int i, double v) {
bulletX[i] = v;
}
public void setBulletY(int i, double v) {
bulletY[i] = v;
} //bullet
public void setLife(int v) {
life = v;
}
public void setNucealNumber(int v){
nucealNumber=v;
}
public void setBombTimer(int v) {
bombTimer = v;
}
public int getBombTimer() {
return bombTimer;
} //bomb
public int getStatus() {
return status;
}
public void setStatus(int v) {
status = v;
}
public void action() {
kill();
move();
fire();
}
public abstract void kill();
public abstract void moveBullet();
public abstract void move();
public abstract void fire();
public abstract void revive();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -