拼图最后两张图片异位问题的解决
2015-10-08 08:40
253 查看
// 初始化图片 public void initView() { for (int i = 0; i < number.length; i++) { number[i] = gameover[i]; } // 将图片随机化 for (int i = 0; i < number.length - 4; i++) { int temp = number[i]; int index = (int) (Math.random() * (number.length - 5)); number[i] = number[index]; number[index] = temp; } initGame(); getlist(); // 判断生成是否有解 if (canSolve(data)) { return; } else { initView(); } socer = 0; tv2.setText("当前移动了 " + String.valueOf(socer) + " 步"); } // 将图片添到布局 public void initGame() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j + i == 8) { iv_group[i][j].setImageResource(number[24]); } else { iv_group[i][j].setImageResource(number[i * 5 + j]); } } } } /** * 获取data * */ public void getlist() { data = new ArrayList<Integer>(); for (int i = 0; i < number.length - 4; i++) { for (int j = 0; j < number.length - 4; j++) { if (number[i] == gameover[j]) { data.add(j); } } } System.out.println("============" + data.toString()); } /** * 该数据是否有解 * * @param data * @return 该数据是否有解 */ public boolean canSolve(List<Integer> data) { // 可行性原则 return getInversions(data) % 2 == 0; } /** * 计算倒置和算法 * * @param data * @return 该序列的倒置和 */ public static int getInversions(List<Integer> data) { int inversions = 0; int inversionCount; for (int i = 0; i < data.size(); i++) { inversionCount = 0; for (int j = i + 1; j < data.size(); j++) { int index = data.get(i); if (data.get(j) < index) { inversionCount++; } } inversions += inversionCount; inversionCount = 0; } System.out.println("******" + data.toString() +"============"+ inversions); return inversions; }
拼图游戏虽说简单,但是当拼图的行列数是奇数时,就会出现著名的puzzle问题
这种情况就需要倒置数进行判断
当拼图的行数为偶数时,倒置数为奇偶都可以
当拼图的行列数为奇数时,
如果空白图片从最底层往上数是奇数,倒置数则需要为偶数
如果空白图片从最底层往上数是偶数,倒置数则需要为奇数
相关文章推荐
- jQuery制作拼图小游戏
- 九宫格拼图游戏
- A puzzle for me (cookie)
- 行列变换
- 拼图游戏的数学原理
- 【原创的】拼图的解法--四格法
- UVALive 3907 (LA 3907) Puzzle AC自动机 + 搜索DP 记录路径
- 【白书之路】 227 - Puzzle 模拟
- 关于数字拼图
- JAVA实现拼图游戏 推荐
- Cast Puzzle(魔金)智力玩具
- Sliding Puzzle Board
- 拼图
- 电脑系统自带画图工具拼接两张或多张图片
- For 3dsMax 拼图建模工具系列
- 学习python:实例3.终端版拼图游戏
- iOS 滑块拼图游戏(Puzzle8)
- OpenCV拼图(多种形式,封装,使用,包括图片越界及缩放)
- 重写JavaScript的Math.round方法
- 安卓拼图游戏(二)