📄 planegamecanvas.java~3~
字号:
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()) //if found available place in array
{ //generate a radom int
temp = (generator.nextInt() % (3*m_maxY));
if (temp < m_maxY) //if radom int in the screen
{ //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) //if plane out of screen
{ //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 + -