您的位置:首页 > 其它

J2ME实战:蓝牙联网俄罗斯方块(2)——系统总体设计

2009-02-08 22:16 323 查看
使用Netbeans6.1创建项目,如何创建这里就不再赘述了。
1.结构设计与系统框图:(应用UML建模创建类视图)



­本游戏的操作流程分为如下几步:
(1).用户启动MIDlet后,首先进入Master/Slave选择画面,如选择Slave,则向周围广播自己的服务,然后等待;如是Master,则搜索周围的服务。Master端在搜索到服务后,将Slave端的服务描述信息现实在屏幕上。
(2).Master选择想联机游戏的Slave(广播服务可以是多个),建立连接。
(3).按“开始”键,判断远端的玩家是否已经同意开始游戏(此时进入等待状态),如没有同意,则继续等待,并发送“等待”信号给远端玩家。
(4).按“开始”键,如远端玩家已经“等待”,则“初始化”游戏,同时发送该信号给远端玩家。
(5).开始游戏后,再按“开始”键,则暂停或游戏状态之间互相切换。
(6).如受到对方游戏结束信号,则主屏上显示胜利画面,副屏上显示失败画面,如自己失败,则主屏上显示失败画面,副屏上显示胜利画面,并发送该信号给远端玩家。
(7).如远端玩家退出或断开,则本地游戏玩家继续,代表远端玩家的状态值为退出或失去连接,并停止发送数据。
2.主程序模块MainMIDlet类

源代码如下所示:

Java代码



/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package game.teris;

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

import javax.bluetooth.*;

import game.bluetooth.*;

/**

*

* @author dongdong

*/

public class MainMIDlet extends MIDlet implements Commandlistener {

private Display display;

private BluetoothDiscovery disc;

private TetrisCanvas canvas;

private MasterSlaveSelect select;

public MainMIDlet(){//构造函数实现如下功能:

//1.通过引用display得到Display类对象;

//2.使用ErrorScreen的静态方法init(Image img,Display disp)进行参数初始化;

//3.构造BluetoothDiscovery类对象disc;

display=Display.getDisplay(this);

ErrorScreen.init(null,display);

disc=new BluetoothDiscovery(display);

}

public void startApp(){//startApp()方法实现如下功能:

//1.调用name=LocalDevice.getLocalDevice.getFriendlyName()得到本地设备;

//2.设置disc的UUID值和name;

//3.调用startUI()方法进行角色选择换面;

String name;

try{

name=LocalDevice.getLocalDevice().getFriendlyName();

}

catch(BluetoothStateException e){

showAlertandexit("","请切换蓝牙设备!",AlertType.ERROR);

return;

}

disc.setServiceUUID("20000000000010008000006057028C19");

disc.setName(name);

startUI();

}

public void startUI(){

//startUI()方法引导玩家进行角色选择画面;

select= new MasterSlaveSelect(this);

display.setCurrent(select);

}

public void pauseApp(){

}

public void destoryApp(boolean unconditional){

}

public void showAlertAndExit(String t, String s, AlertType type ){

//该方法构造一个Alert对象,标题为t,警告文本为s,警告类型为type,实现如下:

Alert a=new Alert(t,s,null,type);

a.addCommand(new Command("退出", Command.EXIT, 1));

a.setCommandListener(this);

display.setCurrent(a);

}

public void Exit(){/*该方法调用destoryApp(boolean unconditional)和

notifyDestroyed()方法退出程序*/

destroyApp(false);

notifyDestroyd();

}

public void commandAction(Command c,Displayable s){

/*该方法为commandListener接口定义的方法,进行按键响应,如c的命令类型

为Command.EXIT测退出*/

switch(c.getCommandType())

{

case Command.EXIT:

Exit();

break;

}

}

public Display getDisplay(){

//getDisplay()方法返回Display类对象的引用display;

return display;

}

public BluetoothDiscovery getDisc(){

//getDisc()方法返回BluetoothDiscovery类对象的引用disc;

return disc;

}

public void setCanvas(TetrisCanvas _canvas){

//该方法设置canvas为Tetriscanvas的引用;

canvas=_canvas;

}

public TetrisCanvas getCanvas(){

//返回TetrisCanvas类型的引用;

return canvas;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: