“单词背多分”项目说明书.doc_第1页
“单词背多分”项目说明书.doc_第2页
“单词背多分”项目说明书.doc_第3页
“单词背多分”项目说明书.doc_第4页
“单词背多分”项目说明书.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目名称:蓝牙单词背多芬班级:08游戏设计班制作人:08801112 胡俊豪08801111 叶纯智一可行性分析21.1 前景21.2开发目的2二、开发人员2三游戏策划23.1基本部分23.2内容部分2四.技术剖析(重点)54.1开发流程及项目开发进程54.2主要类64.3蓝牙通讯-个人理解74.4主要代码84.4.1游戏引擎84.4.2蓝牙通信94.4.3单词数组生成13五、个人感受及体会16一可行性分析1.1 前景“英语四六级”虽然是大多数人不愿染指的噩梦,但是在天朝这种“没证没饭吃”这样伟大而和谐的大时代背景下,大多数人还是抱着淹死总比饿死好的觉悟奔向ABC的海洋,梦想终有一天能跨过无尽之海,到达证之彼岸,一睹有饭吃大神的风采。于是人们开始期盼能有那么一个叫做“单词背多分”的东西诞生,以助他们早日饱腹1.2开发目的 解救众生!可以使学习英语单词变得有趣,互动学习更能提高学习效率.二、开发人员胡俊豪、叶纯智三游戏策划3.1基本部分 3.1.1游戏名称单词背多分 3.1.2游戏主题单词记忆3.1.3游戏类型单词记忆类蓝牙对战 3.1.4游戏操作设计手机按键 3.1.5游戏运行环境Java平台 3.1.6游戏运作方式单机模式或蓝牙对战模式3.2内容部分 描述游戏过程(单人模式)游戏一开始运行系统会随机生成一个单词一密码形式显示在“字母提示”栏表示该单词的字母数,该单词的中文释义会出现在“释义提示”栏。玩家跟据所得到的信息猜测该单词,并将答案输入“输入”栏,“本机上一次输出”栏保存玩家上一次输出的单词。答案正确时随机生成另一个单词继续猜。(双人模式)比双人模式多了一个“对方输出”栏。a游戏画面单机模式服务端 客户端双人模式 四.技术剖析(重点)4.1开发流程及项目开发进程 分析实例(4.27)设计框架(4.28)蓝牙通讯(5.1)设计界面(4.30)游戏引擎(5.5)整体测试(5.6)手机测试(5.12)上市(?.?)4.2主要类GameMidletGameEngineBtConnectorBtServerBtClientSingerGamegetWordInTxtdisplay, isServerEngine, isServerBTConnector4.3蓝牙通讯-个人理解服务端:首先要定义一个UUID类 在蓝牙中,每个服务和服务属性都唯一地由全球唯一标识符 (UUID)来校验。正如它的名字所暗示的,每一个这样的标识符都要在时空上保证唯一。UUID类可表现为短整形(16或32位)和长整形(128位)UUID。他提供了分别利用String和16位或32位数值来创建类的构造函数,提供了一个可以比较两个UUID(如果两个都是128位)的方法,还有一个可以转换一个UUID为一个字符串的方法。UUID实例是不可改变的(immutable),只有被UUID标示的服务可以被发现。 然后初始化localDevice = LocalDevice.getLocalDevice(); / 获得本地设备discoveryAgent = localDevice.getDiscoveryAgent(); / 获得本地设备代理最后设置设备发现模式,/并打开服务连接,等待客户端来唤醒.if (!localDevice.setDiscoverable(DiscoveryAgent.GIAC) System.out.println(无法设置设备发现模式!.);return;streamConnectionNotifier = (StreamConnectionNotifier) Connector.open(connectionURL); / 打开服务连接serviceRecord = localDevice.getRecord(streamConnectionNotifier);/ 打开连接,并等待客户端streamConnection = streamConnectionNotifier.acceptAndOpen();客户端如果是客户端使用蓝牙,是通过一个预定义的接口DiscoveryListener实现的,要经过很多步骤才到Connector.open(url)这一步。这一步连接的实际是选定设备的选定服务。先说说接口。这个接口涉及到4个函数需要实现。第一个deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)在每次发现了一个设备的时候会自动调用第二个inquiryCompleted(int discType) 在设备搜索已经结束的时候会自动调用第三个servicesDiscovered(int transID, ServiceRecord servRecord)当选定好设备之后,想要搜索该设备提供的服务时,每寻找到一个服务,该方法就会自动调用第四个serviceSearchCompleted(int transID, int respCode) 当对该设备的服务搜寻完毕时会自动调用除了DiscoveryListener接口之外,客户端连接还有几个类比较重要,第一是连接代理DiscoveryAgent,命令设备开始搜索周围设备的startInquiry(),命令开始搜索选定设备服务的searchService()都是通过它。第二是本地设备也就是这个客户端自己LocalDevice,连接代理就是通过它获得的。第三是RemoteDevice,就是具有蓝牙功能的周边设备。第四是SeviceRecord,就是设备所提供的服务,最后要连接的就是它。当接口的那些方法都实现了之后,就可以通过ServiceRecord的getConnectionURL()获取连接,再通过(StreamConnection)Connector.open(url)打开连接,进行通话。4.4主要代码源代码中的BTClient.java 、BTServer.java 、BTConnector.java类取自蓝牙DEMO代码做少许改进,其它类皆为原创。4.4.1游戏引擎if (a.equals(Array_EN_Input()a表示玩家在输入框内输入的内容,Array_EN_Input()为“字母提示”栏内的单词。word_i = Math.abs(random.nextInt()%350)+2;word_i 为控制生成随机单词的变量,答对后就随机另一个生成单词数组内相应的单词,350为单词数组的大概长度,+2是因为取到数组的前两个单词的时候会出现莫名其妙的错误(第一个以密码形式输出的时候会多一个字节,第二个会少一个,其它则正常,所以+2),解决不了,老师有时间的话帮忙看下吧。 public void checkWin(String a) if (a.equals(Array_EN_Input() Output2.setString(没错!就是 + Input.getString() + ,凤姐的智商都比不上你啊!); word_i = Math.abs(random.nextInt()%350)+2;en = Array_EN_Input();ch = Array_CH_Input();english.setString(en);chinese.setText(ch);System.out.println(word_i); else Output2.setString(Input.getString()+错误);4.4.2蓝牙通信根据玩家身份(服务端和客户端)调用不同的函数public void start() if ( isServer ) server = new BTServer( this ); server.start(); System.out.println(服务器 btserver类已经启动。); else client = new BTClient( this ); client.start(); System.out.println(客户端 btclient类已经启动。); /根据当前是服务器还是客户端发送对应的数据 public void sendMessage( String text ) if ( isServer=true ) System.out.println(服务器打开sendMessage函数); server.sendMessage( text ); else System.out.println(客户端打开sendMessage函数); client.sendMessage( text ); /接收数据message,调用Engine的receiveMessage处理 public void receiveMessage( String message ) System.out.println(BTConnector接收到数据 + message ); Engine.receiveMessage(message); /调用Engine类的receive方法做进一步的处理服务端主要代码:private void openSerice() try / 设置设备发现模式,if (!localDevice.setDiscoverable(DiscoveryAgent.GIAC) System.out.println(无法设置设备发现模式!.);return;streamConnectionNotifier = (StreamConnectionNotifier) Connector.open(connectionURL); / 打开服务连接serviceRecord = localDevice.getRecord(streamConnectionNotifier);System.out.println( 等待客户端连接.);streamConnection = streamConnectionNotifier.acceptAndOpen(); / 打开连接,并等待客户端dis = streamConnection.openDataInputStream();dos = streamConnection.openDataOutputStream();isConn = true;sendMessage(已经和客户端连接); catch (IOException e) e.printStackTrace();客户端主要代码:public void inquiryCompleted(int disType) System.out.println(搜索设备完毕.);chooseBt();/选择连接服务器try /ServiceRecord sr = ( ServiceRecord )records.elementAt(0);String device_address = btDevice.getBluetoothAddress();String conURL = btspp:/ + device_address + :1;conn = (StreamConnection) Connector.open(conURL); /打开连接isConn = true; / 设置连接状态为己连接System.out.println(isConn);/setTitle(聊天中.);dis = conn.openDataInputStream();/ 打开输入流dos = conn.openDataOutputStream();/ 打开输出流new Thread(this).start(); /启动线程sendMessage(已经和服务器连接); catch (Exception e) e.printStackTrace();4.4.3单词数组生成/中文数组 public String Array_CH_Input() wordsplit=new getWordInTxt(); chinese_word=wordsplit.getWordInTxt(chinese.txt); return chinese_wordword_i; /英语数组 public String Array_EN_Input() wordsplit=new getWordInTxt(); english_word =wordsplit.getWordInTxt(english.txt); return english_wordword_i;/单词分离类public class getWordInTxt private String wordsAarry=null;private InputStream in = null;private DataInputStream dis = null;private byte data = null;private int count=0;public String getWordInTxt(String name) in = this.getClass().getResourceAsStream(/ + name);/将位于res目录下的xx.txt中数字读出。dis = new DataInputStream(in);try dis.mark(dis.available() + 1);count = dis.available();dis.reset();data = new bytecount;for (int i = 0; i count; i+) datai = dis.readByte();String txt = new String(data, UTF-8);wordsAarry = split(txt, %);/ System.out.println(读到的:+wordsAarry2); catch (IOException e) / TODO 自动生成 catch 块e.printStackTrace();return wordsAarry;public static String split(String original, String regex) /分割字符串 / 取子串的起始位置int startIndex = 0;/ 将结果数据先放入Vector中Vector v = new Vector();/ 返回的结果字符串数组String str = null;/ 存储取子串时起始位置int index = 0;/ 获得匹配子串的位置startIndex = original.indexOf(regex);/ System.out.println(0 + startIndex);/ 如果起始字符串的位置小于字符串的长度,则证明没有取到字符串末尾。/ -1代表取到了末尾while (startIndex original.length() & startIndex != -1) String temp = original.substring(index, startIndex);/ 取子串v.addElement(temp);/ 设置取子串的起始位置index = startIndex + regex.length();/ 获得匹配子串的位置startIndex = original.indexOf(regex, startIndex + regex.length();/ 取结束的子串v.addElement(original.substring(index + 1 - regex.length();/ 将Vector对象转换成数组str = new Stringv.size();for (int i =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论