【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《拼图游戏实现的思路》,欢迎阅读!
拼图游戏实现的思路
正在学习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.wddqxz.cn/5f645ced19e8b8f67c1cb9ec.html