Java手机游戏编程之MIDP图形设计篇02

樱桃暴风雪

樱桃暴风雪

2016-02-19 15:11

下面图老师小编要向大家介绍下Java手机游戏编程之MIDP图形设计篇02,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  二. 示例:九宫格(TICTACTOEMIDLET)

  1、设计

  概述

  这个示例应用程序是一个简单的MIDlet,允许游戏者与MIDlet程序之间玩一种称为九宫格的人机游戏。这个例程说明:

  使用高级和低级用户界面组件

  在多显示屏幕之间进行切换

  处理简单的命令

  动态适配显示尺寸

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  处理键盘事件

  游戏者首先选择使用哪种棋子(用圆和叉表示),然后开始游戏。游戏者和MIDlet谁是先手是随机决定的。每走一步棋之后,程序都要检查游戏状态,判断游戏是否已经结束。游戏的几种可能结果是:游戏者赢,MIDlet程序赢,或者平局。在应用程序运行期间,双方的得分都能显示出来。游戏者可以随时开始新游戏或者退出游戏。 

  图2:所示的屏幕快照是游戏中的MIDlet用户界面。

  图2:游戏屏幕的先后顺序

  2、九宫格MIDlet

  下面是九宫格MIDlet的类模式图:

  图3:九宫格MIDlet类图

  当MIDlet启动方法startApp()时,将创建闪烁屏幕和第一个游戏屏幕(ChoosePieceScreen)。闪烁屏幕显示4秒之后,第一个游戏屏幕开始显示。ChoosePieceScreen让游戏者选择使用哪种棋子(圆还是叉)。当游戏者做出选择之后,他可以使用OK键确认。这会使ChoosePieceScreen回调主MIDlet的choicePieceScreenDone()方法。

  ChoosePieceScreen是使用高级应用编程接口List类实现的。 

 

  图4:ChoosePieceScreen是一个高级用户界面List子类

  choosePieceScreenDone()回调创建并显示下一个屏幕,这个屏幕在此应用程序中作为游戏的主屏(GameScreen)。

  每当轮到游戏者下棋的时候,游戏者使用GameScreen的箭头键和Select按钮来选择想要走的空格。每一回合之后,应用程序都会检查游戏的状态,检查其是否符合游戏结束条件并显示游戏结果。游戏者通过点击GameScreen的Quit命令结束游戏,或使用New命令开始新一轮游戏。Quit(结束)命令调用TicTacToeMIDlet的quit()方法,然后MIDlet就会调用destroyApp()方法来终止整个MIDlet程序。

  游戏程序逻辑被封装在一个单独的Game类中。本文只关注MIDlet的图形设计,而对游戏程序逻辑不作深入探讨。如果要与现有的applet Java程序作比较,请参阅http://java.sun.com/applets/jdk/1.0/demo/TicTacToe/TicTacToe.java 和http://java.sun.com/products/jfc/tsc/articles/tictactoe/index.html 中的游戏程序逻辑。

  GameScreen通过使用低级Canvas和Graphics类来实现。它使用Canvas、Image和Graphics对象来绘制图形。

  GameScreen首先初始化基于画布尺寸的显示面板。这可让MIDlet能够运行在不同显示屏幕的移动设备上。在本例中还使用了一个Image对象用来表示游戏面板。然后GameScreen根据游戏者在ChoosePieceScreen中所做的选择为游戏者和MIDlet分配棋子。游戏然后进行初始化(包括随机决定谁是先手),然后游戏就开始了。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  为了使GameScreen能够被移植,MIDlet的键盘代码必须被映射到游戏动作上,如:Up、Down、Left、Right和Fire,用于具有不同键盘的移动设备。每当一个键被按下的时候,keyPressed()方法就会判断这是一个方向键还是一个Fire/Select键。如果按下的键是方向键,光标就会相应地移动,帮助游戏者可视化地选择一个空格放入棋子。Select键用来选择一个空格放入棋子。如果探测到满足游戏结束的条件,就会显示一条信息宣布游戏的获胜者和本轮游戏的得分。(见下图)

  

  图5: GameScreen 是一个低级 Canvas(画布)子类

  3、TicTacToeMIDlet.java

  TicTacToeMIDlet非常简单:它处理MIDlet的生命周期事件。它根据需要创建屏幕对象并且处理来自屏幕的回调。ChoosePieceScreenDone回调被用来创建GameScreen。quit方法则被GameScreen用来结束游戏。

  

