【#第一文档网# 导语】以下是®第一文档网的小编为您整理的《拼图游戏实现的思路》,欢迎阅读!
拼图游戏实现的思路 正在学习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 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) 图片重绘,图片互换;
本文来源:https://www.dywdw.cn/5f645ced19e8b8f67c1cb9ec.html