J2ME游戏开发实例讲解

来源:互联网 发布:2016网络大电影题材 编辑:程序博客网 时间:2024/05/11 23:08
           跳过J2ME,我们先来讲点游戏的理论.具体到华容道这个游戏,主要有三个方面,贴图.游戏操作.逻辑判断.这里讲讲贴图,其他两方面放在概要设计和详细设计里讲.所谓的贴图,其实就是画图,就是在要显示图形的位置上输出一副图片,(要是牵扯到动画就要麻烦一些,可以使用TimerTask.Thread或Rannable之类的技术),这副图片可以是事先准备好的也可以是临时处理的.在J2ME中有一个Image类,专门用于管理图片,它有createImage()方法,可以直接读取图片文件(J2ME只支持PNG格式的图片),也可以截取已有的图片的一部分(这样我们可以把很多图片放在一起,然后一张一张的截下来,好处是节省存储空间和文件读取时间,对于手机这两者都是性能的瓶颈).       J2ME还有一个Graphics类,专门用于绘图,它有drawImage()方法,可以把一副图片在指定的位置上显示出来,它还有drawRect()方法和setColor()方法,这两个方法在后面我们进行游戏操作时就会用到,这里先交代一下.有了图片和绘图的方法,还需要知道把图画到谁身上,J2ME提供了一个Canvas类,字面意思就是画布,它有一个paint()方法用于刷新页面,还有一个repaint()方法用于调用paint()方法.听着有些糊涂是吧,不要紧,我来结合具体程序讲解一下.为了今后编程的方便,我们创建两个类Images和Draw,Images用于保存一些常量值和图片,Draw主要是用于画图,这两个类的源代码如下。Images类的源代码如下:package huarongroad; import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;public class Images {//保存常量//绘图位置常量public static final int UNIT = 32;//方块的单位长度public static final int LEFT = 10;//画图的左边界顶点public static final int TOP = 9;//画图的上边界顶点//地图位置常量public static final int WIDTH = 4;//地图的宽度public static final int HEIGHT = 5;//地图的高度//地图标记常量public static final byte CAOCAO = (byte) /'a/'; <A href="file://曹">file://曹</A>操的地图标记public static final byte MACHAO = (byte) /'b/';//马超的地图标记public static final byte HUANGZHONG = (byte) /'c/';//黄忠的地图标记public static final byte GUANYU = (byte) /'d/';//关羽的地图标记public static final byte ZHANGFEI = (byte) /'e/';//张飞的地图标记public static final byte ZHAOYUN = (byte) /'f/';//赵云的地图标记public static final byte ZU = (byte) /'g/';//卒的地图标记public static final byte BLANK = (byte) /'h/';//空白的地图标记public static final byte CURSOR = (byte) /'i/';//光标的地图标记//地图组合标记常量public static final byte DLEFT = (byte) /'1/'; <A href="file://组">file://组</A>合图形左边标记public static final byte DUP = (byte) /'2/'; <A href="file://组">file://组</A>合图形上边标记public static final byte DLEFTUP = (byte) /'3/'; <A href="file://组">file://组</A>合图形左上标记//图片常量public static Image image_base;//基本图片public static Image image_Zhaoyun;//赵云的图片public static Image image_Caocao;//曹操的图片public static Image image_Huangzhong;//黄忠的图片public static Image image_Machao;//马超的图片public static Image image_Guanyu;//关羽的图片public static Image image_Zhangfei;//张飞的图片public static Image image_Zu;//卒的图片public static Image image_Blank;//空白的图片public static Image image_Frame;//游戏框架的图片public Images() {//构造函数}public static boolean init() {//初始化游戏中用到的图片try {image_base = Image.createImage("/huarongroad/BITBACK.png");image_Frame = Image.createImage(image_base, 126, 0, 145, 177,Sprite.TRANS_NONE);//Sprite类是用来翻转图片的,是MIDP2.0新新增加的支持游戏的特性image_Zhaoyun = Image.createImage(image_base, 0, 0, UNIT, 2 * UNIT,Sprite.TRANS_NONE);image_Caocao = Image.createImage(image_base, UNIT, 0, 2 * UNIT,2 * UNIT, Sprite.TRANS_NONE);image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT,2 * UNIT,Sprite.TRANS_NONE);image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT,2 * UNIT,Sprite.TRANS_NONE);image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNIT,2 * UNIT, UNIT,Sprite.TRANS_NONE);image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT,UNIT, 2 * UNIT,Sprite.TRANS_NONE);image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT,Sprite.TRANS_NONE);image_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,UNIT,UNIT,Sprite.TRANS_NONE);return true;}catch (Exception ex) {return false;}}}Draw类的源代码如下:package huarongroad;import javax.microedition.lcdui.*;public class Draw {//绘制游戏中的图片public Draw(Canvas canvas) {//构造函数}public static boolean paint(Graphics g, byte img, int x, int y) {//在地图的x,y点绘制img指定的图片try {paint(g, img, x, y, Images.UNIT);//把地图x,y点转化成画布的绝对坐标,绘图return true;}catch (Exception ex) {return false;}}public static boolean paint(Graphics g, byte img, int x, int y, int unit) {try {case Images.CAOCA//画曹操//变成绝对坐标,并做调整g.drawImage(Images.image_Caocao, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.GUANYU://画关羽g.drawImage(Images.image_Guanyu, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.HUANGZHONG://画黄忠g.drawImage(Images.image_Huangzhong, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.MACHA//画马超g.drawImage(Images.image_Machao, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.ZHANGFEI://画张飞g.drawImage(Images.image_Zhangfei, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.ZHAOYUN://画赵云g.drawImage(Images.image_Zhaoyun, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.ZU://画卒g.drawImage(Images.image_Zu, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.BLANK://画空白g.drawImage(Images.image_Blank, Images.LEFT + x * unit,Images.TOP + y * unit,Graphics.TOP | Graphics.LEFT);break;case Images.CURSOR://画光标g.drawRect(Images.LEFT + x * unit,Images.TOP + y * unit,Images.UNIT,Images.UNIT);break;}return true;}catch (Exception ex) {return false;}}}