package src;
import java.io.*;
import java.util.Date;
import java.util.Random;
import javax.microedition.lcdui.*;
class Map
{
private static int px = 128;
private static int py = 128;
private static int picx = 13;
private static int picy = 13;
private static int mx = 10;
private static int my = 9;
private static int picCount = 14;
private Image image[];
private int rolex, roley, selectx, selecty;
private boolean flag = false;
private int map[][];
private static int e = 255;
private Image start;
private int imagecount;
private boolean load;
private boolean flagmap;
private int state;
private int number;
private int cx[], cy[], cmc;
private int sx, sy, ex, ey;
private boolean clean;
static int max = 10;
private int level[];
private int num;
private boolean timeFlag;
private Image end;
private int value;
public int gamex;
private int gameCount;
public Map()
{
rolex = 3;
roley = 3;
map = new int[my][mx];
cx = new int[my * 3];
cy = new int[my * 3];
for (int y = 0; y < my; y++)
{
for (int x = 0; x < mx; x++)
{
map[y][x] = e;
}
}
load = false;
clean = false;
imagecount = 0;
flagmap = false;
level = new int[max];
num = 0;
timeFlag = false;
value = 0;
gamex = 0;
gameCount = 0;
}
private int GetGameLevel()
{
int iV;
Date tDate = new Date();
Random tRand = new Random(tDate.getTime());
if ((num == 0) || (num == max))
{
iV = Math.abs(tRand.nextInt()) % max;
level[0] = iV;
num = 1;
return iV;
}
while(true)
{
iV = Math.abs(tRand.nextInt()) % max;
for (int i = 0; i < num; i++)
{
if (level[i] == iV)
break;
if (i == (num - 1))
{
num++;
level[i + 1] = iV;
return iV;
}
}
}
}
public boolean LoadGameLevelMap()
{
InputStream is = null;
int iT;
char iC;
String strFile;
iT = 0;
iC = 0;
timeFlag = false;
end = null;
value ++;
strFile = "/Res/Data/" + GetGameLevel() + ".llk";
try
{
is = getClass().getResourceAsStream(strFile);
for (int y = 0; y < my; y++)
{
for (int x = 0; x < mx; x++)
{
if ((y == 0) || (x == 0) || (y == my - 1)
|| (x == mx - 1))
{
map[y][x] = e;
continue;
}
iT = is.read();
iC = (char) iT;
map[y][x] = iC;
if (iC < picCount)
imagecount++;
}
}
is.close();
}
catch (java.io.IOException ex)
{
ex.printStackTrace();
return false;
}
flagmap = true;
return true;
}
public boolean LoadGameImage()
{
String strFileName;
if (load)
return true;
image = new Image[picCount];
strFileName = "";
for (int i = 0; i < picCount; i++)
{
try
{
strFileName = "/Res/Icons/" + i + ".png";
image[i] = Image.createImage(strFileName);
}
catch (java.io.IOException e)
{
e.printStackTrace();
return false;
}
}
try
{
start = Image.createImage("/Res/Icons/Statusbar.png");
}
catch (java.io.IOException e)
{
e.printStackTrace();
return false;
}
load = true;
return true;
}
public void LoadGameEndImg(boolean isSuccessFile)
{
String strFile;
if (isSuccessFile)
strFile = "/Res/Icons/End_Success.PNG";
else
strFile = "/Res/Icons/End_Failed.PNG";
try
{
end = Image.createImage(strFile);
}
catch (java.io.IOException e)
{
e.printStackTrace();
return;
}
}
public int DrawScreen(Graphics g, int iTimeCount, boolean bCleanFlag,boolean bCleanStart)
{
int iRtn;
iRtn = 0;
if (flagmap)
{
return iRtn;
}
if ((bCleanFlag) && (bCleanStart == false))
{
map[sy][sx] = e;
map[ey][ex] = e;
clean = false;
gameCount += 10;
if (imagecount == 0)
iRtn = 1;
}
PaintGameMap(g);
PaintCourse(g);
PaintStatusBar(g, iTimeCount);
if ((bCleanFlag) && (bCleanStart))
{
PaintCleanFlag(g);
}
if (timeFlag)
{
iRtn = 2;
}
return iRtn;
}
public void PaintGameEnd(Graphics g,int iTime)
{
String strGameAmt,strGameLevelValue,strTime;
strTime = String.valueOf(iTime);
strGameAmt = String.valueOf(gameCount);
strGameLevelValue = String.valueOf(value);;
try
{
g.drawImage(end, 0, 0, Graphics.LEFT | Graphics.TOP);
g.setColor(0, 0, 255);
g.drawString(strGameLevelValue, 55, 74, 33);
g.drawString(strGameAmt, 70, 94, 33);
g.drawString(strTime, 80, 114, 33);
} catch (Exception ex)
{
ex.printStackTrace();
}
}
private void PaintIniMap(Graphics g)
{
int iy, ihigh;
g.setColor(0, 223, 255);
iy = state * 8;
ihigh = (8 - state) * 18;
g.fillRect(0, iy, 128, ihigh);
System.out.println("PaintIniMap: " + state);
}
public void SetIniMapState(int ms)
{
state = ms;
if (ms == 0)
{
flagmap = false;
}
System.out.println("SetIniMapState: " + ms);
}
private void PaintCleanStatus()
{
System.out.println("sx:" + sx + "/sy:" + sy);
System.out.println("ex:" + ex + "/ey:" + ey);
for (int i = 0; i < cmc; i++) {
System.out.println("x:" + cx[i] + "/y:" + cy[i]);
}
}
public void PaintCleanFlag1(Graphics g)
{
int tx1, ty1, tx2, ty2;
g.setColor(2, 255, 2);
tx1 = 0;
ty1 = 0;
tx2 = 0;
ty2 = 0;
tx1 = cx[0];
ty1 = cy[0];
for (int i = 1; i < cmc; i++)
{
tx2 = cx[i];
ty2 = cy[i];
if ((tx1 == tx2) || (ty1 == ty2))
continue;
tx2 = cx[i - 1];
ty2 = cy[i - 1];
// up
if ((ty1 == 0) && (ty2 == 0))
{
if (tx1 == 0)
{
tx1 = 2;
}
else if (tx1 == mx - 1)
{
tx1 = 5 + tx1 * (tx1 - 1) * 13 + (tx1 - 1) * 2 + 2;
}
else
tx1 = 5 + tx1 * (tx1 - 1) * 13 + (tx1 - 1) * 2 + 6;
ty1 = 2;
if (tx2 == 0)
{
tx2 = 2;
}
else if (tx2 == mx - 1)
{
tx2 = 5 + tx2 * (tx2 - 1) * 13 + (tx2 - 1) * 2 + 2;
}
else
tx2 = 5 + tx2 * (tx2 - 1) * 13 + (tx2 - 1) * 2 + 6;
ty2 = 2;
// down
}
else if ((ty1 == my - 1) && (ty2 == my - 1))
{
if (tx1 == 0)
{
tx1 = 2;
}
else if (tx1 == mx - 1)
{
tx1 = 5 + tx1 * (tx1 - 1) * 13 + (tx1 - 1) * 2 + 2;
}
else
tx1 = 5 + tx1 * (tx1 - 1) * 13 + (tx1 - 1) * 2 + 6;
ty1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 2;
if (tx2 == 0)
{
tx2 = 2;
}
else if (tx2 == mx - 1)
{
tx2 = 5 + tx2 * (tx2 - 1) * 13 + (tx2 - 1) * 2 + 2;
}
else
tx2 = 5 + tx2 * (tx2 - 1) * 13 + (tx2 - 1) * 2 + 6;
ty2 = ty1;
// left
}
else if ((tx1 == 0) && (tx2 == 0))
{
if (ty1 == 0)
ty1 = 2;
else if (ty1 == my - 1)
ty1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 2;
else
ty1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 6;
tx1 = 2;
if (ty2 == 0)
ty2 = 2;
else if (ty2 == my - 1)
ty2 = 5 + ty2 * (ty2 - 1) * 13 + (ty2 - 1) * 2 + 2;
else
ty2 = 5 + ty2 * (ty2 - 1) * 13 + (ty2 - 1) * 2 + 6;
tx2 = 2;
//right
}
else if ((tx1 == mx - 1) && (tx2 == mx - 1))
{
if (ty1 == 0)
ty1 = 2;
else if (ty1 == my - 1)
ty1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 2;
else
ty1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 6;
tx1 = 5 + ty1 * (ty1 - 1) * 13 + (ty1 - 1) * 2 + 2;
if (ty2 == 0)
ty2 = 2;
else if (ty2 == my - 1)
ty2 = 5 + ty2 * (ty2 - 1) * 13 + (ty2 -
J2ME开发技术原理与实践教程
需积分: 0 94 浏览量
更新于2008-07-08
收藏 605KB RAR 举报
Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动设备的Java平台,主要用于开发和运行有限资源的设备上的应用程序。本教程将深入探讨J2ME开发技术的基本原理及其在实践中的应用。
一、J2ME概述
J2ME由Java ME规范定义,包括一系列配置和框架,如KVM(Java虚拟机)和多个功能配置,如MIDP(Mobile Information Device Profile)和CLDC(Connected Limited Device Configuration)。这些组件共同为不同类型的设备提供Java支持,包括手机、电视、智能电表等。
二、J2ME架构
1. **配置**:J2ME的配置定义了运行环境的基础特性,如内存大小和处理能力。主要配置有CLDC和CDC(Connected Device Configuration)。
2. **框架**:框架是在配置基础上提供特定功能的API集合,例如MIDP用于开发移动设备的应用程序,它包含了用户界面组件、网络通信和文件存储等功能。
三、MIDP(Mobile Information Device Profile)
MIDP是J2ME最常用的框架之一,用于创建移动设备上的应用程序。它包含以下核心组件:
1. **MIDlet Suite**:MIDlet是运行在MIDP上的Java应用程序,由一个或多个MIDlets组成。
2. **用户界面组件**:包括Canvas类用于自定义绘图,以及Form、ChoiceGroup、TextBox等预定义组件用于构建用户界面。
3. **网络通信**:通过MIDP的Connector类,可以实现HTTP、WAP等协议的网络连接。
4. **数据存储**:Record Management System (RMS) 提供了简单的数据存储机制。
四、CLDC(Connected Limited Device Configuration)
CLDC是J2ME的轻量级虚拟机,专为资源受限的设备设计。它定义了一个小巧的Java虚拟机(KVM)和一套基本的类库,为其他框架如MIDP提供运行基础。
五、开发环境与工具
1. **IDE**:Eclipse、NetBeans和JBuilder等集成开发环境提供了对J2ME项目的良好支持,包括项目管理、代码编辑、调试和打包工具。
2. **模拟器**:开发者可以使用J2ME SDK提供的模拟器进行应用测试,模拟不同设备的环境。
3. **打包工具**:JAR和WTK(Wireless Toolkit)帮助开发者打包和签名MIDlet,以便在实际设备上部署。
六、J2ME编程实践
1. **事件驱动编程**:J2ME应用基于事件模型,如键盘输入、屏幕触摸等事件触发相应操作。
2. **优化技巧**:由于资源限制,J2ME应用需要考虑内存管理、图形渲染效率及代码优化。
3. **安全与签名**:MIDlet需要经过数字签名才能在某些设备上安装和运行,确保代码安全。
七、J2ME应用实例
J2ME广泛应用于移动游戏、信息查询、远程控制等领域。例如,手机上的天气预报应用、音乐播放器、简单游戏等都是J2ME技术的典型应用。
总结,J2ME开发技术涉及配置、框架、用户界面、网络通信、数据存储等多个方面,理解并掌握这些基础知识,能够帮助开发者构建适应各种嵌入式和移动设备的应用程序。通过实践,开发者可以不断优化和提升J2ME应用的性能和用户体验。在学习过程中,利用合适的开发工具和丰富的实例,能有效提高学习效率。
vtudiv
- 粉丝: 24
- 资源: 46
最新资源
- 1_密码锁.pdsprj
- CNN基于Python的深度学习图像识别系统
- 数据库设计与关系理论-C.J.+Date.epub
- AXU2CGB-E开发板用户手册.pdf
- rwer456456567567
- course_s3_ALINX_ZYNQ_MPSoC开发平台Linux基础教程V1.05.pdf
- course_s1_ALINX_ZYNQ_MPSoC开发平台FPGA教程V1.01.pdf
- 多边形框架物体检测20-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- course_s0_Xilinx开发环境安装教程.pdf
- course_s4_ALINX_ZYNQ_MPSoC开发平台Linux驱动教程V1.04.pdf
- course_s5_linux应用程序开发篇.pdf
- 基于51单片机开发板设计的六位密码锁
- course_s2_ALINX_ZYNQ_MPSoC开发平台Vitis应用教程V1.01.pdf
- 基于Python和OpenCV的人脸识别签到系统的开发与应用
- 多边形框架物体检测26-YOLO(v5至v11)、COCO数据集合集.rar
- 学习路之uniapp-goEasy入门