package example.tictactoe;
import java.io.IOException;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
public class TicTacToeMIDlet extends MIDlet {
private ChoosePieceScreen choosePieceScreen;
private GameScreen gameScreen;
public TicTacToeMIDlet()
{
}
public void startApp() {
Displayable current = Display.getDisplay(this).getCurrent();
if (current == null) {
// first time we've been called
// Get the Logo image
Image Logo = null;
try
{
Logo = Image.createImage("/tictactoe.png");
}
catch (IOException e) {
// just use null image
}
Alert splashScreen = new Alert(null, "Tic-Tac-ToenForum Nokia", Logo, AlertType.INFO);
splashScreen.setTimeout(4000);
// 4 seconds
choosePieceScreen = new ChoosePieceScreen(this);
Display.getDisplay(this).setCurrent(splashScreen, choosePieceScreen);
}
else
{
Display.getDisplay(this).setCurrent(current);
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void quit()
{
destroyApp(false);
notifyDestroyed();
}
public void choosePieceScreenDone(boolean isPlayerCircle)
{
gameScreen = new GameScreen(this, isPlayerCircle);
Display.getDisplay(this).setCurrent(gameScreen);
}
}

  4、ChoosePieceScreen.java

  ChoosePieceScreen是一个基于高级应用编程接口窗体的屏幕,允许游戏者选择圆或叉作为棋子。当游戏者按下OK键时,它使用MIDlet的回调方法choosePieceScreenDone来处理游戏者的选择。

  

package example.tictactoe;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
public class ChoosePieceScreen extends List implements CommandListener
{
private static final String CIRCLE_TEXT = "Circle";
private static final String CROSS_TEXT = "Cross";
private final TicTacToeMIDlet midlet;
private final Command quitCommand;
public ChoosePieceScreen(TicTacToeMIDlet midlet) {
super("Choose your piece", List.IMPLICIT);
this.midlet = midlet;
append(CIRCLE_TEXT, loadImage("/circle.png"));
append(CROSS_TEXT, loadImage("/cross.png"));
quitCommand = new Command("Quit", Command.EXIT, 2);
addCommand(quitCommand);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
boolean isPlayerCircle = getString(getSelectedIndex()).equals(CIRCLE_TEXT);
if (c == List.SELECT_COMMAND) {
midlet.choosePieceScreenDone(isPlayerCircle);
}
else
// quit Command
{
midlet.quit();
}
}
private Image loadImage(String imageFile)
{
Image image = null;
try
{
image = Image.createImage(imageFile);
}
catch (Exception e)
{
// Use a 'null' image in the choice list (i.e. text only choices).
}
return image;
}
}

展开更多 50%)
分享

猜你喜欢

Java手机游戏编程之MIDP图形设计篇02

编程语言 网络编程
Java手机游戏编程之MIDP图形设计篇02

Java手机游戏编程之MIDP图形设计篇03

编程语言 网络编程
Java手机游戏编程之MIDP图形设计篇03

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java手机游戏编程之MIDP图形设计篇01

编程语言 网络编程
Java手机游戏编程之MIDP图形设计篇01

Java与XML联合编程之DOM篇

编程语言 网络编程
Java与XML联合编程之DOM篇

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

几个图形(02)

编程语言 网络编程
几个图形(02)

Java网络编程之传输控制协议(一)

编程语言 网络编程
Java网络编程之传输控制协议(一)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

WPS文字如何为段落设置边框

WPS文字如何为段落设置边框

关于jsp配置问题的详细解读

关于jsp配置问题的详细解读
下拉加载更多内容 ↓