找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 12549|回复: 19

经典游戏之puzzle(原创)

[复制链接]
发表于 2016-8-21 00:56:12 | 显示全部楼层 |阅读模式
本帖最后由 ntwuhui 于 2016-8-31 22:08 编辑

       拼图游戏是广受欢迎的一种智力游戏,它的变化多端,难度不一,让人百玩不厌。
       个性化的拼图,拼凑的不仅仅是一张照片,而是一个故事,一段回忆,一缕温情。每一片的单片都有它自己的位置,就像每段回忆都有它的故事,你要将它放在专属的地方,放对了就慢慢丰富起来,放错了就无法完整。
       你可以把你记忆中最深的片段,可以是你挚爱的照片,可以是你最难忘的一瞬留念,做成拼图,在思念的季节里一一拼起,把片片散落的记忆重新组合,用指尖温习甜蜜,把心湖里最美丽的涟漪荡漾开来。
       puzzle.jpg
      为了能够在EV3上重现该游戏,游戏目标简化为将随机摆放的数字1-15通过空位移动实现数字复位,即:
       goal.png
      具体算法实现,请见4楼      
      视频如下:
      
游戏名称:puzzle v1.0
实现语言:EV3G
游戏规则:
1、按确认键跳过欢迎页面
2、按上下左右移动空格,同时开始计时
3、游戏中,可以通过再次按确认键暂停计时(游戏)
4、当将15个数字按顺序从左至右并从上至下排列完成后,显示Success!
5、游戏结束时,若产生新的记录(时间或步数),更新新记录。
6、如果时间超过999秒,显示游戏失败(Game Over!)

欢迎页面,(PS:有点丑了)
image_00.png
按确认键开始(背后一堆计算,保证可以成功!其中Rtime、Rstep为999为初始记录,分别表示最好时间以及最少步数)
image_01.png
按右键(这里为简化按键,对空格进行操作)并开始计时,游戏中可随时按确认键暂停,当再次移动数字时继续计时。
image_02.png
经过181步后(应该有更少的步数,懒得再重完了)
image_03.png
向下,OK!(若当前time、step优于记录时,更新新记录)
image_04.png
puzzle.rar (73.47 KB, 下载次数: 286) copyright:water,2016-8-30(如需转载,请注明出处!)


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2016-8-21 01:21:23 来自手机 | 显示全部楼层
这个厉害
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-21 07:55:27 来自手机 | 显示全部楼层
高手
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2016-8-21 10:15:41 | 显示全部楼层
本帖最后由 ntwuhui 于 2016-8-31 00:38 编辑

puzzle v1.0设计说明:

1、界面设计:由于EV3分辨率有限,这里设计为4*4的格子。右侧time、step、Rtime、Rstep依次为时间、步数、最少时间以及最少步数。
2、交互设计:
(1) 原游戏本应移动数字(先选择某中某个数字,再移动它),为了简化操作,以及提高移动时间(本游戏有计时功能),同时为了锻炼游戏者的思维能力,改为移动空格。
(2) 游戏开始时,当按下上下左右任意键时(且对空格操作有效),即开始计时(time)并计算步数(step)。界面只显示小数点后1位,实际记录时精确到小数点后三位(毫秒),初始时,记录值均为上限值999。
(3) 游戏中,可随时按确认键暂停游戏,一旦再次移动空格,继续计时。
3、核心设计:

为确保每次可以完成任务,必须让初始随机数满足以下两个要求:
(1) 能够不重复的生成1-15以及空格位(基本要求)
(2) 初始随机数从左到右,从上到下,构成的数列中的逆序对的个数与空格所在行奇偶性应该一致(这样才能保证有解)
goal.png
如:上图可视为数列11、3、4、6、8、12、7、5、9、2、13、10、15、1、14,其中相对于11来说,(11,3)(11,4)(11,6)(11,8)(11,7)(11,5)(11,9)(11,2)(11,10)(11,1)共计10个逆序对,这样上图左侧共计有10+2+2+3+4+6+3+2+2+1+2+1+2=40个逆序对,空格此时在第4行,奇偶性一致,因此有解。否则的话,最后只能得到如下情况:
goal1.png
因此核心算法避免这个问题即可。
问题(1)的解决比较简单,将空格视为0,这样生成0-15内的随机数即可,为了避免重复生成,每生成一个新的数,将其视为阵列(数组)hash的下标,对应的值记为true即可(已生成)。初始时hash均为false(表示所有的数均没有生成),特别的记录下14和15的位置pos14、pos15(为解决问题2做准备)
问题(2),先根据上述穷举计算出逆序对的个数,判断当前情况是否有解,如没有,将pos14、pos15对应的14、15交换即可,这样可以高效地避免重新生成新的随机数。(PS:记录1、2的位置也可以)
4、主程序界面如下:
main.png
其中几个自定义模块如下:
Init:用于欢迎页面以及初始页面的显示(从记录文件中读取记录)
InitPuzzle:核心算法,用于生成随机数和保证有解
Timer:用于计时,可随时被暂停(确认键)
Move:用于移动空格,并更新数字阵列以及更新显示
Check:检查是否成功或者失败(超过999秒)
UpdateRecord:用于更新记录,(这里采用将文件方式记录最好时间及步数)
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-21 11:19:33 | 显示全部楼层
高手啊,好想把EV3做起来玩这个。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-21 14:16:09 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-21 23:31:48 | 显示全部楼层
太强悍了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-22 07:49:05 | 显示全部楼层
看上去高大上
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-29 11:05:05 | 显示全部楼层
楼主,请问这种游戏有无解的可能吗?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2016-8-29 16:55:32 | 显示全部楼层
本帖最后由 ntwuhui 于 2016-8-31 00:40 编辑
ADcb 发表于 2016-8-29 11:05
楼主,请问这种游戏有无解的可能吗?

如果随便生成几个数的话,有可能无解,具体原因见4楼
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-31 14:43:52 | 显示全部楼层
楼主  我也正在做一个拼图游戏  不过没你的复杂是9格的  也是通过控制空格的移动来达到整体移动,但没有考虑无解的情况,说实话,没看懂,楼主能在详细解释下奇偶一致的问题吗 或者哪有资料能看下   谢谢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-31 19:25:05 | 显示全部楼层
ntwuhui 发表于 2016-8-29 16:55
如果随便生成几个数的话,有可能无解,具体原因见4楼

谢谢lz,看懂了,自己编了一个,挺好玩的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-8-31 22:16:21 | 显示全部楼层
大魔王到此一游。    前辈 我来学习学习。虽然看不咋懂。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2016-9-1 08:23:32 | 显示全部楼层
xd62215135 发表于 2016-8-31 14:43
楼主  我也正在做一个拼图游戏  不过没你的复杂是9格的  也是通过控制空格的移动来达到整体移动,但没有考 ...

资料哪儿有,我也不是很清楚,刚刚研究了下,9格的情况和16格不同,你只要保证逆序对是偶数就有解,否则无解。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-9-1 10:12:20 | 显示全部楼层
ntwuhui 发表于 2016-9-1 08:23
资料哪儿有,我也不是很清楚,刚刚研究了下,9格的情况和16格不同,你只要保证逆序对是偶数就有解,否则 ...

OK   正在百度,奈何没学过编程高数,看着有点吃力。不懂还得请教,别嫌我烦就好了   呵呵呵
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-21 20:05 , Processed in 0.262762 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表