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

📄 fwmaincanvas.java

📁 J2ME 蓝牙对战游戏 大海战简化版 索爱w810
💻 JAVA
📖 第 1 页 / 共 2 页
字号:


import java.io.IOException;

import javax.microedition.lcdui.*;


//import lipeng.LPIGameStart;

public class FWmainCanvas
	extends Canvas
	implements Runnable
{	
	public int width;				//屏幕宽度
	private int height;			//屏幕高度

	public int mapbaseX,mapbaseY,mapwidth,mapheight;
	
	public int deltaX, deltaY;

	public int x, y;
	private long startTime;		//线程一次循环开始时间
	private long endTime;			//线程一次循环结束时间
	
//	private int splashCnt;			//闪屏出现时间计数
	private int FRAME_TIME=80;		//每一帧的时间,毫秒
	
	private volatile Thread mainThread = null;	//游戏主线程
	
	public int whichActive;		//表示当前活动的菜单项
	public int allAction;			//菜单的监控标志
	private Image bgimage;			//菜单的背景图片
	private boolean isVolOn;		//标志声音是否开
	private boolean isShkOn;		//标志震动是否开
	
	public int isInitDone;
	public int isFirst;
	
	public Graphics bg;
	public Image buffer;
	
	public FWLogger fwLog=new FWLogger(this);
	
	public Image imgFlightA;
	public Image imgFlightB;
	public Image imgFlightC;
	public Image imgFlightD;
	
	public Image imgShutDown;
	public Image imgShutBody;
	
	public int flightType=0;		//战斗机方向
	

	public FlightWarMIDlet midlet;	
	public FlightManager fm;
	
	public Font font;
	public Image MyMapBack;
	public Image InfoSpase;
	public Graphics gInof;
	
	public FWmainCanvas(FlightWarMIDlet midlet )
	{
		this.midlet = midlet;
		this.fm = new FlightManager(this);
		fm.gameState = FlightManager.GAMESTATE_MENU;
		whichActive = 0;			//设置初始活动的菜单项
		isInitDone = 0;				//默认确认完成布局选项0
		
		
		isVolOn = false;
		isShkOn = false;
		
		width = getWidth();
		height = getHeight();
		

		buffer = Image.createImage(width,height-20);
		InfoSpase = Image.createImage(width,20);
		MyMapBack = Image.createImage(width,height-20);
		
		bg = buffer.getGraphics();		//获取缓冲区的Graphics对象
		gInof = InfoSpase.getGraphics();
		bg.setColor(0xcc00ff);
		bg.fillRect(0, 0, width, height);
		bg.setColor(0xFFFFFF);
		
		mapbaseX = (width)/10;
		mapbaseY = 5;
		
		// 因为是int型的计算,所以先进行除法运算得到delta值,再由delta值得出矩形的长宽
		// 否则,9×delta 有可能不等于 边长
		deltaX = (width-30)/10;
		//deltaY = (height-30)/10;
		deltaY = deltaX;
		
		mapwidth = deltaX*9;
		//mapheight = deltaY*9;
		mapheight = mapwidth;
		
		allAction = 0;
		font = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN, Font.SIZE_LARGE);
		
		try
		{
			bgimage = Image.createImage("/tree.png");
			imgFlightA = Image.createImage("/FlightA.png");
			imgFlightB = Image.createImage("/FlightB.png");
			imgFlightC = Image.createImage("/FlightC.png");
			imgFlightD = Image.createImage("/FlightD.png");
			imgShutDown = Image.createImage("/ShutDown.png");
			imgShutBody = Image.createImage("/ShutBody.png");
		}
		catch (IOException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
	}
	
	public void paint(Graphics g)		//绘制屏幕
	{
		System.out.println("painting……");
		switch (fm.gameState)
		{
		case FlightManager.GAMESTATE_MENU:
			drawMenuScreen(bg);
			break;
			
		case FlightManager.GAMESTATE_CHOISEFIRST:
			drawChoiseFirst(bg);
			break;
			
		case FlightManager.GAMESTATE_INIT:
			drawGameInit(bg);
			break;
			
		case FlightManager.GAMESTATE_INIT_DONE:
			drawGameReady(bg);
			break;
			
		case FlightManager.GAMESTATE_GAMELOOP:
			drawGame(bg);
			break;
			
		case FlightManager.GAMESTATE_SHOWINFO:
			g.drawImage(InfoSpase, 0, height-20, Graphics.TOP|Graphics.LEFT);
			return;

		default:
			break;
		}
		
		g.drawImage(buffer, 0, 0, Graphics.TOP|Graphics.LEFT);
		g.drawImage(InfoSpase, 0, height-20, Graphics.TOP|Graphics.LEFT);
	}
	
	public void drawMenuScreen(Graphics g)	//绘制菜单
	{
		//计算初始偏移
		int menuOffest = ( height - font.getHeight()*3)/2;
		g.setFont(font);				//设置字体
		g.setClip(0, 0, width, height);
		g.drawImage(bgimage, width/2, height/2, Graphics.VCENTER|Graphics.HCENTER);	//绘制背景
//		g.drawImage(imgFlightB, 20, 20, Graphics.VCENTER|Graphics.HCENTER);
//		g.drawImage(imgFlightC, 40, 40, Graphics.VCENTER|Graphics.HCENTER);
//		g.drawImage(imgFlightD, 70, 70, Graphics.VCENTER|Graphics.HCENTER);
//		g.drawImage(imgFlightA, 70, 70, Graphics.VCENTER|Graphics.HCENTER);
		int item0Color = 0;
		int item1Color = 0;
		int item2Color = 0;				//设置字体初始颜色
		switch (whichActive)
		{
		case 0:
			item0Color = 255<<16;		//选中菜单项是红色 RGB(255,0,0),根据RGB定义偏移16位即使红色
			break;

		case 1:
			item1Color = 255<<16;
			//item1Color = item0Color<<16;
			break;
			
		case 2:
			item2Color = 255<<16;
			//item2Color = item1Color<<16;
			break;

		default:
			item0Color = 0;
			item1Color = 0;
			item2Color = 0;
			break;
		}
		
		g.setColor(item0Color);
		g.drawString("新游戏", (width-font.stringWidth("新游戏"))/2, 
				menuOffest+font.getHeight()*0, Graphics.LEFT|Graphics.TOP);
		g.setColor(item1Color);
		if (isShkOn)
		{
			g.drawString("震动(on)",(width-font.stringWidth("震动(on)"))/2, 
					menuOffest+font.getHeight()*1, Graphics.LEFT|Graphics.TOP);
		}
		else
		{
			g.drawString("震动(off)",(width-font.stringWidth("震动(off)"))/2, 
					menuOffest+font.getHeight()*1, Graphics.LEFT|Graphics.TOP);
		}
		g.setColor(item2Color);
		if (isVolOn)
		{
			g.drawString("声音(on)",(width-font.stringWidth("声音(on)"))/2, 
					menuOffest+font.getHeight()*2, Graphics.LEFT|Graphics.TOP);
		}
		else
		{
			g.drawString("声音(off)",(width-font.stringWidth("声音(off)"))/2, 
					menuOffest+font.getHeight()*2, Graphics.LEFT|Graphics.TOP);
		}
	}
	
	public void drawGameReady(Graphics g)
	{
		g.setFont(font);				//设置字体
		int baseX = (width-font.stringWidth("完成布局"))/2;
		int baseY = height/2;
		g.setColor(0x00ffff);
		g.fillRect(baseX, baseY, font.stringWidth("完成布局"), font.getHeight()*2);
		g.setColor(0xffffff);
		g.fillRect(baseX, baseY+isInitDone*font.getHeight(), font.stringWidth("完成布局"), font.getHeight());
		g.setColor(0x00ff00);
		g.drawString("完成布局", baseX, baseY, Graphics.LEFT|Graphics.TOP);
		g.drawString("重新布局", baseX, baseY+font.getHeight(), Graphics.LEFT|Graphics.TOP);
	}

	public void drawChoiseFirst(Graphics g)
	{
		g.setFont(font);				//设置字体
		int baseX = (width-font.stringWidth("选择先手"))/2;
		int baseY = height/2;
		g.setColor(0x00ffff);
		g.fillRect(baseX, baseY, font.stringWidth("选择先手"), font.getHeight()*2);
		g.setColor(0xffffff);
		g.fillRect(baseX, baseY+isFirst*font.getHeight(), font.stringWidth("选择先手"), font.getHeight());
		g.setColor(0x00ff00);
		g.drawString("选择先手", baseX, baseY, Graphics.LEFT|Graphics.TOP);
		g.drawString("选择后手", baseX, baseY+font.getHeight(), Graphics.LEFT|Graphics.TOP);
	}
	
	public void drawGameInit(Graphics g)
	{
		//地图初始化
		mapInit(g);
		//drawMap(g);
		drawFlight(g);
		if( fwLog.flightCount == 3 )
		{
			System.out.println("there flight is full");
			//准备就绪
			System.out.println("准备就绪,等待对方完成布局");
		}
		switch (flightType)
		{
		case 0:
			g.drawImage(imgFlightA, fm.getFlightPointX()+deltaX/2, fm.getFlightPointY()-deltaY, Graphics.TOP|Graphics.HCENTER);
			break;
			
		case 1:
			g.drawImage(imgFlightB, fm.getFlightPointX()+deltaX, fm.getFlightPointY()-deltaY/2, Graphics.RIGHT|Graphics.VCENTER);
			break;
			
		case 2:
			g.drawImage(imgFlightC, fm.getFlightPointX()+deltaX/2, fm.getFlightPointY(), Graphics.BOTTOM|Graphics.HCENTER);
			break;
			
		case 3:
			g.drawImage(imgFlightD, fm.getFlightPointX(), fm.getFlightPointY()-deltaY/2, Graphics.LEFT|Graphics.VCENTER);
			break;

		default:
			flightType = 0;
			System.out.println("error flight type");
			break;
		}
	}
	

	public void mapInit(Graphics g)
	{
		//初始化地图
		g.setColor(0x00ffff);
		g.fillRect(0, 0, width, height);
		
		g.setColor(0x000000);
		//字体设置
		g.setFont(font);
		//System.out.println("字体高度:"+charfont.getHeight());
		char chY='I',chX='1';
		for(int i=0;i < 9; i++ )
		{
			g.drawChar(chY--, mapbaseX, mapbaseY+i*deltaY, Graphics.TOP|Graphics.RIGHT);
			g.drawChar(chX++, mapbaseX+i*deltaX+deltaX/2, mapbaseY+mapheight, Graphics.TOP|Graphics.LEFT);
		}
		for(int i=0; i < 10; i++)
			g.drawLine(mapbaseX, mapbaseY+i*deltaY, mapbaseX+mapwidth, mapbaseY+i*deltaY);
		for(int i=0; i < 10; i++)
			g.drawLine(mapbaseX+i*deltaX, mapbaseY, mapbaseX+i*deltaX, mapbaseY+mapheight);
	}
	
	public void drawMap(Graphics g)
	{
		g.drawImage(fwLog.imgMap, 0, 0, Graphics.TOP|Graphics.LEFT);
		System.out.println("draw map");
	}
	
	public void drawFlight(Graphics g)
	{
		switch (fwLog.flightCount)
		{
		case 3:
		{
			switch (fwLog.flightType[2])
			{
			case 0:
				g.drawImage(imgFlightA, fwLog.flightPoint[2].x, fwLog.flightPoint[2].y, fwLog.fPos[2]);	
				break;

			case 1:
				g.drawImage(imgFlightB, fwLog.flightPoint[2].x, fwLog.flightPoint[2].y, fwLog.fPos[2]);	
				break;

			case 2:
				g.drawImage(imgFlightC, fwLog.flightPoint[2].x, fwLog.flightPoint[2].y, fwLog.fPos[2]);	
				break;

			case 3:
				g.drawImage(imgFlightD, fwLog.flightPoint[2].x, fwLog.flightPoint[2].y, fwLog.fPos[2]);	
				break;

			default:
				break;
			}
		}
			
		case 2:
		{
			switch (fwLog.flightType[1])
			{
			case 0:
				g.drawImage(imgFlightA, fwLog.flightPoint[1].x, fwLog.flightPoint[1].y, fwLog.fPos[1]);	
				break;

			case 1:
				g.drawImage(imgFlightB, fwLog.flightPoint[1].x, fwLog.flightPoint[1].y, fwLog.fPos[1]);	
				break;

			case 2:
				g.drawImage(imgFlightC, fwLog.flightPoint[1].x, fwLog.flightPoint[1].y, fwLog.fPos[1]);	
				break;

			case 3:
				g.drawImage(imgFlightD, fwLog.flightPoint[1].x, fwLog.flightPoint[1].y, fwLog.fPos[1]);	
				break;

			default:
				break;
			}
		}
			
		case 1:
		{
			switch (fwLog.flightType[0])
			{
			case 0:
				g.drawImage(imgFlightA, fwLog.flightPoint[0].x, fwLog.flightPoint[0].y, fwLog.fPos[0]);	

⌨️ 快捷键说明

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