拼图游戏实现的思路.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
拼图游戏实现的思路 正在学习JAVA,对JAVA有了一些基本的了解。需要多编程,通过一些具体实例来提高编程水平。 网上有许多游戏的例子,如拼图、俄罗斯方块、24点等等,但人家是人家的,只能参考不要照搬,不然不能真正提高自身水平 。 编程最重要的是什么?每个人的认识可能不一,但我认为最重要是思路和方法。 有了思路和方法才能通过语言来实现,进而不断优化。 比如拼图游戏,我们都玩过,但如何实现的,我们能不能自己编一个? 先不参考别人的(网上有许多,Baidu一下会有不少),自己先想一下解题思路。 。。。 1、图片的载入 先从简单的开始,最好是矩形图片如300X300的,以后再考虑长方形的,异性的; try{ 加载图片资源 img= Image.createImage(/pic.png); } catch(Exception e) { System.out.println(Not found pic); } //画图 g.drawImage(img,getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER); //或采用以下方式 g.drawImage( img, x0,y0, Graphics.LEFT | Graphics.TOP ); 2、图片的分割 将载入的图片按要求分割,如3X3、4X4等; 分割的图片放入图形数组; 构造一个图片分割的方法,网上有不少,可以参考; ??public static Image[] splitImage( Image img, int rows, int cols ) ??{ ??if ( img == null ) ??{ ??return null; ??} ??Image[] result = new Image[ rows * cols ]; ??int w = img.getWidth() / cols; ??int h = img.getHeight() / rows; ??for ( int i = 0; i result.length; i++ ) ??{ ??result = Image.createImage( w, h ); ??Graphics g = result.getGraphics(); ??g.translate( ( -i % cols ) * w, ( -i / cols ) * h ); ??g.drawImage( img, 0, 0, Graphics.LEFT | Graphics.TOP ); ??} ??return result; ??} 3、初始化 以3X3九宫格为例,按?? ??1 2 3 ??4 5 6 ??7 8 0? ? 载入,0为空白处; 将图片打碎,随机化,如变为: ??5 1 3 ??4 6 8 ??2 0 7 4、完成状态的判断 当图形达到初始状态时,拼图完成。 载入图片时,同时也构造了一个数字矩阵a[i,j] 如上例当矩阵中的值都满足:3*(i-1) +j 时拼图完成。 一般情况 /** int m 图片的行数 ??int n 图片的列数 */ ??public boolean isFinish() {? ? ??for (int i = 0; i m; i++) {? ? ??for (int j = 0; j n; j++) {? ? ??if (a[j] != (i * m + j)) {? ? ??return false;? ? ??}? ? ??}? ? ??}? ? ??return true;? ? ??}?? 5、可移动块的判断 分割的子图片,能否按上下左右移动,需要加以判断 上下移动,改变图片位置的y值,数字矩阵的行值; 左右移动,改变图片位置的x值,数字矩阵的列值; 即经过变更后数字矩阵满足:a[i,j]=0,则移动有效; 如上例,6向下,2向右,7向左都为有效移动。 6、移动的实现 键值响应,一个移动是有效的,需要重绘图形来实现。 移动的过程是一个位置交换的过程。 如上例,6向下,是6与0位置互换,数字矩阵值和图片互换。 构造一个方法swap( ) 实现以下要求: (1) 数字矩阵a[i,j]数值互换; (2) 图片重绘,图片互换;

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档