Android拼图游戏开发全纪录2

今天我们主要来讨论下拼图游戏的可行性解的问题,其实不要小看拼图游戏,他其实是人工智能算法中很著名的15puzzle问题,网上已经有很多关于这个问题的解释,我就做个搬运工好了。

随机生成的15puzzle大约有%50是无解的,本文将就随机生成的谜题的可解性加以讨论。

设有如下矩阵:

12 1 10 2

7 11 4 14

5 x 9 15

8 13 6 3

将其排成水平的,有:12,1,10,2,7,11,4,14,5,X,9,15,8,13,6,3。并记该序列为A

定义:”倒置变量值“ T,Ti表示序列A中位于第i位之后比Ai小的元素的个数

也就是说上面的序列的倒置变量值分别是:11,0,8,0,4,6,1,6,1,3,4,2,2,1。求和,得到总的Tsum = 49。

那么有如下几个原则来判断当前问题是否有解:

设:问题宽度为W。

设:问题的倒置变量和为T。

一、对于一个W为奇数的问题来说,任何合法的移动都不会改变其"倒置变量值"的奇偶性。

证明:>>水平移动式不会改变问题的T。

>>垂直移动,意味值blank跨越了(W-1)个方格,由于问题宽度W是奇数的,那么(W-1)必定为偶数,再设这W-1个数中有n个数大于当前移动数,则有(W-1-n)个数小于当前移动数,那么移动后,带来的T的改变是:(W-1-n)-n=W-1-2n,因为W-1是偶数,则W-1-2n也必为偶数,说明问题的T的奇偶性不变。

二、当W为偶数时,有以下公式:(T是偶数) == (空格位于从矩阵底部往上数的奇数行中)

证明:>>水平移动式不会改变问题的T。

>>垂直移动,意味值blank跨越了(W-1)个方格,由于问题宽度W是偶数的,那么(W-1)必定为奇数,再设这W-1个数中有n个数大于当前移动数,则有(W-1-n)个数小于当前移动数,那么移动后,带来的T的改变是:(W-1-n)-n=W-1-2n,因为W-1是奇数,则W-1-2n也必为奇数,说明问题的T的奇偶性会交替变化,但是空格位置也在交替变化,这种变化也符合上面定义的公式。

OK,有了上面两个定理,我们可以推论出一下可行解原则:

1、如果问题宽度是奇数的,那么每个可解的问题所定义的T必须是偶数的。

2、如果问题宽度是偶数的,那么当空格位于从下往上数的奇数行中时,问题的T必须是偶数的;当空格位于从下往上数的偶数行中时,问题的T必须是奇数的。


---------------------------------------------------------------------------好 了---------------------------------------------------------------------------

我们需要的就是这2个结论:下面我们就要开始根据这个算法生成可解的拼图游戏了。

时间: 2024-10-18 22:31:47

Android拼图游戏开发全纪录2的相关文章

Android拼图游戏开发全纪录0

最近刚完成一个Android的小项目--拼图游戏.项目并不复杂,但也是一个完整的项目,用到的知识点还是比较丰富的. 做完之后照例进行下总结: 需求定义: 1.选择图片后进入拼图界面,可以选择默认图片或者自定义图片,即从图库选择或者从相机拍照. 2.可以设置游戏的难度,即选择拼图为NXN结构. 3.自动打乱拼图的顺序,利用倒置和算法,确保生成的数据有解. 4.拼图过程中可以查看原图. 5.拼图具有计时.记步功能. 6.完成拼图后显示全部图片并提升拼图成功. 7.可以查看历史记录. *8.利用IDA

Android拼图游戏开发全纪录3

今天我们要继续开发Android游戏拼图,今天同样是做一些准备工作,昨天我们把界面的准备工作做好了,今天呢,我们想想,要完成一个拼图,我们还需要做哪些准备. 首先,我们需要一个工具类,去获取屏幕的相关信息,让我们的程序去自动适应不同分辨率大小的屏幕: package com.xys.xpuzzle.util; import android.content.Context; import android.util.DisplayMetrics; import android.view.Displa

