📄 vadermanager.java
字号:
/**
* <p>Title: DemoRacer</p>
* <p>Description: Game API Demo for Symbian MIDP 2.0 Book.</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: Symbian Ltd</p>
* @author Alan Newman - alan@sensibledevelopment.net
* @version 1.0
*/
import javax.microedition.lcdui.*;
import java.util.Vector;
import java.io.IOException;
public class VaderManager {
private Graphics graphics;
private BackGround backGround;
private Image imgBackground;
private Alien alien;
private Image imgAlien;
private Player player;
private Image imgPlayer;
private Bullet bullet;
private Image imgBullet;
private Barrier barrier;
private Image imgBarrier;
private int xWindow;
private int yWindow;
private static VaderCanvas gameCanvas;
private int currentLayer;
private int layers;
protected Vector vtrAliens;
protected Vector vtrBullets;
protected Vector vtrBarriers;
protected Vector vtrLayers;
Font font;
int fHeight=0;
private final String STR_OK="OK";
private String strLevelOver1="Level Over";
private boolean isLevelOver=false;
private String strScore="Score: ";
private int intScore=0;
public VaderManager(VaderCanvas gameCanvas)
{
font=Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
fHeight=font.getHeight();
this.gameCanvas=gameCanvas;
vtrAliens = new Vector();
vtrBullets = new Vector();
vtrBarriers = new Vector();
vtrLayers = new Vector();
backGround=createBackground();
imgBackground=backGround.getImage();
player=createPlayerSprite();
imgPlayer=player.getImage();
bullet=createBulletSprite();
imgBullet=bullet.getImage();
initBarriers();
initAliens();
Alien.setLayerManager(this);
Bullet.setLayerManager(this);
Player.setLayerManager(this);
}
public static VaderCanvas getGameCanvas() {return gameCanvas;}
public Player getPlayer() {return player;}
public Vector getBarriers() {return vtrBarriers;}
public void setScore(int s) {intScore=s;}
public int getScore() {return intScore;}
public boolean getLevelOver() {return isLevelOver;}
public void setLevelOver(boolean isOver)
{
isLevelOver=isOver;
gameCanvas.setRunning(false);
}
public Graphics getGraphics() {return graphics;}
private void append(Object layer)
{
vtrLayers.addElement(layer);
}
private void remove(Object layer)
{
vtrLayers.removeElement(layer);
}
public void removeLayer(Object layer)
{
if(layer.getClass().getName().equals("Alien"))
{
vtrAliens.removeElement(layer);
}
else if(layer.getClass().getName().equals("Bullet"))
{
vtrBullets.removeElement(layer);
}
layers--;
currentLayer--;
remove(layer);
if(vtrAliens.size()==0)
{
setLevelOver(true);
}
}
public void tick()
{
// return the number of layers in the LayerManager.
layers=vtrLayers.size();
// create a reference to the Alien and Bullet objects
Alien alien;
Bullet bullet;
// cycle through the layers until we find the ones
// we are interested in.
for (currentLayer=0;currentLayer<layers;currentLayer++)
{
Object layer=vtrLayers.elementAt(currentLayer);
if(layer.getClass().getName().equals("Alien"))
{
alien=(Alien)layer;
alien.tick();
}
else if(layer.getClass().getName().equals("Bullet"))
{
bullet=(Bullet)layer;
bullet.tick();
}
}
// TO DO detect collision with Barrier object
}
private void initAliens()
{
int r=0;
int c=0;
int rows=0;
int cols=0;
int xPos=0;
int yPos=0;
int height = 0;
int width = 0;
int spaceHeight=0;
int spaceWidth=0;
int fHeight=font.getHeight();
Alien alien=createAlienSprite();
width = alien.getWidth() / Alien.FRAMES;
height = alien.getHeight();
spaceHeight=(int)(gameCanvas.getHeight()-((Barrier)vtrBarriers.elementAt(0)).getX()-(font.getHeight()*2))/2;
spaceWidth=gameCanvas.getWidth();
rows=(int)(spaceHeight/height);
cols=(int)((spaceWidth*3/4)/width);
Alien.setRows(rows);
Alien.setCols(cols);
int aCount=rows*cols;
for (int i=0;i<aCount; i++)
{
c = i % cols;
r = (i - c) / cols;
xPos=(width+Alien.colOffset)*c;
yPos=(fHeight*2)+(height+Alien.rowOffset)*r;
alien.setPosition(xPos, yPos);
append(alien);
vtrAliens.addElement(alien);
alien=createAlienSprite();
}
}
private void initBarriers()
{
Image image = null;
int col;
int xPos, yPos;
int iWidth=1;
int iHeight=1;
Barrier barrier;
// assuming two barriers per screen plus two barrier space in between
// therefore what is a 1/4 of the screen - dependent upon the barrier image dimensions.
for (col = 0; col < Barrier.getCols(); col++)
{
barrier=createBarrierSprite(gameCanvas.getWidth(), gameCanvas.getHeight());
xPos=((int)barrier.getWidth()/2)+(barrier.getWidth()*col*barrier.getTileWidth());
yPos=getPlayer().getY()-barrier.getHeight();
barrier.setPosition(xPos, yPos);
append(barrier);
vtrBarriers.addElement(barrier);
}
}
public void initBullets()
{
Bullet bullet=createBulletSprite();
append(bullet);
vtrBullets.addElement(bullet);
}
public void paint(Graphics g)
{
graphics=g;
g.setFont(font);
g.drawImage(imgBackground,0,0,g.TOP|g.LEFT);
//g.drawImage(imgPlayer,player.getX(),player.getY(),g.TOP|g.LEFT);
player.draw();
Barrier barrier;
for(int i=0;i<vtrBarriers.size();i++)
{
barrier=(Barrier)vtrBarriers.elementAt(i);
g.drawImage(barrier.getImage(),barrier.getX(),barrier.getY(),g.TOP|g.LEFT);
}
Bullet bullet;
for(int i=0;i<vtrBullets.size();i++)
{
bullet=(Bullet)vtrBullets.elementAt(i);
g.drawImage(bullet.getImage(),bullet.getX(),bullet.getY(),g.TOP|g.LEFT);
}
Alien alien;
for(int i=0;i<vtrAliens.size();i++)
{
alien=(Alien)vtrAliens.elementAt(i);
alien.draw();
}
g.setColor(255,255,0);
g.drawString(strScore+intScore+" Fps: "+gameCanvas.getAverageFrameRate(),gameCanvas.getWidth()/2, 0, g.TOP|g.HCENTER);
g.drawString("BAvg Kb:"+gameCanvas.getAverageMemoryUsage()+"%, High: "+gameCanvas.getMemoryHigh()+", Low: "+gameCanvas.getMemoryLow(),gameCanvas.getWidth()/2, font.getHeight(), g.TOP|g.HCENTER);
if(isLevelOver)
{
g.drawString(strLevelOver1,gameCanvas.getWidth()/2, gameCanvas.getHeight()*1/3, g.TOP|g.HCENTER);
}
}
public void doGameAction(int gameAction)
{
if(gameAction==Canvas.LEFT)
{
player.left();
}
else if(gameAction==Canvas.RIGHT)
{
player.right();
}
else if(gameAction==Canvas.FIRE)
{
player.fire();
}
}
private BackGround createBackground()
{
return new BackGround(gameCanvas.getWidth(), gameCanvas.getHeight());
}
private Barrier createBarrierSprite(int canvasWidth, int canvasHeight)
{
return new Barrier(canvasWidth, canvasHeight);
}
private Player createPlayerSprite()
{
return new Player(gameCanvas.getWidth(), gameCanvas.getHeight());
}
private Bullet createBulletSprite()
{
return new Bullet(player);
}
public Alien createAlienSprite()
{
return new Alien(gameCanvas.getWidth(), gameCanvas.getHeight());
}
protected static Image[] getFrames(String imgName, int frames)
{
Image[] images = new Image[frames];
int i=0;
String iName="";
try
{
for (i=0;i<frames;++i)
{
iName=imgName+"_"+i+".png";
images[i] = Image.createImage("/"+iName);
}
}
catch(java.io.IOException e)
{
e.printStackTrace();
System.out.println("Image, "+iName+", could not be loaded.");
}
return images;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -