java学习心得 关于如何设计一个拼图游戏
来源:互联网 发布:苹果mac更新系统版本 编辑:程序博客网 时间:2024/05/21 03:25
拼图游戏的设计可以分为如下几个部分:1)ui设计,2)键盘监听,事件处理,3)游戏逻辑。ui设计较为简单,继承panel类即可实现;键盘监听功能继承KeyAdapter类或者实现KeyLisener接口即可实现;而游戏逻辑也并不复杂,可以假设空的拼图块其实真是存在,但只是不显示,空拼图块内容可与周围拼图块内容交换。
假设已经拼好完成的图像如图0所示,每个数字代表了图像各部分对应的内容
0
1
2
3
4
5
6
7
8
图0
因此,拼图游戏就抽象成了数字移动排序的问题,一般情况下拼图游戏开始是乱序的,如图1所示。
1
3
2
6
5
4
7
8
图1
它要还原成图2
1
2
3
4
5
6
7
8
图2
那么问题来了,1)游戏是否有意义,也就是图1是否能够还原成图2呢?
2)如图1所示的随机地图如何生成?
将问题一般化,在M*N的方格里有M*N-1个不同元素和一个空元素,只有空元素可以与上下左右相邻的元素交换位置。M*N方格中M*N-1个元素和一个空元素的位置确定一个图形。拼图游戏的问题是:一个图形经过一连串的交换能否得到另一个图形,如何得到。从交换方式的可逆性看出这种关系满足等价三性质,如果图形A通过交换变成图形B我们则称它们是等价的。把M*N-1个元素用1至M*N-1编号,空元素编号0。然后展成一个排列。每个图形对应一个排列。确定了展开方式,图形和排列是一一对应的。这里用到的展开方式是行优先的顺序(其他方式展开也能到相应的结果)。将例1的两个图形展开有:图1对应1 3 2 6 0 5 4 7 8,图2对应1 2 3 4 5 6 7 8 0。
定理1:图形A与图形B等价的充要条件图形A的排列的逆序数加上0元素行号和列号的奇偶性等于图形B的排列的逆序数加上0元素行号和列号的奇偶性。为方便表述,把图形排列的逆序数加上0元素行号和列号的奇偶性称为图形的奇偶性。
这里我们需要考虑程序如何设计了,在程序设计时,我们必须要先写出问题2的答案,才能解决问题1,毕竟我们必须先有随机数组才可能去计算其逆序数的个数。而问题2的答案在我的上篇博客里已经进行讲解,这里就不赘述了。
何为逆序数,123,逆序数为 0 ,而321,逆序数对为(3,2),(3,1),(2,1),逆序数为3.
如何求取逆序数,我这里采用最简单的方法,也就是使用刚刚例子里枚举遍历的方法:
public boolean canSolve(int[] arr,init_x ,init_y){ int cnt = 0 ; for(int i =0 ;i <arr.length; i++) for(int j =1 ;j <arr.length - i ; j ++) if(arr[i]>arr[i+j]) cnt ++;//判断是否有解cnt = cnt + init_x + init_y ;// 目标图案的奇偶性int target_cnt = arr[init_x + init_y*MAX_X] + arr[init_x + init_y * MAX_X]%MAX_X;if(cnt%2==target_cnt%2) return true;else return false;}
方法的三个参数为生成的随机数组、初始空图块位置横坐标和纵坐标。由于需要知道初始空图块的目标位置,因此实际上arr[init_x + init_y*MAX_X]取出了空图块的编号,而对其进行除以最大横坐标和对最大横坐标取余数,即可知道其目标位置的横坐标和纵坐标。
1 0
- java学习心得 关于如何设计一个拼图游戏
- 一个拼图游戏
- Java设计模式学习心得
- Java设计模式学习心得
- Java设计模式学习心得
- 关于java的学习心得
- Java拼图游戏
- java拼图游戏
- JAVA拼图游戏
- Java拼图游戏
- Java拼图游戏
- WIndows学习心得【设计一个矩形】
- Java设计模式学习心得总结
- [转]Java设计模式学习心得
- 类似拼图游戏设计
- 一个c++拼图游戏源码
- 关于对于一个新框架的学习心得
- 关于一个Java帮助系统的设计
- android获取view宽高的几种方法 - ysl_longer
- 当你输入一个网址,实际会发生什么?
- CAS单点登录python客户端分析
- 文字动画(Textdh)
- 不要为做而做
- java学习心得 关于如何设计一个拼图游戏
- ActiveAndroid 简单方便的ORM(对象关系映射)
- web.xml配置
- 需要看的书籍
- 通知
- matlab unique函数
- github删除仓库详细步骤
- 东汉十三州以及各个郡的说明
- jQuery中的Ajax总结