`

使用J2ME技术开发RPG游戏(一)——程序框架

阅读更多

使用J2ME技术开发RPG游戏(一)——程序框架

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说比较麻烦的一类游戏,下面通过一系列的文章来介绍如何使用J2ME技术来开发RPG游戏。

首先让我们来看一下游戏的骨架——程序框架的实现。程序框架主要包含三个方面:绘制结构、事件处理结构以及线程结构。在整个框架中,采用当前游戏编程中的通用的状态控制机制,为每个界面,如菜单、帮助、游戏对话、商店界面设置一个唯一的状态值,使用该状态值控制界面的绘制、事件的处理以及线程处理。

在程序的实现上为了通用,以MIDP1.0为基础来进行制作,这个要比使用MIDP2.0Game 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游戏(一)——程序框架.doc

    在本篇文档中,我们将探讨如何使用J2ME技术来构建一个RPG(角色扮演游戏)游戏的程序框架。J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于移动设备和嵌入式系统。尽管MIDP2.0的Game API提供了一些便利...

    使用J2ME技术开发RPG游戏(二)——按键处理机制.doc

    在使用J2ME技术开发RPG游戏的过程中,按键处理机制是一个关键部分,它关系到游戏的响应速度和玩家体验。本文将深入探讨如何构建这样一个高效、可移植的按键处理系统。 首先,为了确保游戏对按键的反应快速且灵敏,...

    J2ME游戏开发之RPG——源码

    **J2ME游戏开发之RPG——源码详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如早期的智能手机和平板电脑。在J2ME中开发角色扮演游戏(RPG)是一项挑战性的任务,...

    J2me 基础学习 rpg游戏开发学习

    对于想要学习如何使用 J2ME 开发 RPG 游戏的初学者来说,以下是一些关键知识点: 1. **J2ME 架构**:理解 J2ME 的架构至关重要,它包括配置(Configurations)和Profile(Profiles)。配置定义了运行环境的基本硬件...

    J2ME学习笔记 入门 学习经验

    j2me学习笔记【12】——游戏操作Canvas类的up、down、left、right、fire属性使用实例 j2me学习笔记【13】——创建矩形框、圆角矩形以及填充颜色小例子 j2me学习笔记【14】——创建圆弧并填充颜色小例子 j2me学习笔记...

    j2me编写手机RPG游戏

    在这个标题中,“j2me编写手机RPG游戏”意味着开发者使用J2ME技术来创建了一款角色扮演游戏(Role-Playing Game,简称RPG)。RPG游戏通常包含丰富的剧情、角色发展和互动元素,玩家在游戏中扮演一个或多个角色,通过...

    一个J2ME的RPG游戏

    通过研究这个RPG项目,你不仅可以了解J2ME的开发技术,还可以深入理解游戏设计的基本原理和实践技巧。这对你提升移动游戏开发技能,尤其是针对旧版Java手机的开发,将大有裨益。同时,这也是一次了解早期移动游戏...

    J2ME RPG游戏解析

    在本文中,我们将深入探讨如何使用Java 2 Micro Edition (J2ME) 技术来开发角色扮演游戏(RPG)游戏。J2ME是Java平台的一个子集,专门设计用于移动设备和嵌入式系统,使得开发者能够在这些平台上创建丰富的交互式...

    java基于J2ME的游戏开发——贪吃蛇论文.docx

    J2ME(Java 2 Micro Edition)は、近年来随着各种不同设备、尤其是移动通信设备的飞速发展而诞生的新的开发技术。J2ME 是Java平台的微型版,专门为资源有限的设备设计,具有非常广泛的应用前景。 J2ME 的主要特点是...

    J2ME版RPG手机游戏征途

    《征途》是一款基于J2ME技术开发的角色扮演游戏(RPG),专为早期移动设备设计。J2ME,全称为Java Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,如早期的智能手机和平板...

    J2ME的RPG游戏Demo

    《J2ME的RPG游戏Demo》是一款基于Java 2 Micro Edition (J2ME) 技术开发的角色扮演游戏Demo,它展示了如何在移动设备上构建一个功能丰富的游戏体验。J2ME是Java平台的一个子集,专为资源有限的设备如手机和平板电脑...

    j2me开发的rpg

    这款RPG游戏由作者亲自制作,目标用户主要是对游戏开发感兴趣的初级开发者,对于已经熟悉高级游戏开发技术的专家可能并不适用。 J2ME的开发环境通常包括Java Wireless Toolkit (J2ME WTK) 或者NetBeans等集成开发...

    j2me RPG游戏代码

    本篇文章将深入探讨一个基于J2ME的RPG(角色扮演游戏)游戏代码,通过解析其中的关键机制,为读者揭示游戏开发的核心原理。 首先,我们要理解J2ME的游戏开发基础。J2ME提供了MIDP(Mobile Information Device ...

    j2me rpg游戏代码

    【J2ME RPG游戏代码】是一种专为Java Micro Edition(J2ME)平台设计的、基于角色扮演(RPG)的游戏开发源代码。J2ME是Java技术的一个分支,主要用于移动设备和嵌入式系统,如手机、智能手表等。这款RPG游戏代码的...

    J2ME游戏开发中的WTK游戏框架

    "J2ME游戏开发中的WTK游戏框架" 指的是在Java Micro Edition(J2ME)平台上,使用Wireless Toolkit(WTK)进行游戏开发时所采用的一种特定的游戏开发框架。J2ME是Java的一个子集,用于开发和部署在移动设备、...

    j2me游戏开发 经典教程

    j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发

    使用j2me编程的游戏——俄罗斯方块

    在移动设备和嵌入式系统中,J2ME(Java 2 Micro Edition)是一个广泛使用的平台,用于开发轻量级的应用程序,尤其是游戏。在这个主题中,我们将深入探讨如何利用J2ME来编写经典游戏——俄罗斯方块。 首先,我们需要...

    RPG游戏J2ME代码讲解

    RPG游戏J2ME代码讲解 第6讲 Java应用大赛作品代码讲解 Tales of Youxi &lt;br&gt;1. 真正的RPG游戏“Tales of Youxi” 我们在这一讲来介绍一款名为“Tales of Youxi”的RPG游戏。它制作精良,称得上是真正...

    基于J2ME的手机游戏开发——疯狂赛车

    疯狂赛车是一款基于J2ME技术的手机游戏,该游戏实现在分辨率为标准的240*320各种手机上运行。玩家的赛车可通过键盘进行控制,而游戏控制的赛车须具有智能性的自动运行,使游戏具有可玩性。而游戏最重要的就是游戏...

    基于J2ME的手机RPG游戏研究~.doc

    【描述】:本文将深入探讨如何利用Java Micro Edition (J2ME) 技术来开发手机角色扮演游戏(RPG)。通过对问题的细化处理和清晰的算法展示,为读者提供一个优秀的实例教程。 【标签】:J2ME 【正文】: 在移动设备...

Global site tag (gtag.js) - Google Analytics