1、手机五子棋游戏的设计与实现专业: 姓名: 班级: 学号:指导教师: 基于 J2ME 的手机五子棋游戏2摘 要J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。它因其“write once,run anywhere”的 Java特性而提高了开发的效率。随着手机性能的不断提高,手机休闲娱乐应用将成为 PC休闲娱乐应用之后又一重要业务增长点。棋类游戏规则单一,比较适合在手机等便携终端推广。由于具有跨平台、易于移植、占用空间小的优势,J2ME 成为移动应用开发平台的主流,并提供了很多用以支持移动应用软件的开发的 API。现将
2、该技术用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行过程中内存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。游戏的开发以 J2ME为平台,利用 Java技术,结合 J2ME的 MIDP技术,并对于程序设计思想,重要类、方法等展开讨论。在对弈部分,分析设计走棋算法,选择合适的方式组织成代码,实现基本的人工智能。过程中使用了 J2ME中的 CLDC/MIDP软件体系,主要运用了 MID Profile的特定类的支持,来完成游戏的开发。关键词:J2ME;CLDC;MIDP基于 J2ME 的手机五子棋游戏3A
3、bstractJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It improves the efficiency of the development process because of its “write once, run anywhere“ nature. The development trend of the entertainment market based on the cell p
4、hone is very obvious because the handset performance enhances unceasingly. The entertainment market based on the cell phone will to be the new important business growth point follow the PC entertainment market. As the rules of a single chess game, it is more suitable for mobile phones and other port
5、able terminal extension. J2ME has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of APIs to support the development of mobile application software. The technology for mobile game development, can achieve the rapid development of
6、the game. It is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability. The game has designed by J2ME, the Java technology and the MI
7、DP technology. I studied the procedure thought, the important class and the method. In the playing chess part, I have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. On the other hand, I learned software system of CLDC/MIDP and
8、 the specific class of the MID Profile to complete the game development. Key words: J2ME;CLDC ;MIDP基于 J2ME 的手机五子棋游戏4目 录1 概述 51.1 课题研究背景 51.2 课题研究意义 52 开发技术背景 62.1 JAVA语言概述 .62.2 J2ME简介 .62.3 移动信息设备简表 63 系统分析及总体设计 73.1 可行性分析 73.2 需求分析 83.3 系统概要设计 84 系统详细设计 94.1 界面设计 94.1.1 图形的低级绘制 104.1.2 用户按键设计 104.
9、2 走棋算法 114.3 胜负判断 115 系统测试 115.1 测试方案 115.2 测试结果 126 总 结 .13基于 J2ME 的手机五子棋游戏5基于 J2ME的手机五子棋游戏的设计与实现1 概述 1.1 课题研究背景五子棋是当前非常流行的一种棋。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。手机游戏的实现方式主要包括嵌入式游戏、浏览器游戏、短消息服务游戏、J2ME和其它的解释语言。Java 2 Micro Edition是一种针对移动电话和 PDA这样的小型设备的 Java语言。J2ME 与台式机中的 Java相比还是有一定的限制,但是它已经极大的提高了移动电话支
10、持游戏的能力。并且具备一定的优势:庞大的潜在用户群、便携性、开发门槛较低。手机是现代生活方式的产物,如同因特网的普及导致网络游戏的高速发展一样,手机的普及,对满足不同功能的手机软件的需求也就越来越迫切,这就需要比较好的手机软件开发平台,此时具有平台无关性优点的 J2ME开发平台也就应运而生。与传统的主流的 PC游戏相比,手机游戏的价值在于打发一些无聊的时间,作为一个移动的娱乐终端,手机游戏施展身手的机会永远可能是在地铁站、公交车或者是洗手间这些地方,也许在庞大的游戏行业里,手机游戏将永远扮演着一个边缘者的角色,因为谁也不能指望一个人在家的时候用手机玩游戏或者看电影。但是手机游戏的市场是巨大的,
11、即便是只有十分之一的用户来购买游戏,那也将是不可忽视的商业机遇。手机游戏是手机的一种高附加值操作软件,游戏编程是手机软件编程的重要组成,同时也持续推动手机软件技术升级进步。手机游戏按手机平台分类,主要有 J2ME、Brew、UniJa 等。其中 J2ME手机开发平台使用最为广泛。作为SUN公司针对微型嵌入式消费电子产品开发的编程系统,J2ME 技术是当前手机软件开发的主流平台,各大手机生产厂商目前的主流产品绝大都使用 J2ME技术。基于 J2ME技术开发手机软件可以实现手机功能的多样化与专业化,极大的满足了人们对手机要求更高的需求。1.2 课题研究意义本设计基于 J2ME技术,开发一款五子棋游
12、戏软件,可以供人们闲暇时间随时随地娱乐,提高棋艺。五子棋不但容易上手,而且它区别于别的游戏,它不但使人娱乐,而且能使人的头脑变得更加聪明。通过对该课题的研究,首先,进一步熟悉面向对象语言,加深对 J2ME层次结构的了解。通过 eclipse集成开发环境创建软件,最终形成一个具备基本功能的手机五子棋游戏,可应用于便携式设备,适合于棋类爱好者。其次,了解基于 J2ME 的手机五子棋游戏6手机游戏开发的特点和现状。2 开发技术背景2.1 JAVA 语言概述 Java的出现是源于对独立于平台语言的需要,希望这种编程语言能编写出嵌入各种家用电器等设备的芯片上、且易于维护的程序。人们发现当时的编程语言都有
13、一个共同的缺点,就是针对 CPU芯片进行编译。这样,一旦电器设备更换了芯片就不能保证程序正确运行。九零年 Sun公司成立了开发小组,开始致力于开发一种可移植的、跨平台的编程语言,该语言能生成正确运行于各种操作系统、各种芯片上的代码。Java 的出现标志着真正的分布式系统的到来。Java是一种跨平台的、面向对象的、分布式的、解释的、安全的、结构的、可移植的、性能很优异的多线程的动态语言。Java的特点:平台无关性;安全性;面向对象;分布式;健壮性。2.2 J2ME 简介J2ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE和J2EE共同组成Java技术的三个重要的分支。J2ME
14、实际上是一系列规范的集合,由JCP组织制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。J2ME是JAVA的三大分支之一,专门用于开发基于消费性电子产品的应用。J2ME支持个人手持移动设备,如手机、PDA等。手机用户可以通过支持JAVA功能的终端,使用多种全新图形化、动态化和个性化的移动增值服务。2.3 移动信息设备简表移动信息设备简表(MIDP)为移动电话和入门级PDA设计,为移动应用程序提供了所需的全部核心功能,包括应用程序模型、用户界面、持久性数据存储、联网能力及应用程序管理
15、功能,目前应用非常广泛的MIDlet就是在MIDP中定义的。MIDP框架如图 2-1所示。基于 J2ME 的手机五子棋游戏7图 2-1 MIDP框架图MIDP提供核心应用程序功能,包括用户界面、网络连接、本地数据存储和应用程序生命周期管理。MIDlet生命周期流程图如图2-2所示。MIDP中含有下列API包:A. javax.microedition.lcdui: 用户界面(UI)API,它为MIDP应用提供了一整套实现用户界面的功能特性。B. javax.microediton.rms: 移动信息设备描述提供了一种让MIDlets持久性储存并在以后可以取回数据的机制。C. javax.mic
16、roedition.midlet: 这个MIDlet包明确定义了MIDP应用,也定义了和应用环境之间的交互。D. javax.microedition.io: 移动信息设备还描述包括基于有限连接设备配置GenericConnection框架的网络支持。图 2-2 MIDlet生命周期流程图3 系统分析及总体设计3.1 可行性分析3.1.1 技术可行性基于 J2ME 的手机五子棋游戏8五子棋是传统的对弈游戏,历史悠久、规则单一。手机游戏的实现方式主要包括嵌入式游戏、浏览器游戏、短消息服务游戏、J2ME 和其它的解释语言。Java 2 Micro Edition是一种针对移动电话和 PDA这样的小
17、型设备的 Java语言,虽然它与台式机中的 Java相比还是有一定的限制,但是已经极大的提高了移动电话支持游戏的能力。在 eclipse环境中编写并在模拟器中运行简单明了。3.1.2 操作可行性本游戏开发后可导入手机操作,供个人平常娱乐所用,完全使用手机键盘操作,操作简单,所以在这方面是完全可行的。3.2 需求分析3.2.1 系统的性能需求首先,手机游戏最大的问题在于每一款手机拥有自己的屏幕大小和特定的API及性能。游戏开发过程中,要考虑到游戏程序的设计要能合乎大多数手机的应用。J2ME 提出的一系列标准使得使用 J2ME开发的游戏可以在配备 J2ME的任何厂家的移动设备上运行。软件最好操作简
18、单容易。受手机屏幕大小和显示的影响。手机键盘的不方便,游戏需要设计得容易操作。其次,软件具有人工智能算法原理要简单,并且运行快速。对于人机游戏,不需要网络连接,游戏处理不会有太长的等待时间。游戏是需要快速反应的。手机处理器的频率直接要求我们需要使用简单实用的智能算法。3.2.2 系统的功能需求A.游戏内容此款游戏主题是五子棋对弈。无“禁手”的规则基本是人人皆知。相同颜色的棋子,五子一线为胜。B.游戏方式区别于一般的生活中的人与人的对弈,用在手机上为人机对弈,在手机屏幕上构造一个游戏棋盘,并且设计黑、白棋子。利用人工智能的相关知识实现对弈。C.游戏对象五子棋手机游戏是大众游戏,游戏者只要具备一般
19、的操作知识就可以进入游戏。对玩游戏者并没有什么特殊要求。D.游戏目标此款手机游戏为棋类游戏,就是为了让人们闲暇时间休闲、锻炼棋艺。a) 欢迎界面:玩家可点击“确定”进入规则说明界面。b) 规则说明界面:玩家可点击“开始游戏”进入游戏。 c) 棋盘界面:对弈界面,使用上、下、左、右键来移动落子点位,使用确定按钮来落子,相应条件下可实现重新开始游戏功能。d) 胜负判断:涉及人工智能,用以判断人与机器的输赢状况,游戏无“禁基于 J2ME 的手机五子棋游戏9手” ,五子首先连成一线者胜。3.3 系统概要设计该系统设计的主要模块分为:欢迎模块、规则说明模块、对弈与胜负判断模块。各主要模块的功能描述如下:
20、欢迎模块:这部分是游戏出现的第一个界面,主要是为了说明已经进入五子棋游戏系统。规则说明模块:此模块说明了游戏规则。玩家可以选择开始游戏或返回欢迎界面。对弈模块:该部分主要是进行人机对弈的棋盘界面。该模块有退出游戏和重新开始的功能。胜负判断模块:这部分即是对每次棋局结果的判断,是人赢了或者是电脑获胜。系统主要功能模块如图 3-1所示。基于 J2ME 的手机五子棋游戏欢迎模块胜负判断模块规则说明模块对弈模块重新开始图 3-1 系统功能模块图4 系统详细设计4.1 界面设计该部分主要说明手机游戏画面显示,包括画面的低级绘制以及如何进行游戏按键处理。本程序的设计主要使用了 MIDP所提供的 javax
21、.microedition.lcdui包中的类来实现手机的用户界面。各个类如表 4-1所示。基于 J2ME 的手机五子棋游戏10表4-1 javax.microedition.lcdui包类 描 述接口CommandListener 允许创建一个高级的UI命令消息的监听器UI系统以及工具类Display 代表系统显示设备和输入设备的管理器Image 提供一个类来保存图像对象(以PNG格式)Displayable 提供一个可以显示对象的抽象基类高级UICommand 抽象用户的交互动作低级UIGraphics 提供二维图像工具Canvas 提供一个创建低级UI图像的基类4.1.1 图形的低级绘制
22、 若是要在MIDlet中使用低级用户界面设计,就必须定义一个从Canvas类派生出来的子类。在 Canvas类的子类中必须实现 paint()方法。Graphics 对象包含了所有的在屏幕上绘画的方法,例如 drawArc()、drawLine(),drawRect (),drawString()和 fillArc()等。本程序设计用到了Canvas类中的基本绘图方法:绘制直线:Public void drawLine(int x1,int y1,int x2,int y2)绘制矩形:Public void drawRect(int x,int y,int width,int height)。
23、绘制字符串:Public void drawString(String str,int x,int y,int anchor)。填充指定矩形内的圆:Public void fillArc(int x,int y,int width,int height,int startAngel,in tint arcAngel)。使用上述方法绘制棋盘界面:绘制棋盘:gg.drawLine(gridWidth,i*gridHeight,grifWidth*lineNumber+1,i*gridHeight)。gg.drawLine(i*gridWidth,gridHeight,i*gridWidth,lin
24、eNumber*gridHeight+1)。绘制棋子:gg.fillArc(x-gridwidth*2/5),y-基于 J2ME 的手机五子棋游戏11gridHeight*2/5,gridWidth*4/5,gridHeight*4/5,0,360)。绘制显示输赢的字符串:gg.drawString(Show String,base x,base y,Graphics.TOP| Graphics.LEFT)。4.1.2 用户按键设计 游戏是交互的,因此在游戏中一个重要的内容就是响应用户的按键操作。下面介绍在游戏中用户按键响应的实现。使用 Canvas中的 protected void keyP
25、ressed(int keycode)函数,当按下按键时调用该函数,实现上下左右的按键消息。设计举例:Protected void keyPressed(int keyCode) if (keycode=getKeyCode(Canvas.LEFT)手机键盘与平常设备键盘不同,命令的执行主要通过 command类设计。该类构建在执行信息状态列中,功能是在对象中命令执行动作状况。动作定义在CommandListener,并且结合显示状态,主要提供接口与使用者交互模式。设计举例:private Command ok1 = new Command(“确定“, Command.OK, 1);使用优先级
26、作为希望的命令显示顺序的标识。一般数字越小,在列表中的级别就越高。4.2 走棋算法对于五子棋游戏,主要就是判断棋盘上是否存在五子连珠情况。判断五子连珠的原理是从横,竖,左斜线,右斜线 4条线上是否存在 5个相连的同类棋子。对战一方落子后,在该处向 8个方向检测连续的同类棋子,如果检测到直线方向上存在 5个连续的同类棋子,则判断为“连五”并结束检测。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。4.3 胜负判断为检测当前棋局是否已经有一方获胜,从横向、纵向、左斜、右斜四种情况考虑。首先,获取当前下棋点(x,y)和棋子的颜色,接着计算连续的相同颜色的棋子;有连续 5个相
27、同的棋子则 return true;给出本次棋局结果。对战一方落子后,在该处向 8个方向检测连续的同类棋子,如果检测到直基于 J2ME 的手机五子棋游戏12线方向上存在 5个连续的同类棋子,则判断为“连五”并结束检测。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。5 系统测试5.1 测试方案程序测试是程序编码完成后必须的一步,通过测试,检查代码的正确性,了解功能的实现性,可以达到发现问题,改进功能,让程序更完善更健壮。没有经过测试的软件是无法大量投入使用的,因为它无法保证可以在用户端健壮地运行。测试通常分为两大类:白盒测试和黑盒测试。“白盒测试”指的是测试者清楚待测
28、对象内部工作机制的测试;“黑盒测试”指的是测试者无需了解测试对象内部工作机制的测试。因为并不是所有的用户都能知道系统的结构和处算法,所以,从用户的角度出发,采用黑盒测试法对系统进行功能测试。5.2 测试结果a)运行程序,出现欢迎界面,如图 5-1 所示:5-1b)点击“确定”进入游戏说明界面,可点击“返回”回到欢迎界面,如图 5-2所示:基于 J2ME 的手机五子棋游戏135-2c)点击“开始游戏”进入棋盘界面,默认玩家先行,为黑子,如图 5-3所示5-3d)对弈棋盘如图 5-4所示,假设走棋结果人获胜。5-4e)假设走棋结果电脑获胜,结果如图 5-5所示。基于 J2ME 的手机五子棋游戏14
29、5-56 总 结整个设计基本完成,由于能力和时间的关系,总是有很多不尽人意的地方,譬如功能较少、外观较粗糙等。通过这个程序设计,我深刻体会到即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。刚开始决定编写五子棋游戏时,我觉得难度比较大。后来通过网络寻找相关的视频学习相关知识,并查找,一点点进行下去。同时,因为该程序的设计侧重于算法部分,对弈算法的设计,对于我而言很难,通过网络资源,我了解到,不少参考资料上已提供了各种精良可用的现成算法,我可以先学习这些已经设计好的算法,选择合适的方式组织代码。整个设计过程中,我受益非浅,感受颇深,体会到软件开发并不是纯数学,
30、更侧重于分析。虽然设计结果并不是很完善,有很多地方还有待进一步改进,但是我觉得最可贵的是过程中的收获。在以后的时间里,我仍将努力学习,深入实践,不断提升自我,努力实现更高的自我价值。参考文献1 赫玉龙,李向前.J2ME 移动应用开发M.北京:清华大学出版社,2006.9.2 李振鹏,龚剑.J2ME 手机游戏开发技术详解M.北京:清华大学出版社,2006.3.3 王森.Java 手机/PDA 程序设计入门M.北京:电子工业出版社,2004.3.5 欧阳泉,许向阳.J2ME 平台结构及开发应用J.计算机与数字工程,2006,(03):112-113.6 刘洁,段晓勇.基于 J2ME的 Java手机
31、应用程序的开发J.科技广场,2007,(01):66-68.7 李观华,范辉.J2ME 在移动通信程序中的应用J.计算机应用,2003,(03):124-126. 8http:/ J2ME 的手机五子棋游戏15源代码:Midlet1.javaimport javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class Midlet1 extends MIDlet implements CommandListenerpublic Display display;private Canvas1 lc = new
32、Canvas1();/欢迎界面private Form W;/新建一个 form 对象private Command ok1;private Command exit;private Image welcomeimg;/说明界面private Form E;private Command ok2;private Command back;private Image helpimg;public Midlet1()lc.setParam(); /初始化数组display = Display.getDisplay(this); /通过 display 的静态方法 getdisplay()来获得当前
33、设备的 display 对象public void commandAction(Command c,Displayable s)if (c =exit)this.notifyDestroyed();if (c = ok1)display.setCurrent(E);/调用 setcurrent()方法将基于 J2ME 的手机五子棋游戏16display 对象绑定到显示设备if (c = back)display.setCurrent(W);if (c = ok2)display.setCurrent(lc);public void startApp()/欢迎界面W= new Form(“欢迎您
34、进入五子棋游戏_“);display.setCurrent(W);/调用 setcurrent 方法将 display对象绑定到显示设备ok1 = new Command(“确定“,Command.OK,1);exit = new Command(“退出“,Command.EXIT,1);W.addCommand(exit); /调用 addCommand 方法将 Command 对象添加到 GUI 显示组件W.addCommand(ok1);trywelcomeimg = Image.createImage(“/welcome.png“); W.append(welcomeimg);catc
35、h (Exception e)/游戏说明界面E= new Form(“五子棋游戏说明“);ok2= new Command(“开始游戏“,Command.OK,1);back= new Command(“返回“,Command.BACK,1);E.addCommand(ok2);E.addCommand(back);tryhelpimg = Image.createImage(“/help.png“); E.append(helpimg); /添加图层catch (Exception e)/设置命令监听者基于 J2ME 的手机五子棋游戏17W.setCommandListener(this);
36、E.setCommandListener(this);public void pauseApp()public void destroyApp(boolean unconditional)Canvas1.javaimport javax.microedition.lcdui.*;import java.util.*;public class Canvas1 extends Canvas implements CommandListener Graphics gg; Random rnd = new Random(); / 构造一个随机数生成器int lineNumber=15;int grid
37、Width=10; /格子的宽度int gridHeight=10; /格子的高度int lineColor = 0x006699; /棋盘格子线的颜色int focusColor = 0x00ff00; /焦点的颜色int intRunMode = 0; /0-等待初始态,1-下棋,2-等待用户响应int intPlayer =0; /0-黑棋(先下者) ,1-白棋(后下者)int gotoValue;int qipan;/使用一个二维数组记录棋盘棋子的分布/检查后,如果不存在五子,则全为 0,如果存在,则依次是五个子的位置int wuzi = new int5;int q;int m;/i
38、nt g=1,16,15,17; /这个int g= new int4;int baseX=10; /棋盘左上角 X基于 J2ME 的手机五子棋游戏18int baseY=10; /棋盘左上角 Yint currentX; /当前所在区域的左上角 Xint currentY; /当前所在区域的左上角 Yint currentA; /当前是第几个竖线int currentB; /当前是第几个横线int LastA; /最后一个子位于第几根竖线int LastB; /最后一个子位于第几根横线boolean loadedMenu = false;Command cmdRestart = new Co
39、mmand(“重新开始“, Command.SCREEN, 1);/设置一些棋盘参数public void setParam() qipan = new intlineNumber * lineNumber;q = new int3lineNumber * lineNumber;m = new int3lineNumber * lineNumber;g0 = 1;g1 = lineNumber ;g2 = lineNumber - 1;g3 = lineNumber + 1;public void paint(Graphics g) addCommand(cmdRestart);setComm
40、andListener(this); gg=g;if (intRunMode = 0) buildChessboard();/事件处理函数public void commandAction(Command c, Displayable d) if (c = cmdRestart) intRunMode = 0;repaint();基于 J2ME 的手机五子棋游戏19/* 开始游戏时所做的一些工作* 比如画棋盘,初始化一些参数、数组,并设置最开始时的焦点位置*/public void buildChessboard() try /初始化数组for (int i = 0; i height) my
41、drawRect(x + gridWidth * 2, y, gridWidth, gridHeight);mydrawRect(x + gridWidth * 2, y + gridHeight, gridWidth, gridHeight);/最右边的竖线DrawChessman(x + gridWidth * 3, y);DrawChessman(x + gridWidth * 3, y + gridHeight);DrawChessman(x + gridWidth * 3, y + gridHeight * 2);/最下面的横线DrawChessman(x, y + gridHeig
42、ht * 2);DrawChessman(x + gridWidth, y + gridHeight * 2);DrawChessman(x + gridWidth * 2, y + gridHeight * 2);else mydrawRect(x, y + gridHeight * 2, gridWidth, gridHeight);mydrawRect(x + gridWidth, y + gridHeight * 2, gridWidth, gridHeight);基于 J2ME 的手机五子棋游戏21/最右边的竖线DrawChessman(x + gridWidth * 2, y);D
43、rawChessman(x + gridWidth * 2, y + gridHeight);DrawChessman(x + gridWidth * 2, y + gridHeight * 2);DrawChessman(x + gridWidth * 2, y + gridHeight * 3);/最下面的横线DrawChessman(x, y + gridHeight * 3);DrawChessman(x + gridWidth, y + gridHeight * 3);/画光标gg.setColor(focusColor);gg.drawLine(currentX, currentY
44、,currentX + gridWidth /5, currentY);gg.drawLine(currentX, currentY, currentX,currentY + gridHeight /5);gg.drawLine(currentX +gridWidth*4/5,currentY,currentX + gridWidth, currentY);gg.drawLine(currentX + gridWidth, currentY, currentX + gridWidth,currentY + gridHeight /5); gg.drawLine(currentX,current
45、Y + gridHeight * 4/ 5,currentX, currentY + gridHeight);gg.drawLine(currentX,currentY + gridHeight,currentX + gridWidth / 5,currentY + gridHeight); gg.drawLine(currentX +gridWidth*4/5,currentY + gridHeight, currentX + gridWidth,currentY + gridHeight); gg.drawLine(currentX + gridWidth,currentY + gridH
46、eight *4 / 5,currentX + gridWidth, currentY + gridHeight); repaint(); 基于 J2ME 的手机五子棋游戏22catch (Exception e) System.out.println(“moveFoucs Error:“ + e);/* 画格子,并画棋子。把这部分独立出来主要是要检查边界问题* x 格子右上角 x* y 格子右上角 y* width 格子宽度* height 格子高度*/private void mydrawRect(int x, int y, int width, int height) int a, b;
47、a = (x - baseX) / gridWidth + 1;b = (y - baseY) / gridHeight + 1; if (a != lineNumber gg.drawRect(x, y + 1, width, height);DrawChessman(x, y); /画棋子,x,y 分别是圆的中心坐标,棋子的直径为格子边长(格子为正方形)的 4/5public void DrawChessman(int x, int y) try int a;int b;a = (x - baseX) / gridWidth + 1;b = (y - baseY) / gridHeight
48、 + 1; if (a lineNumber | a lineNumber | b baseX + gridWidth * (lineNumber - 2)return;currentX = currentX + gridWidth;currentA+;moveFoucs(currentX - gridWidth * 3 / 2, currentY - gridHeight / 2,基于 J2ME 的手机五子棋游戏24gridWidth * 3, gridHeight * 2);if(keycode=getKeyCode(Canvas.UP)if (currentY baseY + gridH
49、eight * (lineNumber - 2)return;currentY = currentY + gridHeight;currentB+;moveFoucs(currentX - gridWidth / 2, currentY - gridHeight * 3 / 2,gridWidth * 2, gridHeight * 3);if(keycode=getKeyCode(Canvas.FIRE)if (intPlayer = 0) if (qipanlineNumber * (currentB - 1) + currentA - 1 != 0) System.out.println(“此处有子“);return;qipanlineNumber * (currentB - 1) + curre