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

📄 castlevania_canvas.java

📁 在学校时写的一个游戏DEMO
💻 JAVA
字号:
import java.io.IOException;

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

public class Castlevania_Canvas extends Canvas implements Runnable{
	public Castlevania_Canvas() {
		setFullScreenMode(true);//设置全屏
		bufferImage=Image.createImage(176,208);
		new Thread(this).start();//启动线程
	}
	public void run() {
		long begin;//用来记录临时时间
		while(!isRunning){
//			System.out.println(Runtime.getRuntime().totalMemory());
			begin = System.currentTimeMillis();//获得系统时间
			gameLoop();//整个游戏的逻辑部分
			repaint();//重新刷新屏幕
			serviceRepaints();//强制线程重新刷新屏幕
			while(System.currentTimeMillis() - begin < 60);
			//为保证线程每次刷新一样,为0.1秒1次(1秒10次)
		}
	}
	protected static boolean isRunning;//线程标记
	protected static final int SCREEN_WIDTH=176;//屏幕宽度
	protected static final int SCREEN_HEIGHT=208;//屏幕高度
	//游戏状态集
	protected static byte iGameState;//当前游戏状态标记
	//以下是游戏基本状态集
	protected final static byte GS_LOGO = 0;
	protected final static byte GS_MENU1= 1;
	protected final static byte GS_MENU2=2;
	protected final static byte GS_CONTINUE = 3;
	protected final static byte GS_HELP = 4;
	protected final static byte GS_EXIT=5;
	protected final static byte GS_LOADGAME=6;
	protected final static byte GS_GAME = 7;
	//按键状态集
	protected static int keyCode;//记录按键值
	protected static int keyState;//当前的按键状态;
	//常量
	protected static Image logo;
	protected static Image t1;
	static int r;
	static int a;
	static int iCount;
	String str[]={"新游戏","继续游戏","游戏帮助","退出游戏"};
	static boolean isok;
	Engine engine;
	Image bufferImage = null;
	protected final void gameLoop(){//主逻辑处理部分
		switch(iGameState){
		case GS_LOGO:
			if(logo==null){
				try {
					logo=Image.createImage("/logo.png");
				} catch (IOException e) {
					// TODO 自动生成 catch 块
					e.printStackTrace();
				}
			}
			iCount++;
			if(iCount>=20){
				setGameState(GS_MENU1);
			}
			break;
		case GS_MENU1:
			if(t1==null){
				try {
					t1=Image.createImage("/t1.png");
					isok=true;
				} catch (IOException e) {
					// TODO 自动生成 catch 块
					e.printStackTrace();
				}
			}
			if(iCount<6){
				iCount++;
			}else{
				iCount=0;
			}
			break;
		case GS_MENU2:
			break;
		case GS_GAME:
			engine.runGame();
			break;
		case GS_LOADGAME:
			if(iCount<6){
				iCount++;
			}else{
				iCount=0;
			}
			if(o>=2){
				o-=2;
				if(o==60){
					engine=new Engine();
				}else if(o==20){
					engine.init();
					
				}
			}else{
				isok=true;
			}
			break;
		}
	}
	protected void paint(Graphics g) {//屏幕显示部分
		Graphics old=g;
		if(bufferImage!=null){ 
	    	g=bufferImage.getGraphics(); //将bufferImage的Graphics对象赋给g
	    }
		drawClearScreen(g,0XFFFFFF);
		switch(iGameState){//根据不同状态显示不同内容
		case GS_LOGO:
			drawLogo(g);
			break;
		case GS_MENU1:
			drawMenu(g);
			break;
		case GS_GAME:
			engine.drawGame(g);
			break;
		case GS_LOADGAME:
			drawLoadingScreen(g);
			break;
		}
		if(g!=old){ //要是图片已经发生改变则将缓冲区图片一次性画到屏幕上去 
		       old.drawImage(bufferImage,0,0,Graphics.LEFT|Graphics.TOP);
		}

	}
	//各种方法//
	public void drawClearScreen ( Graphics g , int Color ) { //清屏
        g.setClip( 0 , 0 , SCREEN_WIDTH , SCREEN_HEIGHT ) ;
        g.setColor( Color ) ;
        g.fillRect( 0 , 0 , SCREEN_WIDTH , SCREEN_HEIGHT) ;
   	
	}
	public void drawLogo(Graphics g){   //画LOGO       
		if(logo!=null){
			g.drawImage(logo,SCREEN_WIDTH/2,SCREEN_HEIGHT/2,g.VCENTER|g.HCENTER);
		}
	}
//	public void drawBlind(Graphics g){  // 画矩形效果  
//		g.setColor(0x000000);
//		for(int i=0;i<11;i++){
//			for(int j=0;j<13;j++){
//				g.fillRect(16/2-r/2+i*16,16/2-r/2+j*16,r,r);
//			}
//		}
//	}
	public void drawMenu(Graphics g){
		if(t1!=null){
			
			g.drawImage(t1,0,0,0);
			g.setColor(0xffffff);
			g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_SMALL));
			g.drawString("2008 ABCDEFGHIFJKIL",Tools.SCREEN_WIDTH/2,Tools.SCREEN_HEIGHT+48,g.HCENTER|g.BASELINE);
			g.setColor(0xfffff0);
		if(isok){
				 if(iCount>3){
				 g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_MEDIUM));
				 g.drawString("按确定键开始",Tools.SCREEN_WIDTH/2,Tools.SCREEN_HEIGHT+20,g.HCENTER|g.BASELINE);
				 }
			}else{
				GameUI.drawString(g,Tools.SCREEN_WIDTH/2,Tools.SCREEN_HEIGHT+20,"< "+str[r]+" >");
			}
		}
	}
	//画进度界面
	public boolean drawLoadingScreen(Graphics g){
		g.setColor(0x000000);
		g.fillRect(0,0,176,208);
		GameUI.drawRect(g,0,1,175,206,0);
		GameUI.drawRect(g,2,3,171,202,1);
//		g.setColor(158,79,7);
//		g.drawArc(10,10,120,120,0,360);
		drawSPLASH(g);
		GameUI.drawString(g,Tools.SCREEN_WIDTH/2,30,"4/6:移动");
		GameUI.drawString(g,Tools.SCREEN_WIDTH/2,50,"2:跳跃");
		GameUI.drawString(g,Tools.SCREEN_WIDTH/2,70,"5:攻击");
		GameUI.drawString(g,Tools.SCREEN_WIDTH/2,90,"8:下蹲");
		GameUI.drawString(g,Tools.SCREEN_WIDTH/2,110,"0:法术");
		return false;
	}
	//画进度条
	int o=96;
	public void drawSPLASH(Graphics g){
		if(isok){
			if(iCount>3){
				 GameUI.drawString(g,Tools.SCREEN_WIDTH/2,157,"按任意键开始");
				 }
		}else{
			g.setColor(149,117,13);
			g.drawRoundRect(20+18,150,100,9,4,4);
			g.setColor(40,40,40);
			g.drawLine(22+18,152,98+38,152);
			g.setColor(102,102,102);
			g.drawLine(22+18,153,98+38,153);
			g.setColor(153,153,153);
			g.drawLine(22+18,154,98+38,154);
			g.setColor(141,141,141);
			g.drawLine(22+18,155,98+38,155);
			g.setColor(72,72,72);
			g.drawLine(22+18,156,98+38,156);
			g.setColor(57,57,57);
			g.drawLine(22+18,157,98+38,157);
			
			g.setColor(236,87,0);
			g.drawLine(22+18,152,98+38-o,152);
			g.setColor(236,135,0);
			g.drawLine(22+18,153,98+38-o,153);
			g.setColor(236,192,121);
			g.drawLine(22+18,154,98+38-o,154);
			g.setColor(236,178,91);
			g.drawLine(22+18,155,98+38-o,155);
			g.setColor(236,135,0);
			g.drawLine(22+18,156,98+38-o,156);
			g.setColor(236,98,0);
			g.drawLine(22+18,157,98+38-o,157);
		}
	}
	//画帮助界面
	public void drawHelp(Graphics g){
		
	}
	//............................
	protected static final void getKeyState(){//获得单前的按键状态
		keyState = keyCode;
	}
	
	protected void keyPressed(int keys){//按键按下的处理部分
		keyCode = getGameAction(keys);
		switch(iGameState){
		case GS_MENU1:
			switch(keyCode){
			case Canvas.FIRE:
				if(r==0&&!isok){
					setGameState(GS_LOADGAME);
				}
				isok=false;
				break;
			case Canvas.LEFT:
				if(!isok){
					r--;
				}
				if(r<=-1){
					r=3;
				}
				break;
			case Canvas.RIGHT:
				if(!isok){
					r++;
				}
				if(r>=4){
					r=0;
				}
				break;
			}
			break;
		case GS_LOADGAME:
			if(isok)
			setGameState(GS_GAME);
			break;
		case GS_GAME:
			if(engine.isok==true){
			if(engine != null){
	            if(engine.role != null){
	                   engine.role.keyPressed(keyCode);}
	            	break;
				};
			break;
			}
		}
	}
	protected void keyReleased(int keys){//按键松开的处理
		keyCode = 0;
		switch(iGameState){
		case GS_GAME:
			if(engine.isok==true){
			if(engine != null){
	            if(engine.role != null)
	                   engine.role.keyReleased(getGameAction(keys));
			}
		break;
		}
     }
	}
	protected static final void setGameState(byte nowState){//利用此方法来切换状态
		switch (nowState) {
        case GS_LOGO: //GS_LOGO状态下初始化的数据
     	   iCount = 0;
     	   r=0;
            break;
        case GS_MENU1:
        	iCount = 0;
      	   r=0;
        	break;
        case GS_LOADGAME:
        	iCount = 0;
       	   r=0;
       	   isok=false;
         	break;
        case GS_GAME:
        	break;      
		}
		iGameState = nowState;//设置当前的游戏状态为参数nowState值
	}
}

⌨️ 快捷键说明

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