⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vadermanager.java

📁 一个不错的动作类游戏
💻 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 + -