Android拼图游戏开发全纪录5

今天我们终于可以把这个项目给结束掉啦,有了前几天的准备,相信最后一天还是比较轻松的,国际惯例: 最后要完成的就是我们的主要功能--拼图界面. 布局比较简单,在前几天就已经做好了,现在我们要做的是以下几件事情: 1.计时记步:这个是游戏基本都有的功能,其实也比较简单,记录成功移动的步数.显示一个计时器就行了. 2.处理图片,调整为合适的大小比例:这个方法在前几天已经实现了 3.点击GridView后移动图片:是否能移动的方法已经在前几天实现了 4.判断是否拼图完成:唉,也已经实现了 5.点击原图按

Android拼图游戏开发全纪录4

今天我们主要实现我们的主界面:国际惯例: 界面我们已经在第一天做好了,今天我们就要实现这个界面的功能, 分析一下,这个界面包含以下几个功能: 1.显示游戏的难度:使用popupwindow,选择后改变显示的数字 2.显示默认的待拼图图片,包含一张选择自定义的图片:这个比较简单,只是GridView的最简单应用而已 3.自定义按钮功能:调用系统图册和相机 4.查看记录和了解更多:这个也是一般的应用需求,比较简单 package com.xys.xpuzzle.activity; import ja

Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高!

Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 一.切图工具类 我们九宫格嘛,肯定要一个切图的工具,把一个图片给切成九张,那具体是怎么实现呢?我们先写一个bean来存储一切的状态 ImagePiece package com.lgl.ninegame.utils; import android.graphics.Bitmap; /** * * C

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.5节2D动画的开发

2.5 2D动画的开发 Android 3D游戏开发技术宝典--OpenGL ES 2.0 虽然本书是着重介绍3D的开发技术,但在大部分的3D应用中也需要有不少的2D界面,如菜单.帮助等.本节将介绍一般用于开发游戏中2D界面的SurfaceView类的使用.其继承自View类,但与View的不同之处在于,View更新画面必须是在UI线程中(也可以理解为主线程中),而SurfaceView更新画面可以在自定义线程中进行,大大方便了开发. 提示 关于Android下的多线程问题,读者可以参考笔者在人

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.5节Android应用程序运行的机制

1.5 Android应用程序运行的机制 Android 3D游戏开发技术宝典--OpenGL ES 2.0 上一节介绍了如何搭建Android开发环境.如何开发Hello Android应用程序以及Android应用程序的调试,接下来在本节中将简要地介绍Android应用程序的运行机制. 1.5.1 应用程序的系统架构 Android平台由应用程序.应用程序框架.Android运行时.系统库以及底层Linux内核构成,详细结构如图1-54所示. 说明 应用程序层里面包含的就是需要读者去发挥创意

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.4节Hello Android应用程序的开发

1.4 Hello Android应用程序的开发 Android 3D游戏开发技术宝典--OpenGL ES 2.0 本节首先将介绍如何在Eclipse中创建一个基于Android的Hello World应用程序,之后将简单介绍Android应用程序的调试,为读者以后学习高级开发铺平道路. 1.4.1 第一个Android应用程序 本小节将向读者介绍如何在Eclipse中创建一个基于Android的Hello World应用程序,基本步骤如下所列. (1)首先打开Eclipse,然后依次选择Fi

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.1节游戏中的音效

2.1 游戏中的音效 Android 3D游戏开发技术宝典--OpenGL ES 2.0 一款好游戏,除了具备优质的画面和较高的可玩性之外,还应该有出色的音效.音效一般指的是游戏中发生特定行为或进行特定操作时播放的效果音乐或为了渲染整体气氛播放的背景音,如远处隆隆的炮声.怪物死亡的惨叫声.由远而近的脚步声等. 通过开发人员精心准备的声音特效,结合游戏的场景,可以渲染出一种紧张刺激的氛围,使玩家产生身临其境的感觉.这就像电影中的声音特效一样,假如没有了合适的音效,那么游戏和电影一样,真实感会大打折