版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、手机五子棋游戏的设计与实手机五子棋游戏的设计与实 现现 专业:专业: 姓名:姓名: 班级:班级: 学号:学号: 指导教师:指导教师: 摘摘 要要 j2me(java 2 micro edition)是近年来随着各种不同设备,尤其是移动通 信设备的飞速发展而诞生的一项开发技术。它因其“write once,run anywhere”的 java 特性而提高了开发的效率。随着手机性能的不断提高,手机 休闲娱乐应用将成为 pc 休闲娱乐应用之后又一重要业务增长点。棋类游戏规则 单一,比较适合在手机等便携终端推广。 由于具有跨平台、易于移植、占用空间小的优势,j2me 成为移动应用开发 平台的主流,并
2、提供了很多用以支持移动应用软件的开发的 api。现将该技术 用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行 过程中内存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以 不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。 游戏的开发以 j2me 为平台,利用 java 技术,结合 j2me 的 midp 技术,并 对于程序设计思想,重要类、方法等展开讨论。在对弈部分,分析设计走棋算 法,选择合适的方式组织成代码,实现基本的人工智能。过程中使用了 j2me 中 的 cldc/midp 软件体系,主要运用了 mid profile 的特定类的支持,来完成游
3、戏的开发。 关键词:关键词:j2me;cldc;midp abstract j2me 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 entertainme
4、nt market based on the cell phone 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
5、 mobile phones and other portable 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 achi
6、eve the rapid development of 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, t
7、he java technology and the midp 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 sof
8、tware system of cldc/midp and the specific class of the mid profile to complete the game development. key words: j2me;cldc;midp 目目 录录 1 概述.5 1.1 课题研究背景.5 1.2 课题研究意义.5 2 开发技术背景.6 2.1 java 语言概述.6 2.2 j2me 简介.6 2.3 移动信息设备简表.6 3 系统分析及总体设计.7 3.1 可行性分析.7 3.2 需求分析.8 3.3 系统概要设计.8 4 系统详细设计.9 4.1 界面设计.9 4.1.1
9、 图形的低级绘制.10 4.1.2 用户按键设计.10 4.2 走棋算法.11 4.3 胜负判断.11 5 系统测试.11 5.1 测试方案.11 5.2 测试结果.12 6 总 结.13 基于基于j2mej2me的手机五子棋游戏的设计与实现的手机五子棋游戏的设计与实现 1 概述 1.1 课题研究背景 五子棋是当前非常流行的一种棋。五子棋不仅能增强思维能力,提高智力, 而且富含哲理,有助于修身养性。 手机游戏的实现方式主要包括嵌入式游戏、浏览器游戏、短消息服务游戏、 j2me 和其它的解释语言。java 2 micro edition 是一种针对移动电话和 pda 这 样的小型设备的 java
10、 语言。j2me 与台式机中的 java 相比还是有一定的限制, 但是它已经极大的提高了移动电话支持游戏的能力。并且具备一定的优势:庞 大的潜在用户群、便携性、开发门槛较低。 手机是现代生活方式的产物,如同因特网的普及导致网络游戏的高速发展 一样,手机的普及,对满足不同功能的手机软件的需求也就越来越迫切,这就 需要比较好的手机软件开发平台,此时具有平台无关性优点的 j2me 开发平台也 就应运而生。与传统的主流的 pc 游戏相比,手机游戏的价值在于打发一些无聊 的时间,作为一个移动的娱乐终端,手机游戏施展身手的机会永远可能是在地 铁站、公交车或者是洗手间这些地方,也许在庞大的游戏行业里,手机游
11、戏将 永远扮演着一个边缘者的角色,因为谁也不能指望一个人在家的时候用手机玩 游戏或者看电影。但是手机游戏的市场是巨大的,即便是只有十分之一的用户 来购买游戏,那也将是不可忽视的商业机遇。 手机游戏是手机的一种高附加值操作软件,游戏编程是手机软件编程的重 要组成,同时也持续推动手机软件技术升级进步。手机游戏按手机平台分类, 主要有 j2me、brew、unija 等。其中 j2me 手机开发平台使用最为广泛。作为 sun 公司针对微型嵌入式消费电子产品开发的编程系统,j2me 技术是当前手机 软件开发的主流平台,各大手机生产厂商目前的主流产品绝大都使用 j2me 技术。 基于 j2me 技术开发
12、手机软件可以实现手机功能的多样化与专业化,极大的满足 了人们对手机要求更高的需求。 1.2 课题研究意义 本设计基于 j2me 技术,开发一款五子棋游戏软件,可以供人们闲暇时间随 时随地娱乐,提高棋艺。五子棋不但容易上手,而且它区别于别的游戏,它不 但使人娱乐,而且能使人的头脑变得更加聪明。 通过对该课题的研究,首先,进一步熟悉面向对象语言,加深对 j2me 层次 结构的了解。通过 eclipse 集成开发环境创建软件,最终形成一个具备基本功 能的手机五子棋游戏,可应用于便携式设备,适合于棋类爱好者。其次,了解 手机游戏开发的特点和现状。 2 开发技术背景 2.1 java 语言概述 java
13、 的出现是源于对独立于平台语言的需要,希望这种编程语言能编写出 嵌入各种家用电器等设备的芯片上、且易于维护的程序。人们发现当时的编程 语言都有一个共同的缺点,就是针对 cpu 芯片进行编译。这样,一旦电器设备 更换了芯片就不能保证程序正确运行。九零年 sun 公司成立了开发小组,开始 致力于开发一种可移植的、跨平台的编程语言,该语言能生成正确运行于各种 操作系统、各种芯片上的代码。java 的出现标志着真正的分布式系统的到来。 java 是一种跨平台的、面向对象的、分布式的、解释的、安全的、结构的、 可移植的、性能很优异的多线程的动态语言。 java 的特点:平台无关性;安全性;面向对象;分布
14、式;健壮性。 2.2 j2me 简介 j2me是sun公司针对嵌入式、消费类电子产品推出的开发平台,与j2se和 j2ee共同组成java技术的三个重要的分支。j2me实际上是一系列规范的集合, 由jcp组织制定相关的java specification request(jsr)并发布,各个厂商 会按照规范在自己的产品上进行实现,但是必须要通过tck测试,这样确保兼容 性。j2me是java的三大分支之一,专门用于开发基于消费性电子产品的应用。 j2me支持个人手持移动设备,如手机、pda等。手机用户可以通过支持java功能 的终端,使用多种全新图形化、动态化和个性化的移动增值服务。 2.3
15、移动信息设备简表 移动信息设备简表(midp)为移动电话和入门级pda设计,为移动应用程序提 供了所需的全部核心功能,包括应用程序模型、用户界面、持久性数据存储、 联网能力及应用程序管理功能,目前应用非常广泛的midlet就是在midp中定义 的。 midp 框架如图 2-1 所示。 图 2-1 midp 框架图 midp提供核心应用程序功能,包括用户界面、网络连接、本地数据存储和 应用程序生命周期管理。midlet生命周期流程图如图2-2所示。 midp中含有下列api包: a. javax.microedition.lcdui: 用户界面(ui)api,它为midp应用提供了 一整套实现用
16、户界面的功能特性。 b. javax.microediton.rms: 移动信息设备描述提供了一种让midlets持久 性储存并在以后可以取回数据的机制。 c. javax.microedition.midlet: 这个midlet包明确定义了midp应用,也 定义了和应用环境之间的交互。 d. javax.microedition.io: 移动信息设备还描述包括基于有限连接设备 配置genericconnection框架的网络支持。 图 2-2 midlet 生命周期流程图 3 系统分析及总体设计 3.1 可行性分析 .1 技术可行性技术可行性 五子棋是传统的对弈游戏,历史悠
17、久、规则单一。手机游戏的实现方式主 要包括嵌入式游戏、浏览器游戏、短消息服务游戏、j2me 和其它的解释语言。 java 2 micro edition 是一种针对移动电话和 pda 这样的小型设备的 java 语 言,虽然它与台式机中的 java 相比还是有一定的限制,但是已经极大的提高了 移动电话支持游戏的能力。 在 eclipse 环境中编写并在模拟器中运行简单明了。 .2 操作可行性操作可行性 本游戏开发后可导入手机操作,供个人平常娱乐所用,完全使用手机键盘 操作,操作简单,所以在这方面是完全可行的。 3.2 需求分析 .1 系统的性能需求系统的性能需求
18、 首先,手机游戏最大的问题在于每一款手机拥有自己的屏幕大小和特定的 api 及性能。游戏开发过程中,要考虑到游戏程序的设计要能合乎大多数手机 的应用。j2me 提出的一系列标准使得使用 j2me 开发的游戏可以在配备 j2me 的 任何厂家的移动设备上运行。软件最好操作简单容易。受手机屏幕大小和显示 的影响。手机键盘的不方便,游戏需要设计得容易操作。 其次,软件具有人工智能算法原理要简单,并且运行快速。对于人机游戏, 不需要网络连接,游戏处理不会有太长的等待时间。游戏是需要快速反应的。 手机处理器的频率直接要求我们需要使用简单实用的智能算法。 .2 系统的功能需求系统的功能需求
19、 a.游戏内容 此款游戏主题是五子棋对弈。无“禁手”的规则基本是人人皆知。相同颜 色的棋子,五子一线为胜。 b.游戏方式 区别于一般的生活中的人与人的对弈,用在手机上为人机对弈,在手机屏 幕上构造一个游戏棋盘,并且设计黑、白棋子。利用人工智能的相关知识实现 对弈。 c.游戏对象 五子棋手机游戏是大众游戏,游戏者只要具备一般的操作知识就可以进入 游戏。对玩游戏者并没有什么特殊要求。 d.游戏目标 此款手机游戏为棋类游戏,就是为了让人们闲暇时间休闲、锻炼棋艺。 a) 欢迎界面:玩家可点击“确定”进入规则说明界面。 b) 规则说明界面:玩家可点击“开始游戏”进入游戏。 c) 棋盘界面:对弈界面,使用
20、上、下、左、右键来移动落子点位,使用确 定按钮来落子,相应条件下可实现重新开始游戏功能。 d) 胜负判断:涉及人工智能,用以判断人与机器的输赢状况,游戏无“禁 手” ,五子首先连成一线者胜。 3.3 系统概要设计 该系统设计的主要模块分为:欢迎模块、规则说明模块、对弈与胜负判断 模块。各主要模块的功能描述如下: 欢迎模块:这部分是游戏出现的第一个界面,主要是为了说明已经进入五 子棋游戏系统。 规则说明模块:此模块说明了游戏规则。玩家可以选择开始游戏或返回欢 迎界面。 对弈模块:该部分主要是进行人机对弈的棋盘界面。该模块有退出游戏和 重新开始的功能。 胜负判断模块:这部分即是对每次棋局结果的判断
21、,是人赢了或者是电脑 获胜。 系统主要功能模块如图 3-1 所示。 基于 j2me 的手机五子棋游戏 欢 迎 模 块 胜 负 判 断 模 块 规 则 说 明 模 块 对弈模块 重 新 开 始 图 3-1 系统功能模块图 4 系统详细设计 4.1 界面设计 该部分主要说明手机游戏画面显示,包括画面的低级绘制以及如何进行游 戏按键处理。 本程序的设计主要使用了 midp 所提供的 javax.microedition.lcdui 包中 的类来实现手机的用户界面。 各个类如表 4-1 所示。 表4-1 javax.microedition.lcdui包 类描 述 接口 commandlistener
22、允许创建一个高级的ui命令消息的监听器 ui系统以及工具类 display代表系统显示设备和输入设备的管理器 image提供一个类来保存图像对象(以png格式) displayable提供一个可以显示对象的抽象基类 高级ui command抽象用户的交互动作 低级ui graphics提供二维图像工具 canvas提供一个创建低级ui图像的基类 .1 图形的低级绘制图形的低级绘制 若是要在midlet中使用低级用户界面设计,就必须定义一个从canvas类派 生出来的子类。 在 canvas 类的子类中必须实现 paint()方法。graphics 对象包含了所有 的在屏幕上绘画
23、的方法,例如 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)。 绘制字符串: public void drawstring(string str,int x,int y,int anchor)。 填充指定矩形内的圆: public void f
24、illarc(int x,int y,int width,int height,int startangel,in tint arcangel)。 使用上述方法绘制棋盘界面: 绘制棋盘: gg.drawline(gridwidth,i*gridheight,grifwidth*linenumber+1,i*gridh eight)。 gg.drawline(i*gridwidth,gridheight,i*gridwidth,linenumber*gridhe ight+1)。 绘制棋子: gg.fillarc(x-gridwidth*2/5),y- gridheight*2/5,gridwi
25、dth*4/5,gridheight*4/5,0,360)。 绘制显示输赢的字符串: gg.drawstring(show string,base x,base y,graphics.top| graphics.left)。 .2 用户按键设计用户按键设计 游戏是交互的,因此在游戏中一个重要的内容就是响应用户的按键操作。 下 面介绍在游戏中用户按键响应的实现。 使用 canvas 中的 protected void keypressed(int keycode)函数,当按 下按键时调用该函数,实现上下左右的按键消息。 设计举例: protected void keypresse
26、d(int keycode) if (keycode=getkeycode(canvas.left) 手机键盘与平常设备键盘不同,命令的执行主要通过 command 类设计。该 类构建在执行信息状态列中,功能是在对象中命令执行动作状况。动作定义在 commandlistener,并且结合显示状态,主要提供接口与使用者交互模式。 设计举例: private command ok1 = new command(确定, command.ok, 1); 使用优先级作为希望的命令显示顺序的标识。一般数字越小,在列表中的级别 就越高。 4.2 走棋算法 对于五子棋游戏,主要就是判断棋盘上是否存在五子连珠情
27、况。判断五子 连珠的原理是从横,竖,左斜线,右斜线 4 条线上是否存在 5 个相连的同类棋 子。 对战一方落子后,在该处向 8 个方向检测连续的同类棋子,如果检测到直 线方向上存在 5 个连续的同类棋子,则判断为“连五”并结束检测。基于检测 结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。 4.3 胜负判断 为检测当前棋局是否已经有一方获胜,从横向、纵向、左斜、右斜四种情 况考虑。首先,获取当前下棋点(x,y)和棋子的颜色,接着计算连续的相同颜 色的棋子;有连续 5 个相同的棋子则 return true;给出本次棋局结果。 对战一方落子后,在该处向 8 个方向检测连续的同类
28、棋子,如果检测到直 线方向上存在 5 个连续的同类棋子,则判断为“连五”并结束检测。基于检测 结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。 5 系统测试 5.1 测试方案 程序测试是程序编码完成后必须的一步,通过测试,检查代码的正确性, 了解功能的实现性,可以达到发现问题,改进功能,让程序更完善更健壮。没 有经过测试的软件是无法大量投入使用的,因为它无法保证可以在用户端健壮 地运行。测试通常分为两大类:白盒测试和黑盒测试。“白盒测试”指的是测 试者清楚待测对象内部工作机制的测试;“黑盒测试”指的是测试者无需了解 测试对象内部工作机制的测试。 因为并不是所有的用户都能知道系
29、统的结构和处算法,所以,从用户的角 度出发,采用黑盒测试法对系统进行功能测试。 5.2 测试结果 a)运行程序,出现欢迎界面,如图 5-1 所示: 5-1 b)点击“确定”进入游戏说明界面,可点击“返回”回到欢迎界面,如图 5-2 所示: 5-2 c)点击“开始游戏”进入棋盘界面,默认玩家先行,为黑子,如图 5-3 所示 5-3 d)对弈棋盘如图 5-4 所示,假设走棋结果人获胜。 5-4 e)假设走棋结果电脑获胜,结果如图 5-5 所示。 5-5 6 总 结 整个设计基本完成,由于能力和时间的关系,总是有很多不尽人意的地方, 譬如功能较少、外观较粗糙等。通过这个程序设计,我深刻体会到即使是对
30、于 一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以 及扩展。 刚开始决定编写五子棋游戏时,我觉得难度比较大。后来通过网络寻找相 关的视频学习相关知识,并查找,一点点进行下去。同时,因为该程序的设计 侧重于算法部分,对弈算法的设计,对于我而言很难,通过网络资源,我了解 到,不少参考资料上已提供了各种精良可用的现成算法,我可以先学习这些已 经设计好的算法,选择合适的方式组织代码。 整个设计过程中,我受益非浅,感受颇深,体会到软件开发并不是纯数学, 更侧重于分析。虽然设计结果并不是很完善,有很多地方还有待进一步改进, 但是我觉得最可贵的是过程中的收获。在以后的时间里,我仍将努力
31、学习,深 入实践,不断提升自我,努力实现更高的自我价值。 参考文献 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 手机应用程序的开发j.科技广场,2007,(01):66-68. 7 李观华,范辉.j2me 在移动通信程序中的应
32、用j.计算机应用,2003,(03):124-126. 8http:/ 源代码: midlet1.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class midlet1 extends midlet implements commandlistener public display display; private canvas1 lc = new canvas1(); /欢迎界面 private form w;/新建一个 form 对象 private command o
33、k1; 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()来获得当前设备的 display 对象 public void commandaction(command
34、c,displayable s) if (c =exit) this.notifydestroyed(); if (c = ok1) display.setcurrent(e);/调用 setcurrent()方法将 display 对象绑定到显示设备 if (c = back) display.setcurrent(w); if (c = ok2) display.setcurrent(lc); public void startapp() /欢迎界面 w= new form(欢迎您进入五子棋游戏_); display.setcurrent(w);/调用 setcurrent 方法将 dis
35、play 对象绑定到显示设备 ok1 = new command(确定,command.ok,1); exit = new command(退出,command.exit,1); w.addcommand(exit); /调用 addcommand 方法将 command 对 象添加到 gui 显示组件 w.addcommand(ok1); try welcomeimg = image.createimage(/welcome.png); w.append(welcomeimg); catch (exception e) /游戏说明界面 e= new form(五子棋游戏说明); ok2= n
36、ew command(开始游戏,command.ok,1); back= new command(返回,command.back,1); e.addcommand(ok2); e.addcommand(back); try helpimg = image.createimage(/help.png); e.append(helpimg); /添加图层 catch (exception e) /设置命令监听者 w.setcommandlistener(this); e.setcommandlistener(this); public void pauseapp() public void des
37、troyapp(boolean unconditional) canvas1.java import javax.microedition.lcdui.*; import java.util.*; public class canvas1 extends canvas implements commandlistener graphics gg; random rnd = new random(); / 构造一个随机数生成器 int linenumber=15; int gridwidth=10; /格子的宽度 int gridheight=10; /格子的高度 int linecolor =
38、 0 x006699; /棋盘格子线的颜色 int focuscolor = 0 x00ff00; /焦点的颜色 int intrunmode = 0; /0-等待初始态,1-下棋,2-等待用户响应 int intplayer =0; /0-黑棋(先下者) ,1-白棋(后下者) int gotovalue; int qipan; /使用一个二维数组记录棋盘棋子的分布/检查后,如果不存在五 子,则全为 0,如果存在,则依次是五个子的位置 int wuzi = new int5; int q; int m; /int g=1,16,15,17;/这个 int g= new int4; int ba
39、sex=10; /棋盘左上角 x int basey=10; /棋盘左上角 y int currentx; /当前所在区域的左上角 x int currenty; /当前所在区域的左上角 y int currenta; /当前是第几个竖线 int currentb; /当前是第几个横线 int lasta; /最后一个子位于第几根竖线 int lastb; /最后一个子位于第几根横线 boolean loadedmenu = false; command cmdrestart = new command(重新开始, command.screen, 1); /设置一些棋盘参数 public vo
40、id 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); setcommandlistener(this); gg=g; if (intrunmode = 0
41、) buildchessboard(); /事件处理函数 public void commandaction(command c, displayable d) if (c = cmdrestart) intrunmode = 0; repaint(); /* * 开始游戏时所做的一些工作 * 比如画棋盘,初始化一些参数、数组,并设置最开始时的焦点 位置 */ public void buildchessboard() try /初始化数组 for (int i = 0; i linenumber * linenumber; i+) qipani = 0; for (int i = 0; i
42、5; i+) wuzii = 0; gg.setcolor(0 x006699cc); gg.fillrect(0, 0, getwidth(), getheight(); for (int i = 1; i height) mydrawrect(x + gridwidth * 2, y, gridwidth, gridheight); mydrawrect(x + gridwidth * 2, y + gridheight, gridwidth, gridheight); /最右边的竖线 drawchessman(x + gridwidth * 3, y); drawchessman(x +
43、 gridwidth * 3, y + gridheight); drawchessman(x + gridwidth * 3, y + gridheight * 2); /最下面的横线 drawchessman(x, y + gridheight * 2); drawchessman(x + gridwidth, y + gridheight * 2); drawchessman(x + gridwidth * 2, y + gridheight * 2); else mydrawrect(x, y + gridheight * 2, gridwidth, gridheight); mydr
44、awrect(x + gridwidth, y + gridheight * 2, gridwidth, gridheight); /最右边的竖线 drawchessman(x + gridwidth * 2, y); drawchessman(x + gridwidth * 2, y + gridheight); drawchessman(x + gridwidth * 2, y + gridheight * 2); drawchessman(x + gridwidth * 2, y + gridheight * 3); /最下面的横线 drawchessman(x, y + gridhei
45、ght * 3); drawchessman(x + gridwidth, y + gridheight * 3); /画光标 gg.setcolor(focuscolor); gg.drawline(currentx, currenty,currentx + gridwidth /5, currenty); gg.drawline(currentx, currenty, currentx,currenty + gridheight /5); gg.drawline(currentx +gridwidth*4/5,currenty,currentx + gridwidth, currenty)
46、; gg.drawline(currentx + gridwidth, currenty, currentx + gridwidth,currenty + gridheight /5); gg.drawline(currentx,currenty + gridheight * 4/ 5,currentx, currenty + gridheight); gg.drawline(currentx,currenty + gridheight,currentx + gridwidth / 5,currenty + gridheight); gg.drawline(currentx +gridwidt
47、h*4/5,currenty + gridheight, currentx + gridwidth,currenty + gridheight); gg.drawline(currentx + gridwidth,currenty + gridheight *4 / 5,currentx + gridwidth, currenty + gridheight); repaint(); catch (exception e) system.out.println(movefoucs error: + e); /* * 画格子,并画棋子。把这部分独立出来主要是要检查边界问题 * x格子右上角 x *
48、 y格子右上角 y * width格子宽度 * height 格子高度 */ private void mydrawrect(int x, int y, int width, int height) int a, b; 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/5 p
49、ublic void drawchessman(int x, int y) try int a; int b; a = (x - basex) / gridwidth + 1; b = (y - basey) / gridheight + 1; if (a linenumber | a linenumber | b 1) return; if (qipan (b - 1) * linenumber + a - 1 = 1) gg.setcolor(0, 0, 0); else if (qipan (b - 1) * linenumber + a - 1 = 2) gg.setcolor(255
50、, 255, 255); else return; gg.fillarc(x - gridwidth * 2 / 5, y - gridheight * 2 / 5, gridwidth * 4 / 5, gridheight * 4 / 5, 0, 360); if (lasta = a gg.drawline(x, y - gridheight / 5, x, y + gridheight / 5); gg.drawline(x - gridwidth / 5, y, x + gridwidth / 5, y); repaint(); catch (exception e) system.
51、out.println(drawchessman error: + e); /键盘被按下。主要是移动焦点,以及落子的处理 protected void keypressed(int keycode) if(keycode=getkeycode(canvas.left) if (currentx basex + gridwidth * (linenumber - 2)return; currentx = currentx + gridwidth; currenta+; movefoucs(currentx - gridwidth * 3 / 2, currenty - gridheight /
52、2, gridwidth * 3, gridheight * 2); if(keycode=getkeycode(canvas.up) if (currenty basey + gridheight * (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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《导医工作流程》课件
- 单位管理制度集合大全【人员管理篇】
- 单位管理制度集粹选集【人事管理篇】
- 单位管理制度汇编大全【员工管理】
- 单位管理制度分享合集【职工管理】十篇
- 单位管理制度呈现大全【员工管理篇】十篇
- 《员工的激励与考核》课件
- 《语文大自然的语言》课件
- 八年级下册期末考试专项训练03 论述题30(答案及解析)
- 《标准的理解要点》课件
- 教师管理培训系统的设计与开发
- 2021年新高考语文Ⅰ卷真题现代文阅读《石门阵》解析
- 老化测试记录表
- 金属齿形垫片安全操作规定
- (完整版)ABAQUS有限元分析实例详解
- 区块链技术与应用学习通课后章节答案期末考试题库2023年
- 2023学年度广东省广州市天河区九年级(上)期末化学试卷(附详解)
- 拍卖行业务管理制度拍卖行管理制度
- 焊接工序首件检验记录表
- 七年级上学期期末考试历史试卷及答案(人教版)
- 饮品创业项目计划书
评论
0/150
提交评论