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

📄 maincanvas.java

📁 智益类游戏
💻 JAVA
字号:


import java.io.IOException;
import java.util.Vector;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;


public class MainCanvas extends GameCanvas implements Runnable {
    Graphics g;                             //  paint 
    int scrWidth;   
    int scrHeight;
    private boolean isRunning;
    Image bg;
    private int gameBgCount=-20;
    Image Teeth;
    private int gameLevel=1;
    private gameFlat gf=null;
    private Vector flatList;
    private int FlatRefresh=50;
    private int FlatSize=5;
    private int gameCount=0;
    private boolean isOnFlat=false;
    private gameChar gc=null;
    private gameFly fly=null;
    private int count=0;
    private int sleeptime=100;
	public MainCanvas() {
		super(true);
		init();
		start();
	}

	private void start()                              //线程
	{
	 isRunning=true;
	 Thread t=new Thread(this);
	 t.start();
	 
		
	}

	private void init() {
	g=getGraphics();
	scrWidth=getWidth();
	scrHeight=getHeight();
	flatList=new Vector();
	this.setFullScreenMode(true);                    //全屏
	try {
		bg=Image.createImage("/res/bg.png");
		Teeth=Image.createImage("/res/teeth.png");
	} catch (IOException e) {
		
		e.printStackTrace();
	}
	
		
	}

	public void Stop() {
		isRunning=false;
		
	}

	public void run() {
	while(isRunning){
		
		Logic();
		Paint();
		try {
			Thread.sleep(sleeptime);
		} catch (InterruptedException e) {
		
			e.printStackTrace();
		}
	}
		
	}
	
	private void Paint() {
		g.setColor(0xffffff);
		g.fillRect(0,0,scrWidth,scrHeight);
		g.setColor(0);
		g.drawImage(bg,0,gameBgCount, 0);
		g.drawImage(Teeth,0,20,0);
		g.setColor(0);
		g.fillRect(0,0,scrWidth, 20);
		g.setColor(0x00ffff);
		g.drawString("NO.",5,1,20);
		g.drawString(Integer.toString(gameLevel),25,1, 20);		
		g.drawString("Life: ",40,1, 20);
		g.drawString("Status: ",100,1,20);
		if(gc!=null){
			String str=new String();
			switch(gc.getGameStatus()){
			case gameChar.GAME_STATUS_NORM:
				str="NORM";
				break;
			case gameChar.GAME_STATUS_CONF:
				g.setColor(0xff7f50);
				str="CONF";
				break;
			case gameChar.GAME_STATUS_SPEEDUP:
				g.setColor(0xff7f50);
				str="SPEEDUP";
				break;
			}
			g.drawString(str, 135, 1, 20);
		}
		g.setColor(0xff0000);
		g.fillRect(60, 1, 30, 15);
		if(gc!=null){
		for(int i=0;i<gc.getCharLife();i++)
		{
			g.setColor(0xf08080);
			g.fillRect(60+i*10, 2,9, 13);
		}
		}	
		for(int i=0;i<flatList.size();i++)
		{
			gf=(gameFlat)flatList.elementAt(i);
			gf.paint(g);
		}
		if(gc!=null)
		{
			gc.nextFrame();
			gc.paint(g);
		}
		if(fly!=null)
		{
			fly.nextFrame();
			fly.paint(g);
		}
		
		if(isRunning==false)
		{
		
			g.setColor(0xffffff);
			g.fillRect(0,0,scrWidth,scrHeight);
			g.setColor(0);
			g.setColor(0xda000e);
			g.drawString("GAMEOVER", getWidth()/2-20,getHeight()/2, 20);
		}
		
		g.setColor(0);
		g.fillRect(0, getHeight()-20, getWidth(), 20);
		g.setColor(0xffffff);
		g.setColor(0xffa07a);
		g.drawString("层数: "+count+"", 135, 175, 20);
		
		g.drawString("ww",10 ,175 , 20);
		
		this.flushGraphics();
		
	}

	private void Logic() 
	{
		if(gameBgCount<0)
			gameBgCount++;
		else
			gameBgCount=-20;
		
		gameCount++;
		GameLevel();
		if(gameCount%200==0)
		{
			if(gc!=null)
			gc.setCharLife(true);
		}
		
		if(gameCount%100==0)
		{
			if(fly==null){
				fly=new gameFly();
			}
		}
		
		if(fly!=null){
		if(fly.collidesWith(gc, true))
		{
			fly.doOnChar(gc	);
			fly=null;
		}else{
			if(fly.isBottom())
				fly=null;
			else
				fly.down();
			
		}
		}
		
		
		
		if(gameCount%FlatRefresh==0 && flatList.size()<=FlatSize)
		{
			if(flatList.size()==0)
			gf=new gameFlat(true);
			else 
				gf=new gameFlat(false);
			flatList.addElement(gf);
		}
		for(int i=0;i<flatList.size();i++)
		{
			gf=(gameFlat)flatList.elementAt(i);
			gf.nextFrame();
			gf.up();
//         生成人物
			if(gc==null)
			{
				gc=new gameChar(gf.getX(),gf.getY());
			}
//         判断碰撞 平台和人物
			if(gf.collidesWith(gc,false))
			{
				isOnFlat=true;
				gf.doOnChar(gc);
			    
				
			}else
			{
				
				
			}
			
			if(gf.IsTop()){
				flatList.removeElementAt(i);
				count++;
			}
		}
		
		
		Input();
		if(!isOnFlat&&gc!=null)
		{
			gc.down();
			
		}
		
		isOnFlat=false;
		if(gc!=null){
			gc.statusTimeGo();
		}
		if(gc!=null){
			if(gc.isDead())
			{
				isRunning=false;
			}
			}
		
	}

	private void GameLevel() {
		switch(count/5){
		case 0:
			gameLevel=1;
			sleeptime=100;
			break;
		case 1:
			gameLevel=2;
			sleeptime=80;
			break;
		case 2:
			gameLevel=3;
			sleeptime=50;
			break;
		case 3:
			gameLevel=4;
			sleeptime=20;
			break;
		case 4:
			gameLevel=5;
			sleeptime=10;
			break;
		}
		
	}

	private void Input() {
		 int keyState=this.getKeyStates();
//	      向左
	        if((keyState&GameCanvas.LEFT_PRESSED)!=0)
	        {
	            if(gc!=null)       
	            {
	                gc.setAct(0,isOnFlat);
	                gc.Left();
	            }
	            return;
	        }
//        向右
	        if((keyState&GameCanvas.RIGHT_PRESSED)!=0)
	        {
	            if(gc!=null)
	            {
	                gc.setAct(1,isOnFlat);
	                gc.Right();
	            }
	            return;
	        }
//        跳或者站
	        if(gc!=null)
	        {
	            gc.setAct(2,isOnFlat);
	        }
	}

}

⌨️ 快捷键说明

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