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

使用Netbeans6.1创建项目,如何创建这里就不再赘述了。
1.结构设计与系统框图:(应用UML建模创建类视图)
­本游戏的操作流程分为如下几步:
(1).用户启动MIDlet后,首先进入Master/Slave选择画面,如选择Slave,则向周围广播自己的服务,然后等待;如是Master,则搜索周围的服务。Master端在搜索到服务后,将Slave端的服务描述信息现实在屏幕上。
(2).Master选择想联机游戏的Slave(广播服务可以是多个),建立连接。
(3).按“开始”键,判断远端的玩家是否已经同意开始游戏(此时进入等待状态),如没有同意,则继续等待,并发送“等待”信号给远端玩家。
(4).按“开始”键,如远端玩家已经“等待”,则“初始化”游戏,同时发送该信号给远端玩家。
(5).开始游戏后,再按“开始”键,则暂停或游戏状态之间互相切换。
(6).如受到对方游戏结束信号,则主屏上显示胜利画面,副屏上显示失败画面,如自己失败,则主屏上显示失败画面,副屏上显示胜利画面,并发送该信号给远端玩家。
(7).如远端玩家退出或断开,则本地游戏玩家继续,代表远端玩家的状态值为退出或失去连接,并停止发送数据。
2.主程序模块MainMIDlet类
源代码如下所示:
Java代码 复制代码
  1. /*  
  2.  * To change this template, choose Tools | Templates  
  3.  * and open the template in the editor.  
  4.  */  
  5. package game.teris;   
  6. import javax.microedition.lcdui.*;   
  7. import javax.microedition.midlet.*;   
  8. import javax.bluetooth.*;   
  9. import game.bluetooth.*;   
  10. /**  
  11.  *  
  12.  * @author dongdong  
  13.  */  
  14. public class MainMIDlet extends MIDlet implements Commandlistener {   
  15.     private Display display;   
  16.     private BluetoothDiscovery disc;   
  17.     private TetrisCanvas canvas;   
  18.     private MasterSlaveSelect select;   
  19.        
  20.     public MainMIDlet(){//构造函数实现如下功能:   
  21.         //1.通过引用display得到Display类对象;   
  22.         //2.使用ErrorScreen的静态方法init(Image img,Display disp)进行参数初始化;   
  23.         //3.构造BluetoothDiscovery类对象disc;   
  24.         display=Display.getDisplay(this);   
  25.         ErrorScreen.init(null,display);   
  26.         disc=new BluetoothDiscovery(display);   
  27.            
  28.     }   
  29.     public void startApp(){//startApp()方法实现如下功能:   
  30.         //1.调用name=LocalDevice.getLocalDevice.getFriendlyName()得到本地设备;   
  31.         //2.设置disc的UUID值和name;   
  32.         //3.调用startUI()方法进行角色选择换面;   
  33.         String name;   
  34.         try{   
  35.              name=LocalDevice.getLocalDevice().getFriendlyName();   
  36.         }   
  37.         catch(BluetoothStateException e){   
  38.             showAlertandexit("","请切换蓝牙设备!",AlertType.ERROR);   
  39.             return;   
  40.         }   
  41.         disc.setServiceUUID("20000000000010008000006057028C19");   
  42.         disc.setName(name);   
  43.         startUI();   
  44.                    
  45.     }   
  46.     public void startUI(){   
  47.         //startUI()方法引导玩家进行角色选择画面;   
  48.         select= new MasterSlaveSelect(this);   
  49.         display.setCurrent(select);   
  50.            
  51.     }   
  52.     public void pauseApp(){   
  53.            
  54.     }   
  55.     public void destoryApp(boolean unconditional){   
  56.            
  57.     }   
  58.     public void showAlertAndExit(String t, String s, AlertType type ){   
  59.         //该方法构造一个Alert对象,标题为t,警告文本为s,警告类型为type,实现如下:   
  60.         Alert a=new Alert(t,s,null,type);   
  61.         a.addCommand(new Command("退出", Command.EXIT, 1));   
  62.         a.setCommandListener(this);   
  63.         display.setCurrent(a);   
  64.            
  65.     }   
  66.     public void Exit(){/*该方法调用destoryApp(boolean unconditional)和  
  67.      notifyDestroyed()方法退出程序*/  
  68.         destroyApp(false);   
  69.         notifyDestroyd();          
  70.     }   
  71.     public void commandAction(Command c,Displayable s){   
  72.         /*该方法为commandListener接口定义的方法,进行按键响应,如c的命令类型  
  73.          为Command.EXIT测退出*/  
  74.         switch(c.getCommandType())   
  75.         {   
  76.             case Command.EXIT:   
  77.             Exit();   
  78.             break;     
  79.         }   
  80.            
  81.     }   
  82.     public Display getDisplay(){   
  83.         //getDisplay()方法返回Display类对象的引用display;   
  84.         return display;   
  85.            
  86.     }   
  87.     public BluetoothDiscovery getDisc(){   
  88.         //getDisc()方法返回BluetoothDiscovery类对象的引用disc;   
  89.         return disc;         
  90.     }   
  91.     public void setCanvas(TetrisCanvas _canvas){   
  92.         //该方法设置canvas为Tetriscanvas的引用;   
  93.         canvas=_canvas;   
  94.            
  95.     }   
  96.     public TetrisCanvas getCanvas(){   
  97.         //返回TetrisCanvas类型的引用;   
  98.         return canvas;   
  99.            
  100.     }   
  101. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值