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

📄 mycanvas.java

📁 JAVA游戏开发的基本框架设计
💻 JAVA
字号:
import javax.microedition.lcdui.*;

public class MyCanvas extends Canvas implements Runnable
{
	Image playerImage;
	Image bufferImage;
	int playerX, playerY;
	int action;
	Map gameMap;
	public MyCanvas()
	{
		bufferImage = Image.createImage(176, 208);
		
		action = 1;
		initSign = true;
		
		Thread t = new Thread(this);
		
		t.start();
	}
	
	boolean isRunning;
	int whichframe;
	final int SPEED = 4;
	int director = 2;
	
	boolean initSign, releaseSign;
	public void run()
	{
		Graphics g = bufferImage.getGraphics();
		while(true)
		{
			if(releaseSign)release();
			if(initSign)init();
				
			if(isRunning)
			{
				movePlayer();
			}
			bufferPaint(g);
			
			
			repaint();
			
			System.gc();
			try
			{
				Thread.sleep(80);
			}
			catch(Exception e)
			{
				
			}
		}
	}
	public void release()
	{
		switch(preAction)
		{
			case 1: break;
			case 2: break;
			case 3:
				playerImage = null;
			break;
		}
		releaseSign = false;
	}
	
	int preAction;
	public void init()
	{
		
		switch(action)
		{
			case 1: break;
			case 2: break;
			case 3:
				//System.out.println("....");
				gameMap = new Map();
				gameMap.getDataes();
				gameMap.createImage();
				try
				{
					playerImage = Image.createImage("/c.png");
				}
				catch(java.io.IOException ioe)
				{
					System.out.println("Can not open Image file");
				}
			break;
		}
		initSign = false;
	}
	
	public void bufferPaint(Graphics g)
	{
		g.translate(-g.getTranslateX(), - g.getTranslateY());
		g.setColor(255, 255, 255);
		g.fillRect(0, 0, 176, 208);
		
		
		switch(action)
		{
			case 1: menuPaint(g); break;
			case 2: helpPaint(g); break;
			case 3: playPaint(g); break;
		}
	}
	
//menu
	public void menuPaint(Graphics g)
	{
		
		g.translate(50, 50);
		if(menuSeclect == 0)g.setColor(0XFF0000);else g.setColor(0);
		g.drawString("开始", 0, 0, 0);
		g.translate(0, 15);
		if(menuSeclect == 1)g.setColor(0XFF0000);else g.setColor(0);
		g.drawString("帮助", 0, 0, 0);
	}
	int menuSeclect = 0;
	
	public void menuKeyPressed(int gA)
	{
		switch(gA)
		{
			case UP:	menuSeclect--; if(menuSeclect < 0)menuSeclect = 1;break;
			case DOWN:	menuSeclect++; if(menuSeclect > 1)menuSeclect = 0;break;
			case FIRE:	
				switch(menuSeclect)
				{
					case 0:
						preAction = action;
						action = 3;
						releaseSign = initSign = true;
					break;
					case 1:action = 2;break;
				}
			break;
		}
	}
	
	
//@ menu

	
// Help
	public void helpPaint(Graphics g)
	{
		g.setColor(0);
		g.drawString("帮助", 0, 0, 0);
	}
	public void helpKeyPressed(int gA)
	{
		action = 1;
	}
//@ Help
	

// Gaming
	public void movePlayer()
	{
		whichframe++;
		boolean isCollided = true;
		try
		{
			isCollided = isCollided();
		}
		catch(ArrayIndexOutOfBoundsException aiob)
		{}
		if(!isCollided)
		{
			if(!mapMove())
			{
				switch(director)
				{
					case 0:playerY -= SPEED;break;
					case 1:playerX += SPEED;break;
					case 2:playerY += SPEED;break;
					case 3:playerX -= SPEED;break;
				}
			}
		}
	}
	
	int mapOffsetX;
	public boolean mapMove()
	{
		if(director == 1)
		{
			if(playerX > bufferImage.getWidth() / 2 && mapOffsetX < (gameMap.mapImage.getWidth() - bufferImage.getWidth()))
			{
				mapOffsetX += SPEED;
				return true;
			}
		}
		else if(director == 3)
		{
			if(playerX < bufferImage.getWidth() / 2 && mapOffsetX > 0)
			{
				mapOffsetX -= SPEED;
				return true;
			}
		}
		return false;
	}
	
	public boolean isCollided() throws ArrayIndexOutOfBoundsException
	{
		if(director == 1)
		{
			int x1 = (playerX + 16 + SPEED + mapOffsetX) >> 4;
			//uloaix: int x2 = (playerX + 20) >> 4;
			int y1 = (playerY + 16) >> 4;
			int y2 = (playerY + 22) >> 4;
			
			for(int i = y1; i <= y2; i++)
			{
				if(gameMap.data[i][x1] != 0)return true;
			}	
		}
		else if(director == 3)
		{
			int x1 = (playerX + 4 - SPEED + mapOffsetX) >> 4;
			//uloaix: int x2 = (playerX + 20) >> 4;
			int y1 = (playerY + 16) >> 4;
			int y2 = (playerY + 22) >> 4;
			
			for(int i = y1; i <= y2; i++)
			{
				if(gameMap.data[i][x1] != 0)return true;
			}	
		}
		else if(director == 0)
		{
			if(playerY - SPEED < 0)return true;
			int x1 = (playerX + 7 + mapOffsetX ) >> 4;
			int x2 = (playerX + 16 + mapOffsetX) >> 4;
			int y1 = (playerY + 16 - SPEED) >> 4;
			//uloaix: int y2 = (playerY + 24) >> 4;
			
			for(int i = x1; i <= x2; i++)
			{
				if(gameMap.data[y1][i] != 0)return true;
			}	
		}
		else if(director == 2)
		{
			int x1 = (playerX + 7 + mapOffsetX ) >> 4;
			int x2 = (playerX + 16 + mapOffsetX) >> 4;
			int y1 = (playerY + 20 + SPEED) >> 4;
			//uloaix: int y2 = (playerY + 24) >> 4;
			
			for(int i = x1; i <= x2; i++)
			{
				if(gameMap.data[y1][i] != 0)return true;
			}	
		}
		
		return false;
	}
	
	public void playPaint(Graphics g)
	{
		g.setClip(0, 0, 176, 208);
		g.drawImage(gameMap.mapImage, -mapOffsetX, 0, 0);
		
		g.translate(playerX, playerY);
		g.setClip(0, 0, 24, 24);
		int __w = whichframe % 4;
		if(__w == 3)__w = 1;
		g.drawImage(playerImage, -24 * __w, -24 * director, 0);
	}

	public void playKeyPressed(int gA)
	{
		switch(gA)
		{
			case UP:	director = 0;	isRunning = true;break;
			case DOWN:	director = 2;	isRunning = true;break;
			case LEFT:	director = 3;	isRunning = true;break;
			case RIGHT:	director = 1;	isRunning = true;break;
		}
	}
//@Gaming

// invoke part	
	public void paint(Graphics g)
	{
		g.setColor(0);
		g.fillRect(0, 0, getWidth(), getHeight());
		g.setColor(255, 0, 0);
		
		g.drawImage(bufferImage, getWidth() - 176 >> 1, getHeight() - 208 >> 1, 0);
	}
	
	public void keyPressed(int keyCode)
	{
		int gA = getGameAction(keyCode);
		switch(action)
		{
			case 1:	menuKeyPressed(gA);break;
			case 2:	helpKeyPressed(gA);break;
			case 3:	playKeyPressed(gA);break;
		}
	}
	

	public void keyReleased(int keyCode)
	{
		if(action == 3)isRunning = false;
	}
//@ end invoke
}

⌨️ 快捷键说明

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