使用J2ME技术开发RPG游戏(一)——程序框架
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说比较麻烦的一类游戏,下面通过一系列的文章来介绍如何使用J2ME技术来开发RPG游戏。
首先让我们来看一下游戏的骨架——程序框架的实现。程序框架主要包含三个方面:绘制结构、事件处理结构以及线程结构。在整个框架中,采用当前游戏编程中的通用的状态控制机制,为每个界面,如菜单、帮助、游戏对话、商店界面设置一个唯一的状态值,使用该状态值控制界面的绘制、事件的处理以及线程处理。
在程序的实现上为了通用,以MIDP1.0为基础来进行制作,这个要比使用MIDP2.0的Game API实现起来要复杂一些。
在类结构的划分上,为了节约减小jar文件大小,把这个程序代码划分为两个类,一个MIDlet类,一个界面类,所有逻辑代码以及线程实现均放置在界面类中。
下面是MIDlet类的代码,主要实现显示界面、处理手机来电、释放资源以及退出功能,线程启动放在界面类中实现。源代码如下:
package myrpg;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
* RPG结构的MIDlet类
* 包含如下功能:
* 1、显示界面
* 2、手机来电处理
* 3、释放资源
* 4、退出方法
*/
public class MyRPGMIDlet extends MIDlet {
/**MyRPGMIDlet对象,用于实现退出功能*/
static MyRPGMIDlet instance;
/**界面类对象*/
MyRPGCanvas mainScreen = new MyRPGCanvas();
public MyRPGMIDlet() {
//初始化
instance = this;
//显示界面
Display.getDisplay(this).setCurrent(mainScreen);
}
public void startApp() {
//开始或继续游戏
if (mainScreen != null) {
mainScreen.startGame();
}
}
public void pauseApp() {
//暂停游戏
if (mainScreen != null) {
mainScreen.pauseGame();
}
}
public void destroyApp(boolean unconditional) {
//释放资源
if (mainScreen != null) {
mainScreen.destroyGame();
mainScreen = null;
}
}
/**
* 退出方法
*/
public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
游戏逻辑和界面绘制以及控制都放在一个类MyRPGCanvas中,这样实现没有使用面向对象容易修改和扩展,但是通过结构化代码,还是可以保证较高的可读性以及维护性。在MyRPGCanvas中,通过状态变量status控制界面的绘制以及线程逻辑,为了清晰,把每个处理逻辑都封装成一个方法,如果方法比较复杂还可以继续拆分为多个方法。
关于绘制部分,如果每个界面都具有一张不透明的背景图片的话,可以省略清屏功能,这样可以提高程序的执行效率。
关于线程部分主要实现了暂停控制,通过isPaused变量来控制逻辑是否执行,从而实现暂停功能,并实现精确的延时。
关于资源加载和销毁,如果机器的内存不是很紧张的话,可以一次加载,如果内存比较紧张的话,需要编写专门的代码控制资源的加载和销毁。
具体的实现代码如下:
package myrpg;
import javax.microedition.lcdui.*;
/**
* 游戏界面,包含所有游戏界面、逻辑以及事件处理
*/
public class MyRPGCanvas extends Canvas implements Runnable {
/**游戏是否处于运行状态,true代表处于运行状态*/
private boolean isRunning = true;
/**游戏是否处于暂停状态,true代表处于暂停状态*/
private boolean isPaused = false;
/**屏幕宽度*/
private int width;
/**屏幕高度*/
private int height;
/**时间间隔*/
private final int INTERVAL_TIME = 100;
/**游戏状态,使用该变量标示游戏的界面和逻辑*/
private int status;
//各个界面状态常量
/**Logo界面状态*/
private final int LOGO_STATUS = 0;
/**菜单界面状态*/
private final int MENU_STATUS = 1;
/**帮助界面状态*/
private final int HELP_STATUS = 2;
/**关于界面状态*/
private final int ABOUT_STATUS = 3;
//游戏中各个状态常量
/**地图1状态*/
private final int GAME_MAP1_STATUS = 4;
/**武器店1状态*/
private final int GAME_WEAPONSHOP1_STATUS = 5;
/**对话1状态*/
private final int GAME_DIALOG1_STATUS = 6;
public MyRPGCanvas() {
//初始化
init();
//启动线程
Thread thread = new Thread(this);
thread.start();
}
/**
* 初始化游戏
* 导入资源和初始化游戏状态
*/
private final void init() {
//获得屏幕尺寸
width = this.getWidth();
height = this.getHeight();
//初始化游戏状态,默认显示LOGO界面
status = LOGO_STATUS;
//导入图片和其他资源
}
protected void paint(Graphics g) {
//清屏
clearScreen(g);
//绘制
switch (status) {
case LOGO_STATUS:
paintLogo(g);
break;
case MENU_STATUS:
paintMenu(g);
break;
case HELP_STATUS:
paintHelp(g);
break;
case ABOUT_STATUS:
paintAbout(g);
break;
case GAME_MAP1_STATUS:
paintGame_Map1(g);
break;
case GAME_WEAPONSHOP1_STATUS:
paintGame_WeaponShop1(g);
break;
case GAME_DIALOG1_STATUS:
paintDialog1(g);
break;
}
}
/**
* 绘制LOGO界面
* @param g Graphics 画笔
*/
private final void paintLogo(Graphics g) {
}
/**
* 绘制菜单界面
* @param g Graphics 画笔
*/
private final void paintMenu(Graphics g) {
}
/**
* 绘制帮助界面
* @param g Graphics 画笔
*/
private final void paintHelp(Graphics g) {
}
/**
* 绘制关于界面
* @param g Graphics 画笔
*/
private final void paintAbout(Graphics g) {
}
/**
* 绘制游戏地图1界面
* @param g Graphics 画笔
*/
private final void paintGame_Map1(Graphics g) {
}
/**
* 绘制游戏武器店1界面
* @param g Graphics 画笔
*/
private final void paintGame_WeaponShop1(Graphics g) {
}
/**
* 绘制游戏对话1界面
* @param g Graphics 画笔
*/
private final void paintDialog1(Graphics g) {
}
/**
* 清屏
* @param g Graphics 画笔
*/
private final void clearScreen(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
}
/**
* 开始和继续游戏
*/
public void startGame() {
isPaused = false;
}
/**
* 暂停游戏
*/
public void pauseGame() {
isPaused = true;
}
/**
* 释放资源
* 包括图片、声音等资源
*/
public void destroyGame() {
}
/**
* logo界面线程逻辑
*/
private final void doLogo() {
}
/**
* 帮助界面线程逻辑
*/
private final void doHelp() {
}
/**
* 关于界面线程逻辑
*/
private final void doAbout() {
}
/**
* 菜单界面线程逻辑
*/
private final void doMenu() {
}
/**
* 游戏地图1界面线程逻辑
*/
private final void doGame_Map1() {
}
/**
* 游戏武器店1界面线程逻辑
*/
private final void doGame_WeaponShop1() {
}
/**
* 游戏对话1界面线程逻辑
*/
private final void doDialog1() {
}
public void run() {
try {
while (isRunning) {
//精确延时
long start = System.currentTimeMillis();
//逻辑处理
if (!isPaused) {
switch (status) {
case LOGO_STATUS:
doLogo();
break;
case MENU_STATUS:
doMenu();
break;
case HELP_STATUS:
doHelp();
break;
case ABOUT_STATUS:
doAbout();
break;
case GAME_MAP1_STATUS:
doGame_Map1();
break;
case GAME_WEAPONSHOP1_STATUS:
doGame_WeaponShop1();
break;
case GAME_DIALOG1_STATUS:
doDialog1();
break;
}
}
//重绘
repaint();
serviceRepaints();
long end = System.currentTimeMillis();
//延时
if ((end - start) < INTERVAL_TIME) {
Thread.sleep(INTERVAL_TIME - (end - start));
}
}
} catch (Exception e) {}
}
}
这些只是一个简单的框架,包含了有些开发中的常见功能的实现,但是尚不包含按键处理方面的代码,如果大家有什么建议和意见也可以积极提出。
分享到:
相关推荐
在本篇文档中,我们将探讨如何使用J2ME技术来构建一个RPG(角色扮演游戏)游戏的程序框架。J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于移动设备和嵌入式系统。尽管MIDP2.0的Game API提供了一些便利...
在使用J2ME技术开发RPG游戏的过程中,按键处理机制是一个关键部分,它关系到游戏的响应速度和玩家体验。本文将深入探讨如何构建这样一个高效、可移植的按键处理系统。 首先,为了确保游戏对按键的反应快速且灵敏,...
**J2ME游戏开发之RPG——源码详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME中开发角色扮演游戏(RPG)是一项挑战性的任务,...
对于想要学习如何使用 J2ME 开发 RPG 游戏的初学者来说,以下是一些关键知识点: 1. **J2ME 架构**:理解 J2ME 的架构至关重要,它包括配置(Configurations)和Profile(Profiles)。配置定义了运行环境的基本硬件...
j2me学习笔记【12】——游戏操作Canvas类的up、down、left、right、fire属性使用实例 j2me学习笔记【13】——创建矩形框、圆角矩形以及填充颜色小例子 j2me学习笔记【14】——创建圆弧并填充颜色小例子 j2me学习笔记...
在这个标题中,“j2me编写手机RPG游戏”意味着开发者使用J2ME技术来创建了一款角色扮演游戏(Role-Playing Game,简称RPG)。RPG游戏通常包含丰富的剧情、角色发展和互动元素,玩家在游戏中扮演一个或多个角色,通过...
通过研究这个RPG项目,你不仅可以了解J2ME的开发技术,还可以深入理解游戏设计的基本原理和实践技巧。这对你提升移动游戏开发技能,尤其是针对旧版Java手机的开发,将大有裨益。同时,这也是一次了解早期移动游戏...
在本文中,我们将深入探讨如何使用Java 2 Micro Edition (J2ME) 技术来开发角色扮演游戏(RPG)游戏。J2ME是Java平台的一个子集,专门设计用于移动设备和嵌入式系统,使得开发者能够在这些平台上创建丰富的交互式...
J2ME(Java 2 Micro Edition)は、近年来随着各种不同设备、尤其是移动通信设备的飞速发展而诞生的新的开发技术。J2ME 是Java平台的微型版,专门为资源有限的设备设计,具有非常广泛的应用前景。 J2ME 的主要特点是...
《征途》是一款基于J2ME技术开发的角色扮演游戏(RPG),专为早期移动设备设计。J2ME,全称为Java Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,如早期的智能手机和平板...
《J2ME的RPG游戏Demo》是一款基于Java 2 Micro Edition (J2ME) 技术开发的角色扮演游戏Demo,它展示了如何在移动设备上构建一个功能丰富的游戏体验。J2ME是Java平台的一个子集,专为资源有限的设备如手机和平板电脑...
这款RPG游戏由作者亲自制作,目标用户主要是对游戏开发感兴趣的初级开发者,对于已经熟悉高级游戏开发技术的专家可能并不适用。 J2ME的开发环境通常包括Java Wireless Toolkit (J2ME WTK) 或者NetBeans等集成开发...
本篇文章将深入探讨一个基于J2ME的RPG(角色扮演游戏)游戏代码,通过解析其中的关键机制,为读者揭示游戏开发的核心原理。 首先,我们要理解J2ME的游戏开发基础。J2ME提供了MIDP(Mobile Information Device ...
【J2ME RPG游戏代码】是一种专为Java Micro Edition(J2ME)平台设计的、基于角色扮演(RPG)的游戏开发源代码。J2ME是Java技术的一个分支,主要用于移动设备和嵌入式系统,如手机、智能手表等。这款RPG游戏代码的...
"J2ME游戏开发中的WTK游戏框架" 指的是在Java Micro Edition(J2ME)平台上,使用Wireless Toolkit(WTK)进行游戏开发时所采用的一种特定的游戏开发框架。J2ME是Java的一个子集,用于开发和部署在移动设备、...
j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发
在移动设备和嵌入式系统中,J2ME(Java 2 Micro Edition)是一个广泛使用的平台,用于开发轻量级的应用程序,尤其是游戏。在这个主题中,我们将深入探讨如何利用J2ME来编写经典游戏——俄罗斯方块。 首先,我们需要...
RPG游戏J2ME代码讲解 第6讲 Java应用大赛作品代码讲解 Tales of Youxi <br>1. 真正的RPG游戏“Tales of Youxi” 我们在这一讲来介绍一款名为“Tales of Youxi”的RPG游戏。它制作精良,称得上是真正...
疯狂赛车是一款基于J2ME技术的手机游戏,该游戏实现在分辨率为标准的240*320各种手机上运行。玩家的赛车可通过键盘进行控制,而游戏控制的赛车须具有智能性的自动运行,使游戏具有可玩性。而游戏最重要的就是游戏...
【描述】:本文将深入探讨如何利用Java Micro Edition (J2ME) 技术来开发手机角色扮演游戏(RPG)。通过对问题的细化处理和清晰的算法展示,为读者提供一个优秀的实例教程。 【标签】:J2ME 【正文】: 在移动设备...