📄 westgamecanvas.java
字号:
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.VolumeControl;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
//import com.nokia.mid.ui.FullCanvas;
/*
* 创建日期 2005-12-1
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* 文件名: java <br>
* 作者: 汪霞 <br>
* 创建日期: 2005-12-1 <br>
* 文件功能: <br>
* 版本:1.0 <br>
* 编译环境:CLDC1.0, MIDP1.0 <br>
* 实现环境:NOKIA60 <br>
* 注释: <br>
* 修改者姓名: <br>
* 版权声明:Copyright (c) 2000 GameFactory .All rights reserved. <br>
*/
public class WestGameCanvas extends Canvas implements Runnable
{
JourneyToTheWest midlet;
static short screenWidth;
static short screenHeight;
/***/
public final static byte KEYCODE_DIRECT_UP = -1; //向上键
/***/
public final static byte KEYCODE_DIRECT_DOWN = -2; //向下键
/***/
public final static byte KEYCODE_DIRECT_LEFT = -3; //向左键
/***/
public final static byte KEYCODE_DIRECT_RIGHT = -4; //向右键
/***/
public final static byte KEYCODE_DIRECT_FIRE = -5; //确认键
/***/
public final static byte KEYCODE_LEFT_SOFTKEY = -6; //左软键
/***/
public final static byte KEYCODE_RIGHT_SOFTKEY = -7; //右软键
static GameDataSimple data = new GameDataSimple();
Player_West objPlayer;
Npc_Bound npc;
static int mapX, mapY;
static int hp = 100; //主角的生命值,等于0时为死亡状态
static short score = 0;
static int gameLevel = 1;
static int gameState = 0; //0,正常游戏状态
private int saveLevel = 1;
// 1,切换命的状态
// 2gameover
// 3winner
private short life = 3;
//------------------------------------------------------<menu
private int markNum = 0X4000000;
private int mark = 0;
////9--火蚁,10--移动互联 11--百宝箱,12 闪连标志
private Image[] imgMenuLoad = new Image[13];
private Image[] imgMenu = new Image[30];
private short[] xyCartoon = { -130, -169, -167, 176 };
//-------------------------------------------------------menu>
//-----------------------------------------------------------<back和map
private int xMid; //中层背景的x
private int xClose; //近层背景的x
private int yMid; //中层背景的y
private int yFar; //远景的y
private int drawStart; //根据地图来确定应该画几层
private int mapId; //该绘制第几层了
private int[][] blockDraw;
private int startJ, startI; //要绘制的地图的起始位置
private int endJ, endI; //要绘制的地图的结束位置
private int xStart, yStart, xStartUse;
//-----------------------------------------------------------back和map>
private int preMapX, preMapY;
private int test1[] = new int[76];
private boolean soundOn = false;
private boolean running = true;
/**
* 构造方法
*
* @param midlet
*/
public WestGameCanvas(JourneyToTheWest midlet)
{
this.midlet = midlet;
this.setFullScreenMode(true);
data.createImg("moveLogo", imgMenuLoad, 10);
data.createImg("fireAnt",imgMenuLoad,9);
screenWidth = (short) getWidth();
screenHeight = (short) getHeight();
Thread thread = new Thread(this);
thread.start();
}
/**
* 游戏线程
*
* @see java.lang.Runnable#run()
*/
public void run()
{
while (running)
{
long oldTime = System.currentTimeMillis();
//-------------------------------------------------------<程序部分
if (markNum != 0x2000000)
{
try{
menuMove();
}catch(Exception e){
System.out.println("i have catch the error");
}
}
else
{
try
{
preMapX = mapX;
preMapY = mapY;
objPlayer.moveSelf();
if (( objPlayer.prePlayerState & 32 ) != 0
&& this.life >= 0 && gameState == 0)
{
gameState = ( this.life == 0 ) ? 8 : 4;
this.soundStop();
}
mapMove();
npc.move(mapX - preMapX, mapY - preMapY, objPlayer);
objPlayer.isColl(npc);
}
catch (Exception e1)
{
}
}
if (this.soundOn && !this.soundPlaying && !this.gameIsOut)
this.soundPlay();
else if (( !this.soundOn && this.soundPlaying )
|| ( this.soundOn && this.gameIsOut ))
this.soundStop();
repaint();
serviceRepaints();
int useTime = (int) ( 100 - System.currentTimeMillis() + oldTime );
if (useTime > 0)
try
{
Thread.sleep(useTime);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
RecordStore rs = this.rsOpen(this.rsName, false);
this.rsSetRecord(rs, 1, new byte[][] { {(byte)(this.soundOn?1:0)}, {(byte)this.saveLevel} });
this.rsSetRecord(rs, 2, this.rsNameScore);
this.rsClose(rs);
this.soundStop();
this.soundClose(this.sounds.length - 1);
this.midlet.doExit();
}
/**
* Paint方法
*
* @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics)
*/
protected void paint(Graphics g)
{
g.setClip(0,0,176,208);
if (markNum != 0x2000000)
{
menuPaint(g);
}
else
{
try
{
mapDraw(g);
npc.paintSelf(g);
objPlayer.paintSelf(g);
drawSurface(g);
//TODO shizi
// g.setColor(0xff0000);
g.setClip(0, 0, 176, 208);
// g.drawLine(objPlayer.x + 22, objPlayer.y + 54,
// objPlayer.x + 30, objPlayer.y + 54);
// g.drawLine(objPlayer.x + 26, objPlayer.y + 50,
// objPlayer.x + 26, objPlayer.y + 58);
// g.drawRect(objPlayer.x + objPlayer.collisionRectX, objPlayer.y
// + objPlayer.collisionRectY,
// objPlayer.collisionRectWidth,
// objPlayer.collisionRectHeight);
int overImgIdx=0;
switch (gameState)
{
case 2:
overImgIdx=4;
break;
case 4:
overImgIdx=3;
break;
case 8:
overImgIdx=1;
break;
}
if (gameState >0)
{
g.drawImage(GameDataSimple.imgMain[2], 0, 0, 0);
if(gameLevel==4)
g.setClip(0,110,176,40);
g.drawImage(GameDataSimple.imgMain[overImgIdx], gameState==8?50:0, gameState==8?100:0, 0);
}
}
catch (RuntimeException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
// Image ImageArray[] = dataGetImg(h);
//
// for(int i=0;i<ImageArray.length;i++){
// g.drawImage(ImageArray[i],0,0,20);
// g.setColor(0xff00ff);
// g.drawString("ImageArray.length:"+ImageArray.length,70,70,20);
// }
// System.out.println("h:"+h+"---------ImageArray.length:"+ImageArray.length);
// h++;
// g.drawString("ImageArray.length:"+ImageArray.length,70,0 + h*10,20);
g.setClip(0,0,176,208);
}
//int h = 0 ;
/**
* 按下按键
*
* @param key
*/
protected void keyPressed(int key)
{
if (( markNum & 0xff000000 ) == 0
|| ( markNum & 0xff000000 ) == 0x4000000||markNum==0x8000000)
{
menuKeyPress(key);
}
if (markNum == 0x2000000)
{
//test
int num;
boolean scoreSort=false;
for (num = npc.npc.length; --num >= 0;)
if (null != npc.npc[num] && npc.npc[num].id == 4)
break;
switch (gameState)
{
case 0://正常游戏
switch (key)
{
case KEYCODE_LEFT_SOFTKEY://返回菜单
this.soundStop();
markNum = 0x800000;
return;
case KEY_NUM7://计算生成云的位置
case KEY_NUM9://计算生成云的位置
if (( objPlayer.playerState & 32 ) == 0)
npc.creatCloud(objPlayer.x
+ ( key == KEY_NUM7 ? -20 : 20 ),
objPlayer.y);
return;
case KEY_NUM2://take stone
case KEYCODE_DIRECT_UP:
if (objPlayer.prePlayerState > 1
&& objPlayer.prePlayerState < 6)
for (int i = npc.npc.length - 1; i >= 0; i--)
{
if (null != npc.npc[i]
&& npc.npc[i].id == 4
&& npc.npc[i].npcState == 2)
{
if (objPlayer.collidesWith(npc.npc[i]))
{
npc.npc[i].npcState = 4;
break;
}
}
if (i == 0)
{
return;
}
}
break;
case KEY_NUM5://攻击
if (( 768 & objPlayer.prePlayerState ) != 0)
{
for (int i = npc.npc.length - 1; i >= 0; i--)
{
if (null != npc.npc[i]
&& npc.npc[i].id == 4
&& npc.npc[i].npcState == 4)
{
npc.npc[i].npcState = 8 + ( 1 & objPlayer.prePlayerState );
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -