基于J2ME益智动作游戏开发毕业设计

上传人:无*** 文档编号:78959150 上传时间:2022-04-22 格式:DOC 页数:25 大小:1.53MB
返回 下载 相关 举报
基于J2ME益智动作游戏开发毕业设计_第1页
第1页 / 共25页
基于J2ME益智动作游戏开发毕业设计_第2页
第2页 / 共25页
基于J2ME益智动作游戏开发毕业设计_第3页
第3页 / 共25页
点击查看更多>>
资源描述
目录第一张 绪论.1第二章 平台及J2ME体系结构介绍1 2.2 J2ME平台介绍2 2.3 MIDP4 2.4 J2ME的常用类4 2.4.1 Display类4 2.4.2 Canvas类5 2.4.3 Graphics类5 2.4.4 RMS记录管理系统5 3.1 开源的IDEeclipse6 3.2 eclipse插件eclipseME6 3.3 关于WTK6第四章 益智游戏推箱子的设计与制作7 4.1 游戏的策划和准备工作7 4.1.1 游戏策划分析7 4.1.2 游戏准备工作7 4.1.3 设计背景8 4.1.4 概要设计9 4.2 游戏架构9 4.2.1 游戏的类结构9 4.2.2 界面设计图9 4.3 游戏关键技术实现12 4.3.1 GameMidlet类12 4.3.3 GameChoose. 选关类18第五张 系统调试和测试.22 5.1 程序调试23 5.2 系统的测试23结束语25致谢25参考文献25第一章 绪论 无线通讯工业在过去的几年中飞速发展,已经成为世界上发展最快的技术领域之一。与此同时,Internt的快速崛起已经成为人们需求或办公室的工作站来访问Internt。通过便捷方式,无限的设备访问Internt已经成为人们需求的方向,这就更加增大了人们对无线设备的需求。同时手机的功能也变得丰富多彩,从以前的移动电话逐渐变为集通讯,短信,游戏,音频和视频为一体的多功能掌上电脑。想必您一定使用过手机玩过游戏吧,是不是让您真实感受到移动游戏的惊奇体验。自己编写手机游戏,并把其移植到手机中无疑成为追求时尚的年轻人的新宠。SUN的J2ME平台恰恰为我们提供了这样的一个平台,只要掌握了基本的Java语言基础,就可以动手为自己的手机开发应用程序,使手机开发程序变的不再神秘。游戏作为人们日常生活的一个重要的娱乐项目,也带动了巨大的游戏相关产业市场的发展。游戏平台从游戏机、电视游戏,到pc游戏,到手机游戏。随着手机的日益普及,人们对手机的娱乐功能的需求也相应增强,尤其是近几年手机2D、3D技术的日益成熟,大大地提高了手机游戏的娱乐性、操作性和方便性等多方面的性能。而基于手机平台的手机游戏也就拥有了巨大的市场空间,随着3g的开通和应用,手机游戏必将迎来新的一轮游戏热潮! J2ME在游戏开发方面的优势,由它开发的各种软件在手机上大规模的应用将会刮起一阵势不可挡的革命潮流。下面在本篇文章中就将详细的介绍J2ME这一技术在手机游戏制作方面的具体过程和应用。本文通过J2ME平台下开发一个推箱子的程序,并把它移植到手机上来学习无线设备的应用程序开发。同时对以前学过的课程操作系统,Java语言等进行巩固。第二章 平台及J2ME体系结构介绍本文是在 J2ME这个大的平台下进行开发,这就要求我们先要了解J2ME,让我们来看看JAVA2平台的划分。2.1 JAVA2平台的划分和J2ME,J2AE 及J2EE 的关系 目前Java2平台已经正式划分为3个部分它们分别是J2SE-Java2平台标准版Java 2 platform standard Edition其被适用范围最广用于我们通常使用的台式机desktop。J2EE-Java 2平台企业版Java 2 Platform Enterprise Edition 被广泛应用于服务器上包括JSP Servlet EJB 以及目前炙手可热的Web Service等技术。J2ME-Java2平台微型版Java 2 Platform Micro Edition 被使用在资源受限小型消费性电子设备上如电视机顶盒无线电话掌上电脑等。如图1所示: 图2-1 Java版本的划分和针对的设备 移动设备PDA市场的繁荣发展照成了五花八门的厂商与品牌异常广泛的设备,例如两种设备也许具有相同的功能,但实现的方法可能有相当大的区别。例如对PDA和手持电话来说都具有显示的功能, 但 屏幕的实际尺寸却有很大的区别,支持的色深也不相同。重复的开发工作以及移植的不便性使得开发成本与开发难度不断提高,这就使得设备厂商需求拥有一个统一的开发平台。面对这个问题Sun提出了J2ME的解决方法。2.2 J2ME平台介绍 带接入能力的消费类 电子设备,如手机,传呼机,个人电子助理以及电视机顶盒之间有很多共同之处,但它们在形式,功能和特性上又有很大的差异。信息产品总是趋向于特定用途和有限的功能。要适应这些差异,对J2ME架构的要求不仅仅是小,还是有模块化能力和可定制能力。 J2ME结构要设计成模块化的和可缩的,以便它能支持客户端和嵌入式设备市场的各种灵活的部署要求。为了达到这个目标,J2ME环境提供了一系列Java虚拟机技术,分别为市场上各种常见的多种处理器和内存布局作了优化。 为了支持可定制能力和扩展能力,J2ME架构定义了三个基本的概念:Configuration,Profile和Optional Package。 如图2-2所示: 图2-2 Configuration和Proflie 设备的配置(Configuration)为这些设备定义了一个基本的J2ME运行环境,其中包括虚拟机和核心的java类库。可以把配置理解为一个针对某一类设备的最小的Java平台,其中包括该类设备的Java VM虚拟机功能最小子集和针对该类设备的Java类库的最小集合。要注意的是 Configuration主要针对的是系统级的特性,如基本的Java语言的特性虚拟机的特性以及系统级的java核心类库等。J2ME配置Configuration包括两种,分别是连接设备配置CDC和连接受限制设备配置CLDC。正如前面提到过的配置分别针对的是某一族系设备J2ME所支持的设备主要分为两种分别通过CDC和CLDC支持。个人移动信息设备指那些可以进行间隙性网络连接的设备,如移动电话,双向寻呼机,PDA等这类设备从性能上来讲属于地段设备由CLDC支持。共享连接信息设备指那些网络连接固定不中断的设备,如电视机顶盒,互联网电视可视电话等这类设备从性能上来讲属于高端设备由CDC支持。如图2-3所示: 图2-3 CDC,CLDC和J2SE的关系 CLDC为那些资源受限制不足以支持整个J2SE虚拟机环境以及J2ME核心类库的设备提供了运行Java程序的基础。然而作为一位应用程序开发者如果您只能通过CLDC提供的API来进行编程是几乎不可能的。因为CLDC中并没有提供给我们与用户存储设备网络直接交互的工具。CLDC是一个技术层,其上层可以架设一系列的描述(profiles)层来提供CLDC所缺失的功能。每一种profile被设计成适应某种类型的设备的形式,而移动信息设备描述Mobile Information Device Protile-MIDP就是这些profile中的一种。MIDP是位于CLDC上层的Profile,是目前J2ME平台中发展相对最成熟最广为人知的Profile。如同MIDP的名字所描述的针对的是移动信息设备Mobile Information Device。MID这类设备通常指手机或是PDA,它们在屏幕内存处理器等硬件特性上有诸多限制,所以说在MID上开发应用程序必须要考虑一些技术上的特殊点。 所以在开发此程序时我选择了集成有CLDC和MIDP开发包的工具WTK。WTK共分为1.0.4,2.0以及2.1三个版本,针对本程序的特点,我选择2.0版本。由于篇幅的原因,详细和查阅J2ME无线设备程序设计和Java手机/PDA程序设计入门。2.3 MIDP 这里主要针对的是CLDC设备。MIDP包含三个生命周期和事件处理等机制。三个生命周期:Pause状态:程序处于暂停状态,方法:pauseApp();Actived状态:程序处于运行活动状态,方法:startApp()。Destroy状态:程序销毁前的状态,方法destroyApp。2.4 J2ME的常用类2.4.1 Display类 Display类代表了系统显示屏和输入设备的管理器,包含用来获取设备属性的方法,以及要求在设备上显示对象的方法,其他处理设备的方法主要应用在 Canvas对象。Display类直接从Object继承而来。2.4.2 Canvas类 为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas 抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen 类交互,程序可在需要时在Canvas 中掺入高级类的组件。Canvas 提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。 2.4.3 Graphics类 Graphics 是图形处理的基础类,提供了简单的2D 绘图功能。使用Graphics 类可以在屏幕上绘制图片、线条、文字等多种低级的界面。它具有 24 位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在 paint() 函数中使用 Graphics 绘制, GameCanvas 可调用 getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给Canvas的paint()函数,以便最终显示。2.4.4 RMS记录管理系统 移动信息设备框架(Mobile Information Device Profile)和 移动 Java 应用程序的平台为MIDP应用程序提供一种跨多个调用持久存储数据的机制。这种持久存储机制可以被视为一种简单的面向记录的数据库模型,被称为记录管理系统(record management system(RMS)。通过这种机制,MIDlet 能够持久存储数据,并在以后检索数据。在面向记录的方法中,J2ME RMS 由多个记录存储构成。 可以将每个记录存储想像成一个记录集合,它将跨多个 MIDlet 调用持久存在。设备平台负责在平台正常使用的整个过程(包括重新启动、换电池等)中,尽全力维护 MIDlet 的记录存储的完整性。记录存储在与平台相关的位置(比如非易失性设备存储器)创建,这些位置不直接公开给 MIDlet。RMS 类调用特定于平台的本机代码,这种本机代码使用标准 OS 数据管理器函数来执行实际的数据库操作。 记录存储实现确保所有单个的记录存储操作都是原子的、同步的以及序列化的,因此多个访问将不会出现数据毁坏。记录存储被盖上时间戳来指示它上次被修改的时间。记录存储还维护版本(version),它是一个整数,修改记录存储内容的操作每发生一次,这个数加一。版本和时间戳对于同步目的很有用。当 MIDlet 使用多个线程访问一个记录存储时,协调该访问是 MIDlet 的责任;如果它不能这样做,可能出现无法意料的结果。同样,如果一个平台使用试图同时访问记录存储的多个线程执行记录存储的同步,那么对 MIDlet 及其同步引擎之间的记录存储实施排外访问是平台的责任。 记录存储中的每个记录是一个字节数组,并且有唯一的整数标识符。第三章 开发工具相关3.1开源的IDEeclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 Eclipse最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C+和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开发源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。 本文使用的eclipse为Indigo版本。3.2 eclipse插件eclipseME EclipseME是一个用来开发J2ME应用程序的Eclipse插件。EclipseME集成了“无线工具包”,让您可以专注于开发应用程序,不必担心J2ME开发的特殊需求。同时EclipseME集成了Eclipse现有的java editor功能,提高代码的编写效率。本文使用的eclipseME版本为1.7.9。3.3 关于WTK WTK 的全称是Sun J2ME Wireless Toolkit Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行仿真器的最基本组件,是其他IDE需集成采用的必备元素。第四章 益智游戏推箱子的设计与制作4.1游戏的策划和准备工作4.1.1游戏策划分析 推箱子游戏是一款经典而又益智的游戏,本文设计的推箱子游戏是一个基于J2ME的游戏,并且对以往推箱子游戏使用优化方法提高了游戏的性能,主要包括:双缓存技术、游戏关卡设计优化、图片优化、部分重绘、简化碰撞检测。本系统主要是完成推箱子游戏的基础操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求: (1)利用方向键来改变小人的运行方向; (2)可以自行选择游戏的关卡; (3)完成一关会出现下一关的入口。 图4-1.1推箱子游戏界面4.1.2 游戏准备工作 游戏过程中使用的图,如图所示,包括主角、箱子和地形图片。 图4-1.2.游戏过程中使用的图片4.1.3 设计背景 首先,一定要有个主应用程序类,相信大家都应改知道;其次,不可避免,一定要有画布,为了把程序的画面呈现出来;其中,我觉得还是把地图跟画布分开,这样对地图管理比较容易,而且增加或修改地图比较方便;然后一定要有主角对吧,总要找个推箱子的人;说到箱子,也许箱子也需要管理吧。 先抛开箱子(BoxSprite)和推箱子的人(PlayerSprite)两个类,把全部经历集中到绘制地图上(其实不过是第一幅地图)。 1.这其中需要先了解几个类,GameCanvas 、LayerManager和TiledLayer等几个类。我们这里主要用TiledLayer这种方法构造背景。 GameCanvas 类:GameCanvas实际上就是屏幕上一个可绘制区域。但每个GameCanvas类都有一个独立的buffer,从而不但减少了堆的使用率,也可以使用单独的堆控制程序。 LayerManager 类:这个类用来管理图像的各个层,它将按正确的位置和次序渲染所有在它控制下的土层。 TiledLayer 类:通过使用这个函数可以定义游戏背景的特定区域,并且可以重复利用它们生成一个完整的图像。 2. Image类是用于保存图形图像数据。最主要的特点就是不可修改,即一旦创建就不能再被修改,位于Alert、Choice、ImageItem对象中的Image都要求不可修稿的。还有个特点就是可修改,比如使用Image.createImage(int width,int height)可以创建一个修改Image。 3. MIDP2.0新增的GameCanvas包GameCanvas类是Canvas的子类。它代表了游戏的基本界面。在GameCanvas上进行绘制代替了直接在Canvas绘画。GameCanvas自动实现了双缓冲,并提供了轮询键盘输入事件的方法。GameCanvas类继承自Canvas,所以具有Canvas的功能,还额外增加了一些便于游戏设计功能。比如:GameCanvas类直接提供了getKeyStates(),使程序员可以同一个线程自己侦测按键状态。GameCanvas类提供flushGraphics()的功能,实现了双缓冲技术。4.1.4 概要设计 本程序共AllMap.java,Continue.java, GameChoose.java, GameMain.java, GameMidlet.java, ImageAction.java, Map.java6个java源文件:AllMap.java:设计了所有推箱子的地图数组;Continue.java:游戏是否继续;GameChoose.java:选关;GameMain.java:主游戏进入游戏状态; GameMidlet.java:该文件是MIDlet父类的子类;ImageAction.java;图片运行及显示;Map.java:设置地图长,宽,高等参数及游戏角 色;4.2游戏架构4.2.1 游戏的类结构 整个游戏共由6个类组成。游戏的GameMidlet类负责保持display对象,显示游戏画布并启动游戏线程。GameMidlet继承自MIDlet,程序从它的构造函数GameStart()被调用开始,通过它的destroyApp(boolean arg()方法结束。所有的可视对象都必须调用它的setDisplayable(Displayable displayable)方法使自己出现在屏幕上。所有类以MyGameCanvas类为核心,该类实现了游戏的所有用户界面。GameMap类是用来描述游戏关卡的专用数据结构,该类中定义了地图布局。 4.2.2界面设计图 (1)开始显示初始化游戏界面,主界面显示各种键的功能以及菜单-新游戏和选关。(如图4-2.2所示) (2)如果选关,则出现选关界面,按确定开始选关,进入游戏界面,取消则返回初始化界面。(如图4-2.3所示) (3)开始玩游戏,如果赢了可进入下一关或重来。采用确定和取消来实现以上功能。(如图4-2.4、图4-2.5所示) 图4-2.2:初始化界面 图4-2.3:选关界面 图4-2.4:开始游戏界面 图4-2.5:过关出现的界面进入游戏界面选关新游戏下一关重玩返回主界面主程序模块内容使用取消确定恭喜过关确定取消取消确定 图10:系统结构框图 代码的实现/* * GameMidlet.java*/package gamepackage;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class GameMidlet extends MIDlet /继承MIDlet类的GameMidlet private Display display=null; private GameChoose choice=null; public GameMidlet() choice=new GameChoose(this); display=Display.getDisplay(this);/要使组件能在屏幕上显示 public void startApp()/ display.setCurrent(choice);/把choice设置为当前界面 public void pauseApp() /暂停 public void play(Displayable displayable) display.setCurrent(displayable);/ 把displayable设置为当前界面 public void destroyApp(boolean unconditional) /销毁4.3 游戏关键技术实现4.3.1 GameMidlet类 游戏的GameMidlet类负责保持display对象,显示游戏画布并画布启动游戏线程。GameMidlet继承自MIDlet,程序从它的构造函数GameStart()被调用开始,通过它的destroyApp(boolean unconditional)方法销毁。所有的可视对象都必须调用它的setDisplayable(Displayable displayable)方法使自身出现在屏幕上。4.3.2 ImageAction.图片运行及显示类package gamepackage;import javax.microedition.lcdui.*;/* * * author bense */public class ImageAction /* Creates a new instance of ImageAction */ public ImageAction() public static Image getImage(String url) Image img=null; try img=Image.createImage(url); catch(Exception e) e.printStackTrace(); return img; 4.3.2 Map地图类 Map类主要用来载入游戏的地图信息。首先,场景地图通过精美图片来贴块。package gamepackage;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.game.*;/* * * author bense */public class Map private Sprite sp1=new Sprite(ImageAction.getImage(/1.png); private Sprite sp2=new Sprite(ImageAction.getImage(/2.png); private Sprite sp3=new Sprite(ImageAction.getImage(/3.png); private Sprite sp4=new Sprite(ImageAction.getImage(/4.png); private Sprite sp5=new Sprite(ImageAction.getImage(/5.png); private int length=ImageAction.getImage(/1.png).getHeight(); private boolean finish; private Graphics g; private GameMain game=null; private int box; private int container; private int map; private int x,y; private int w,h; /* Creates a new instance of Map */ public Map(GameMain game,Graphics g,int index) this.game=game; this.g=g; initMap(index); public void initMap(int index) AllMap all=new AllMap(); map=all.getMap(index); box=new intall.getBoxLength(index, 3)2; container=new intall.getBoxLength(index, 2)2; finish=false; init(2); init(3); init(4); setXY(); private void setXY() x=(game.getWidth()-map0.length*length)/2; y=(game.getHeight()-map.length*length+10)/2; private void setBox() int findex=0; for(int i=0;icontainer.length;i+) for(int j=0;jbox.length;j+) if(containeri0=boxj0&containeri1=boxj1) Sp(containeri1,containeri0,5); findex+; finish=(findex=container.length); public boolean isFinish() return finish; public void Sp(int w,int h,int index) switch(index) case 1: sp1.setPosition(x+w*length,y+h*length); sp1.paint(g); break; case 2: sp2.setPosition(x+w*length,y+h*length); sp2.paint(g); break; case 3: sp3.setPosition(x+w*length,y+h*length); sp3.paint(g); break; case 4: sp4.setPosition(x+w*length,y+h*length); sp4.paint(g); break; case 5: sp5.setPosition(x+w*length,y+h*length); sp5.paint(g); break; public void paint() g.setColor(0x6A4055); g.fillRect(x,y,length*map0.length,length*map.length); setContainer(); setMap(); setMan(); setBox(); private void setContainer() for(int i=0;icontainer.length;i+) Sp(containeri1,containeri0, 2); private void setMap() for(int i=0;imap.length;i+) for(int j=0;jmap0.length;j+) Sp(j,i,mapij); private void setMan() Sp( w, h, 4); private void set(int x1,int y1,int x2,int y2) mapy1x1=0; mapy2x2=3; for(int i=0;i1&maph-1w!=1&isEmpty(w, h-2) set(w, h-1, w, h-2); h-=1; break; case 3: if(isEmpty(w, h+1) h+=1; else if(h1&maphw-1!=1&isEmpty(w-2, h) set(w-1, h, w-2, h); w-=1; break; case 4: if(isEmpty(w+1, h) w+=1; else if(wmap0.length-2&maphw+1!=1&isEmpty(w+2, h) set(w+1, h, w+2, h); w+=1; break; public void init(int index) int in=0; for(int i=0;imap.length;i+) for(int j=0;jmap0.length;j+) if(mapij=index) switch(index) case 3: boxin0=i; boxin1=j; in+; break; case 2: containerin0=i; containerin1=j; in+; mapij=0; break; case 4: w=j; h=i; mapij=0; break; case 5: containerin0=i; containerin1=j; boxin0=i; boxin1=j; mapij=3; in+; break; 游戏时的场景如图 如图4-3.2游戏时的场景4.3.3 GameChoose. 选关类 游戏在玩下一个关时,会出现选择你想要的下一关。package gamepackage;import javax.microedition.lcdui.*;/* * * author bense */public class GameChoose extends Canvas private GameMidlet midlet=null; private boolean ok; private boolean select; private boolean ok2; private int select2; private int index; private int w,h; private GameMain game=null; public GameChoose(GameMidlet midlet) this.midlet=midlet; init(); public void init() reset(); public void reset() ok=true; select=false; ok2=false; select2=0; index=-1; public void show() midlet.play(this); public void paint(Graphics g) h=getHeight(); w=getWidth(); g.setColor(0xffffff); g.fillRect(0,0, w,h); g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN, Font.SIZE_MEDIUM); g.setColor(0xFCA204); g.fillRect(0, 0, w,18); g.setColor(0x000000); g.drawLine(0,18,w,18); g.drawString(推箱子,w/2,16, Graphics.HCENTER|Graphics.BOTTOM); g.drawString(8 2 4 6, w/2, 50, Graphics.HCENTER|Graphics.BOTTOM); g.drawString(右上按钮 退出, w/2, 70, Graphics.HCENTER|Graphics.BOTTOM); g.drawString(1 上一关节 3 下一关, w/2, 90, Graphics.HCENTER|Graphics.BOTTOM); g.setColor(0x046DFB); g.fillRect(0, h-22, w,22); g.setColor(0x000000); g.drawLine(0, h-22, w,h-22); g.fillTriangle(3,h-11,11,h-15,11,h-7); g.fillTriangle(w-3,h-11,w-11,h-15,w-11,h-7); if(ok) g.setColor(0x0452BC); g.fillRect(14, h-22, w/2-14, 22); g.setColor(0xffffff); g.drawString(新游戏,w/4+7,h-3, Graphics.HCENTER|Graphics.BOTTOM); g.setColor(0x000000); g.drawString(选关,3*w/4-7,h-3,Graphics.HCENTER|Graphics.BOTTOM); else g.setColor(0x0452BC); g.fillRect(w/2, h-22, w/2-14, 22); g.setColor(0x000000); g.drawString(新游戏,w/4+7,h-3, Graphics.HCENTER|Graphics.BOTTOM); g.setColor(0xffffff); g.drawString(选关,3*w/4-7,h-3,Graphics.HCENTER|Graphics.BOTTOM); if(select=true) g.setColor(0xffffff); g.fillRect(25,40, 130, 100); g.setColor(0x046DFB); g.fillRect(27, 118,126, 20); g.setColor(0xFFA800); g.drawRect(25,40,130,100); g.setColor(0xFFA800); g.drawRect(27,42,126,96); g.setColor(0x000000); g.fillTriangle(30,128, 36, 125, 36, 131); g.fillTriangle(150, 128, 146, 125, 146, 131);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!