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

📄 maincanvas.java

📁 j2me 小游戏
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.*;
/*
*主游戏类1;
*
*/

public class MainCanvas extends GameCanvas implements Runnable,CommandListener{
    public GameMIDlet game;
   
    private HPImage hpg;
    private Command back;
    private int dir=0;
    private Graphics g;
    private LayerManager lm;
    private int viewX;
    private int viewY;
    private Sprite qingting;
    private Sprite huan;
    private Sprite die;
    private HeroSprite hero1;
    private HeroSprite hero2;
    private Sprite texiao1;
    private Sprite texiao2;
    
    public Player player;
    private VolumeControl vc;
	private InputStream is;
   
    private TiledLayer backtl;//背景。
    private int[] backtile={1,1};
    private static final int STAND=1;
    private static final int LIFT=2;
    private static final int RIGHT=3;
    private static final int UP=4;
    private static final int DOWN=5;
    
    public int weight=0; 
     private Monster[] monster1Array=new Monster[6];
     private Monster2[] monster2Array=new Monster2[6];
     private BossOne bs;
     private Sprite huo;
 
    public MainCanvas(GameMIDlet game){
        super(true);
        this.game=game;
		Configure.score=0;
        back=new Command("back",Command.BACK,1);
        addCommand(back);
        setCommandListener(this);
        setFullScreenMode(true);
         Music mc=new Music();
        if(Configure.shero==0){
            hero1=new HeroSprite(ImageTools.creatImage("/juese/mingren/4mingrenchuchang44x53x10.png"),44,53);
            } else{
                hero1=new HeroSprite(ImageTools.creatImage("/juese/xiaoying/2putonggongji54X45X5.png"),54,45);
           }
            qingting=new Sprite(ImageTools.creatImage("/juese/qingting.png"),35,24);
            texiao1=new Sprite(ImageTools.creatImage("/juese/mingren/4mingrenchuchang370x23x5.png"),74,23);
            texiao2=new Sprite(ImageTools.creatImage("/juese/mingren/1mingrengongji.png"),29,41);
            huan=new Sprite(ImageTools.creatImage("/back/huan.png"),22,23);
          
            Image manster1Img=ImageTools.creatImage("/juese/manster1.png");
            Image manster2Img=ImageTools.creatImage("/juese/monster2.png");
            for(int i=0;i<monster1Array.length;i++){
                monster1Array[i]=new Monster(manster1Img,80,56,hero1);
            }
            for(int i=0;i<monster2Array.length;i++){
                monster2Array[i]=new Monster2(manster2Img,55,51,hero1);
            }
            bs=new BossOne(ImageTools.creatImage("/juese/boss/guaiwugengji45x60x5.png"),45,60,hero1);
            huo=new Sprite(ImageTools.creatImage("/juese/boss/hand.png"),48,22);
            die=new Sprite(ImageTools.creatImage("/juese/boss/dao62x55x5.png"),62,55);
        
        g=getGraphics();
        lm=new LayerManager();
        hero1.setPosition(10,95);
        texiao1.setPosition(0,125);
        huan.setPosition(1920,90);
        bs.setPosition(1800,95);
        die.setPosition(1800,95);
        huo.setPosition(1800,88);
        for(int i=0;i<monster1Array.length;i++){
                monster1Array[i].setPosition(i*200+200,95);
            }
            for(int i=0;i<monster2Array.length;i++){
                monster2Array[i].setPosition(i*200+100,95);
            }
    
        backtl=new TiledLayer(2,1,ImageTools.creatImage("/back/tianyuan971x176.png"),971,176);
             for(int i=0;i<2;i++){
            backtl.setCell(i,0,backtile[i]);
        }
        
       /*  向管理器里加东西 */
       lm.append(qingting);
       lm.append(hero1);
   
        for(int i=0;i<monster1Array.length;i++){
            lm.append(monster1Array[i]);
        }
        for(int i=0;i<monster2Array.length;i++){
            lm.append(monster2Array[i]);
        }
        lm.append(texiao1);
        lm.append(bs);
        lm.append(huo);
        lm.append(backtl); 
        hpg=new HPImage(g);
        new Thread(this).start();//启动线程
    }
    /*
	*线程
	*/
    public void run(){
    while(true){
        try{
                Thread.sleep(78);
            }catch(Exception e){e.printStackTrace();}
            render();
            gameLogic();
            
        if(hero1.lifenum<=0&&hero1.currentHp<=0){//判断主角死亡;
                lm.remove(hero1);
                
                hero1=null;
                try{
                Music.player.stop();
            is = (this.getClass()).getResourceAsStream("/music/over.mid");
			player = Manager.createPlayer(is,"audio/midi");
			player.realize();
			player.prefetch();
		    vc = (VolumeControl)player.getControl("VolumeControl");
            vc.setLevel(Configure.volume);
			player.start();
                }catch(Exception e){e.printStackTrace();}
                game.show(game.OVER);
                break;
        }
        if(hero1.collidesWith(huan,false)){//切换场景;
            game.show(game.MAIN2);
            game.main=null;
            break;
        }
    }
    
    }
	/*
	*绘制;
	*/
    public void render(){
        g.setColor(0xffffff);
        g.fillRect(0,0,getWidth(),getHeight());
        lm.setViewWindow(viewX,viewY,getWidth(),getHeight());
        lm.paint(g,0,0);
        hpg.showHP(hero1);//显示角色的血量和生命数。
        flushGraphics();
    }
	/*
	*游戏逻辑;
	*/
    public void gameLogic(){
        huo.move(-4,0);//怪物子弹;
        if(huo.getX()<1650){
            huo.setPosition(1800,98);
        }
        if(hero1.collidesWith(huo,false)){
            hero1.currentHp-=2;
        }
        if(bs.mhp<=0){//判断怪物死亡;
            lm.remove(bs);
            lm.remove(huo);
            huo.setPosition(-100,-100);
            lm.insert(die,2);
            lm.insert(huan,2);
            Configure.score+=1000;
			bs.mhp=100;
        }
        qingting.move(2,0);//背景蜻蜓;
        if(hero1.currentHp<=0&&hero1.lifenum>=1){//生命与血量的转换;
            hero1.lifenum-=1;
            hero1.currentHp=100;
        }
        for(int i=0;i<monster1Array.length;i++){//设置小怪;
            if(monster1Array[i]!=null&&monster1Array[i].mhp<=0){
                monster1Array[i].setPosition(-100,-200);
                lm.remove(monster1Array[i]);
                Configure.score+=100;
				monster1Array[i].mhp=60;
               
            }
        }
        for(int i=0;i<monster2Array.length;i++){
            if(monster2Array[i]!=null&&monster2Array[i].mhp<=0){
                lm.remove(monster2Array[i]);
                monster2Array[i].setPosition(-100,-200);
                Configure.score+=100;
				monster2Array[i].mhp=60;
                
            }
        }
     
     
       
        weight=weight+3;
        hero1.move(0,weight);
        int key=getKeyStates();
        if(hero1.getY()>95){//落地
            hero1.move(0,-weight);
            weight=0;
        }
        if(key==0){//不按键状态
            if(hero1.herostate!=hero1.STAND_RIGHT){
                hero1.herostate=hero1.STAND_RIGHT;
                if(Configure.shero==0){
                    hero1.setImage(ImageTools.creatImage("/juese/mingren/xiaoying29x51x2.png"),29,51);
                }else{
                    hero1.setImage(ImageTools.creatImage("/juese/xiaoying/zhanli.png"),21,48);
                  
               }
            }
        }
        if((key&GameCanvas.RIGHT_PRESSED)!=0){//往前走
            lm.remove(texiao1);
            hero1. rightwalk();
            viewX=viewX+3;
               if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
             hero1.move(-3,0);
            } 
            if(viewX>backtl.getWidth()-getWidth()){
                viewX=viewX-3;
            }
            if(hero1.getX()<getWidth()/2-hero1.getWidth()){
                viewX=viewX-3;
            }
    
          
	    }
        
      
          if((key&GameCanvas.LEFT_PRESSED)!=0){//往后走
            hero1.leftwalk();
             viewX=viewX-3;
               if(hero1.getX()<0){
                hero1.move(3,0);
            }
            if(viewX<0){
                viewX=viewX+3;
            }
            if(hero1.getX()>viewX+getWidth()/2){
                viewX=viewX+3;
            }
        }
        if((key&GameCanvas.FIRE_PRESSED)!=0 ){//攻击
           hero1.kit();
          /*  攻击怪物,怪物掉血; */
          for(int i=0;i<monster1Array.length;i++){
            if(hero1.collidesWith(monster1Array[i],false)){
                monster1Array[i].mhp-=5;
            }
        }
        for(int i=0;i<monster2Array.length;i++){
            if(hero1.collidesWith(monster2Array[i],false)){
                monster2Array[i].mhp-=5;
            }
        }
        if(hero1.collidesWith(bs,false)){
            bs.mhp-=4;
        }
      
           
           
        }
         if((key&GameCanvas.UP_PRESSED)!=0){//往上跳。
           hero1.jumpup(weight);
           
            
        } 
        if((key&GameCanvas.UP_PRESSED)!=0&&(key&GameCanvas.RIGHT_PRESSED)!=0){//前斜跳
           hero1.jumpright(weight);
            viewX=viewX+3;
              if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
             hero1.move(-3,0);
            } 
            if(viewX>backtl.getWidth()-getWidth()){
                viewX=viewX-3;
            }
            if(hero1.getX()<getWidth()/2-hero1.getWidth()){
                viewX=viewX-3;
            } 
      
        } 
        if((key&GameCanvas.UP_PRESSED)!=0&&(key&GameCanvas.LEFT_PRESSED)!=0){//后跳
        hero1.jumpleft(weight);
         viewX=viewX-3;
            if(hero1.getX()<0){
                hero1.move(3,0);
            }
            if(viewX<0){
                viewX=viewX+3;
            }
            if(hero1.getX()>viewX+getWidth()/2){
                viewX=viewX+3;
            }
        }
        if((key&GameCanvas.GAME_A_PRESSED)!=0){//前跑
            hero1.runright();
            viewX=viewX+7;
              if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
             hero1.move(-7,0);
            } 
            if(viewX>backtl.getWidth()-getWidth()){
                viewX=viewX-7;
            }
            if(hero1.getX()<getWidth()/2-hero1.getWidth()){
                viewX=viewX-7;
            } 
            
        }
       /*  if((key&GameCanvas.GAME_B_PRESSED)!=0){
            hero1.die();
            
        } */
     /*    if((key&GameCanvas.GAME_C_PRESSED)!=0){
            hero1.beikit();//被打
            
        } */
        /* if((key&GameCanvas.GAME_D_PRESSED)!=0){//技能攻击
            hero1.jineng(weight); 
            lm.append(texiao2);
            texiao2.setPosition(hero1.getX()+33,hero1.getY());
            viewX=viewX+3;
            if(hero1.getX()>(backtl.getWidth()-hero1.getWidth())){
             hero1.move(-3,0);
            } 
            if(viewX>backtl.getWidth()-getWidth()){
                viewX=viewX-3;
            }
            if(hero1.getX()<getWidth()/2-hero1.getWidth()){
                viewX=viewX-3;
            }
        
        } */
        qingting.nextFrame();
        
        hero1.nextFrame();
        for(int i=0;i<monster1Array.length;i++){
            monster1Array[i].act();
            monster1Array[i].nextFrame();
        }
        for(int i=0;i<monster2Array.length;i++){
            monster2Array[i].act();
            monster2Array[i].nextFrame();
        }
      
        texiao1.nextFrame();
        texiao2.nextFrame();
        bs.nextFrame();
        huo.nextFrame();
        huan.nextFrame();
        die.nextFrame();
    }
    
    public void commandAction(Command c,Displayable d){//软件接口方法
        if(c==back){
        game.show(game.MENU);
         try{
        Music.player.stop();}catch(Exception e){e.printStackTrace();}
        }
        
    }
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -