📄 planegamecanvas.java
字号:
private final int m_screenWidth;
private final int m_screenHeight;
private int m_x;
private int m_y;
private Image myBulletImage;
private Image eBulletImage;
private Image bossBulletImage;
public BulletScroller(Canvas screen, int interval)
{
m_screenWidth = screen.getWidth();
m_screenHeight = screen.getHeight();
myBulletImage = mybullet[0].getImage();
eBulletImage = eBullet[0].getImage();
bossBulletImage = bossBullet[0].getImage();
m_updateTimer.schedule(this, 0, interval);
ClockTag = 0;
}
public void run()
{
ClockTag++;
if (ClockTag % 2 == 0) {
SendBulletTag = true;
ClockTag = 0;
}
//my bullets move
for (int i = 0; i < mybullet.length; i++) {
if (mybullet[i].IsShow()) {
mybullet[i].ChangePos(mybullet[i].GetXSpeed(), 0); //move
if (mybullet[i].getXPos() >= m_screenWidth) { //out of the screen
mybullet[i].ShowFalse();
}
}
} //for
//enemy plane bullets move and judge whether hit my plane
for (int i = 0; i < eBullet.length; i++) {
if (eBullet[i].IsShow()) {
eBullet[i].ChangePos( -eBullet[i].GetXSpeed(), 0); //move
if (eBullet[i].getXPos() <= 0) { //out of screen
eBullet[i].ShowFalse();
} //if
if (Collision(eBullet[i], myplane)) { //hit my plane?
eBullet[i].ShowFalse();
myplane.ChangeHP( -1);
myplane.SetState(PlaneGameObject.HIT);
if (myplane.getHP() <= 0) {
myplane.SetState(PlaneGameObject.BOMBING);
}
}
} //if
} //for
//enemy boss bullets move
for (int i = 0; i < bossBullet.length; i++) {
if (bossBullet[i].IsShow()) {
bossBullet[i].ChangePos(bossBullet[i].GetXSpeed(),
bossBullet[i].GetYSpeed());
if (bossBullet[i].getXPos() < 0 ||
bossBullet[i].getYPos() < 0 ||
bossBullet[i].getYPos() >= m_screenHeight) {
bossBullet[i].ShowFalse();
}
if (Collision(bossBullet[i], myplane)) { //hit my plane?
bossBullet[i].ShowFalse();
myplane.ChangeHP( -1);
myplane.SetState(PlaneGameObject.HIT);
if (myplane.getHP() <= 0) {
myplane.SetState(PlaneGameObject.BOMBING);
}
}
}
} //for
} //void run()
void paint(Graphics g)
{
int x, y;
//draw my bullets
for (int i = 0; i < mybullet.length; i++) {
if (mybullet[i].IsShow()) {
x = mybullet[i].getXPos();
y = mybullet[i].getYPos();
g.drawImage(myBulletImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
} //if
} //for
//draw enemy plane bullets
for (int i = 0; i < eBullet.length; i++) {
if (eBullet[i].IsShow()) {
x = eBullet[i].getXPos();
y = eBullet[i].getYPos();
g.drawImage(eBulletImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
} //if
} //for
//draw enmey boss bullets
for (int i = 0; i < bossBullet.length; i++) {
if (bossBullet[i].IsShow()) {
x = bossBullet[i].getXPos();
y = bossBullet[i].getYPos();
g.drawImage(bossBulletImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
} //if
} //for
} //void paint()
} //end of class BulletScroller
//class PlaneScroller controls the move of the enemy planes by time
class ePlaneScroller
extends TimerTask
{
private final Timer m_updateTimer = new Timer();
private int ClockTag = 0;
private Random generator = new Random();
private final int m_maxX; //最大的横坐标值
private final int m_maxY; //最大的纵坐标值
private int m_x;
private int m_y;
private Image ExpImage;
private Image BossExpImage;
private Image BossRedImage;
private Image tempImage;
public ePlaneScroller(Canvas screen, int interval)
{
m_maxX = screen.getWidth() - 1;
m_maxY = screen.getHeight() - 1;
m_updateTimer.schedule(this, 200, interval);
try {
ExpImage = Image.createImage("/explosion.png");
}
catch (Exception e) {
ExpImage = null;
}
try {
BossExpImage = Image.createImage("/bossexplosion.png");
}
catch (Exception e) {
BossExpImage = null;
}
try {
BossRedImage = Image.createImage("/Boss01_red.PNG");
}
catch (Exception e) {
BossRedImage = null;
}
}
public void run()
{
int temp;
int i, dx, dy;
ClockTag++;
//generate enemy planes
for (i = 0; i < ePlane.length; i++) {
if (!ePlane[i].IsShow()) { //generate a radom int
temp = (generator.nextInt() % (3 * m_maxY));
if (temp < m_maxY) { //generate a new enemy plane
ePlane[i].ShowTrue();
ePlane[i].SetPos(m_maxX, temp); //!SetPos not ChangePos
temp = (generator.nextInt() % 3 + 1);
ePlane[i].SetValue(temp); //decide plane type
}
}
}
// enemy plane flys(change position)
for (i = 0; i < ePlane.length; i++) {
if (ePlane[i].IsShow() &&
ePlane[i].getState() == PlaneGameObject.ALIVE) {
dx = ePlane[i].getXSpeed();
dy = ePlane[i].getYSpeed();
switch (ePlane[i].getFlyType()) {
case 1:
ePlane[i].ChangePos( -dx, 0);
break;
case 2:
ePlane[i].ChangePos( -2 * dx, -dy);
break;
case 3:
ePlane[i].ChangePos( -2 * dx, dy);
break;
default:
ePlane[i].ChangePos( -dx, 0);
}
if (ePlane[i].getXPos() <= 0 || ePlane[i].getYPos() <= 0 ||
ePlane[i].getYPos() >= m_maxY) { //dismiss it
ePlane[i].ShowFalse();
} //end if
}
} //end for
//enemy planes send bullets
for (i = 0; i < ePlane.length; i++) {
if (ePlane[i].IsShow() &&
ClockTag * (4 - ePlane[i].getID()) % 240 == 0) {
sendBullet(ePlane[i].getXPos(), ePlane[i].getYPos(), 1);
}
} //for
//judge ePlane whether hitten
for (i = 0; i < ePlane.length; i++) {
if (ePlane[i].IsShow()) {
//whether hitten by the bullets?
for (int j = 1; j < mybullet.length; j++) {
if (mybullet[i].IsShow() &&
Collision(ePlane[i], mybullet[j])) {
mybullet[j].ShowFalse();
ePlane[i].SetState(PlaneGameObject.BOMBING);
} //if
} //for j
//whether collaps with my plane
if (Collision(ePlane[i], myplane)) {
ePlane[i].SetState(PlaneGameObject.BOMBING);
myplane.ChangeHP( -1);
myplane.SetState(PlaneGameObject.HIT);
if (myplane.getHP() <= 0) {
myplane.SetState(PlaneGameObject.BOMBING);
}
}
} //if
} //for i
//enemy boss send bullets
if (eBoss.IsShow() && ClockTag % 100 == 0) {
sendBullet(eBoss.getXPos(), eBoss.getYPos(), 2);
}
//judge whether boss hitten
if (eBoss.IsShow()) {
for (i = 1; i < mybullet.length; i++) {
if (mybullet[i].IsShow() && Collision(eBoss, mybullet[i])) {
mybullet[i].ShowFalse();
eBoss.SetState(PlaneGameObject.HIT);
eBoss.ChangeHP( -1);
if (eBoss.getHP() == 0) {
eBoss.SetState(PlaneGameObject.BOMBING);
}
} //if
} //for
} //if
} //void run()
void paint(Graphics g)
{
int x, y;
//draw enmey boss
if (eBoss.IsShow()) {
x = eBoss.getXPos();
y = eBoss.getYPos();
tempImage = eBoss.getImage();
switch (eBoss.getState()) {
case PlaneGameObject.ALIVE:
g.drawImage(tempImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
break;
case PlaneGameObject.HIT:
g.drawImage(BossRedImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
if (eBoss.getHP() > 10) {
eBoss.SetState(PlaneGameObject.ALIVE);
}
break;
case PlaneGameObject.BOMBING:
g.drawImage(BossExpImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
eBoss.ShowFalse();
}
} //if
//draw enemy planes
for (int i = 0; i < ePlane.length; i++) {
if (ePlane[i].IsShow()) {
x = ePlane[i].getXPos();
y = ePlane[i].getYPos();
switch (ePlane[i].getState()) {
case PlaneGameObject.ALIVE:
tempImage = ePlane[i].getImage();
g.drawImage(tempImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
break;
case PlaneGameObject.BOMBING:
g.drawImage(ExpImage, x, y,
Graphics.VCENTER | Graphics.HCENTER);
ePlane[i].ShowFalse();
break;
} //switch
} //if
} //for
} //void paint()
} //class ePlaneScroller
class ImageScroller
extends TimerTask
{
private final Timer m_updateTimer = new Timer();
private Image m_image;
private final int m_screenWidth;
private final int m_screenHeight;
private final int m_imageWidth;
private final int m_imageHeight;
private final int m_leftOffset;
private final int m_topOffset;
private int m_x;
private int m_y;
private int ClockTag = 0;
// private BackGround bground = new BackGround(1);
public ImageScroller(Canvas screen, int interval)
{
//m_image = bground.getImage();
try {
m_image = Image.createImage("/BackGround01.png");
}
catch (Exception e) {
m_image = null;
}
// calculate all the necessary constants
m_screenWidth = screen.getWidth();
m_screenHeight = screen.getHeight();
m_imageWidth = m_image.getWidth();
m_imageHeight = m_image.getHeight();
m_leftOffset = (m_screenWidth - m_imageWidth) / 2;
m_topOffset = (m_screenHeight - m_imageHeight) / 2;
m_y = m_screenHeight - m_imageHeight;
m_x = m_screenWidth;
m_updateTimer.schedule(this, 0, interval);
}
/**
* For each iteration of the scheduler, it updates the vertical position.
*/
public void run()
{
// scroll
m_x--;
ClockTag++;
if (ClockTag == 100) {
eBoss.ShowTrue();
}
}
/**
* Draws the background on the Graphics object specified.
*
* @param g The Graphics object on which to draw the background.
*/
public void paint(Graphics g)
{
// if we have reached the screen height then move back to bottom
if (m_x <= 0) {
g.drawImage(m_image, m_screenWidth, m_topOffset,
Graphics.TOP | Graphics.RIGHT);
m_x = m_screenWidth;
}
else if (m_x <= m_imageWidth) {
g.drawImage(m_image, m_screenWidth + m_x, m_topOffset,
Graphics.TOP | Graphics.RIGHT);
}
g.drawImage(m_image, m_x, m_topOffset,
Graphics.TOP | Graphics.RIGHT);
}
} //end of class ImageScroller
} //end of class PlaneGameCanvas
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -