📄 fwmaincanvas.java
字号:
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 + -