- 1、本文档共141页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异常处和多线程
卡通时钟 得到图片中对应的块:以“5”为例。首先可以将number.jpg的宽度平均分为11份,每份宽度为widthOfNumber,高度为heightOfNumber,数字“5”图片小块的左上角横坐标实际上是:5×widthOfNumber,纵坐标是:0,宽度为widthOfNumber,高度是:heightOfNumber。依此类推。注意,“:”并不是数字,因为它在图片的第10块,可以人为认为它是“10”,给定数字“10”,用上面的方法就可以得到“:”对应的图片。 卡通时钟 另外,每个数字画到界面的位置是不同的,如图所示的时钟: 里面有两个“9”,一个画在第4个位置(位置从0开始算),另一个画在第7个位置,这怎么定位呢? 可以给时钟中的每个位置编一个号码:location,如图中的“4”,location为3,冒号的location为2和5,等等。给定一个location,怎样确定界面上的位置呢?很简单,以上图为例,数字“4”的左上角横坐标为3×widthOfNumber,纵坐标为0,其他依此类推。 卡通时钟 综上所述,在得到当前时间之后,画出图片上的内容,可以用如下代码: 因此,对于任意数字,画法如下: //根据number从图片中取一个数字,画在画布的location位置 public void drawNumber(Graphics g, int number,int location){ int x_src = widthOfNumber * number; int y_src = 0; int width = widthOfNumber; int height = heightOfNumber; int x_des = location * widthOfNumber; int y_dest = 0; g.drawRegion(img, x_src, y_src, width, height, Sprite.TRANS_NONE, x_des, y_dest, raphics.LEFT|Graphics.TOP); } 拼图游戏 拼图游戏 该界面上出现15个图片小块,已经被打乱。注意,第1行第2列的图片小块为空白。源图片如图所示: 拼图游戏 在初始界面中,可以通过按下键盘上的“上”,“下”,“左”,“右”键来控制小块的运动。如果无法确定源图片的样子,还可以长按“选择键”,界面变成如图界面: 选择键松开,界面上又恢复到打乱状态。 拼图游戏 如果15个图片小块被正确排好,系统会提示:“恭喜您,您已经顺利完成!还要继续吗?”,如图所示: 在界面的右下方有一个“继续”按钮,选择,可以重新开始游戏;在左下方有一个“关闭”按钮,选择,程序关闭。 拼图游戏 在这个项目中,只需要用到1个界面:拼图游戏界面。这个界面比较简单,可以用一个类:PPuzzleCanvas来完成,将该类用一个MIDlet:PPuzzleMIDlet组织起来,是比较好的方法。 拼图游戏 界面上的图片块,是来源于16个小图片,还是一幅大图片? 很明显,如果界面上的图片块,是来自于16个小图片,虽然编程比较简单,可以将16个小图片封装成16个Image对象,用键盘对它们的位置进行控制。但是,这对于游戏的功能来说,可扩展性不强。如果界面上的图片块是来自于16个小图片,则我们需要手工将图片用图像处理软件分割成16个小文件,这个工作是不可想象的;并且,如果游戏难度增加,比如变成5×5=25个小块,就要重新手工分割,这是比较麻烦的。 所以,问题的答案是:系统只载入一个大图片,小图片是通过编写程序,用代码来进行分割的。 拼图游戏 从游戏的界面上可以看出,在该游戏里面,大图片首先应该分为4行4列。怎样分割呢?有很多种方法,在此介绍一种常见的方法。可以给图片的每一个小块一个编号,如图所示: 拼图游戏 这样,源图片上的每个小块就和一个二维数组结合起来了,这个二维数组可以定义为整型,也可以定义为字符串型。如果定义为整型,就可以用如下代码: 将这个数组打乱,就相当于将小图片块打乱。因为在此规定数组中的每一个元素对应着图片上的固定小块。 int[][] map = { { 00, 01, 02, 03 }, { 10, 11, 12, 13 }, { 20, 21, 22, 23 }, { 30, 31, 32, 33 } }; 拼图游戏 由数组中的整数,来获取图片小块在图片中的位置: 以13为例,很显然,13对应的那一块图片块,其宽度和高度都是源图片的1/4;接下来就是确定图片块左上角的坐标了。图片块左上角横坐标是图片块的宽度×1,图片块左上角纵坐标是图片块的高度×3,其他的小块依
文档评论(0)