设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3510|回复: 2
打印 上一主题 下一主题

[讨论] 绝对有解的⑨宫格拼图(另:打乱数组)

[复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
710
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2012-1-25 20:27:15 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 各种压力的猫君 于 2012-1-25 20:42 编辑

*请先下载柳大的拼图游戏(http://www.66rpg.com/articles/18

非常严重的问题……9宫格50%概率会无解……

于是下面脚本诞生
  1. #==============================================================================
  2. # ■ 绝对有解的⑨宫格 by 各种压力的猫君
  3. #------------------------------------------------------------------------------
  4. #  完全没优化效率的原始版本。
  5. #   适用于柳大的拼图无双(http://www.66rpg.com/articles/18)
  6. #   插入 Scene_PT 以下 MAIN 以上。
  7. #==============================================================================

  8. class Scene_PT
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   alias randnumbers_66 randnumbers
  13.   def randnumbers
  14.     if @max_x == 3 && @max_y == 3
  15.       possible9 # 绝对有解的⑨宫格 by 各种压力的猫君
  16.     else
  17.       randnumbers_66
  18.     end
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 打乱数组 by 各种压力的猫君
  22.   #--------------------------------------------------------------------------
  23.   def shuffle_array(array)
  24.     # 新数组
  25.     new_array = []
  26.     # 临时数组
  27.     temp_array = []
  28.     # 临时变量(循环次数)
  29.     pass = 0
  30.     # 循环
  31.     loop do
  32.       # 每30次调用一次Graphics.update,避免10s
  33.       # Graphics.update if pass % 30 == 0
  34.       # 当所有序列排列完毕后跳出循环
  35.       break if temp_array.size == array.size
  36.       # 在数组个数之内生成随机数
  37.       temp_index = rand(array.size)
  38.       # 判断是否已存在
  39.       if temp_array.include?(temp_index)
  40.         # 增加循环次数
  41.         pass += 1
  42.         next # 继续循环
  43.       else
  44.         temp_array.push(temp_index) # 压入数组
  45.       end
  46.       # 增加循环次数
  47.       pass += 1
  48.     end
  49.     # 生成新数组
  50.     for i in temp_array
  51.       new_array.push array[i]
  52.     end
  53.     # 返回新数组
  54.     return new_array
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 生成绝对有解的⑨宫格 by 各种压力的猫君
  58.   #--------------------------------------------------------------------------
  59.   def possible9
  60.     # 生成0~8数组
  61.     temp_array = []
  62.     for i in 0..8
  63.       temp_array.push(i)
  64.     end
  65.     # 打乱数组
  66.     rand_9 = shuffle_array(temp_array)
  67.     # 检查是否有解
  68.     unless possible9?(rand_9)
  69.       # 重排
  70.       rand_9 = shuffle_array(temp_array)
  71.     end
  72.     # 删除空格
  73.     rand_9.delete(8)
  74.     # 写入变量
  75.     @randnumbers = rand_9
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 检查⑨宫格是否有解 by 各种压力的猫君
  79.   #--------------------------------------------------------------------------
  80.   def possible9?(array)
  81.     get_index = []
  82.     correct_index = []
  83.     need_exchange = 0
  84.     for i in 0..8
  85.       get_index.push(array.index(i))
  86.     end
  87.     #
  88.     for i in 0..8
  89.       correct_index.push(i)
  90.     end
  91.     #
  92.     try_exchange = get_index.clone
  93.     for i in 0..8
  94.       if try_exchange[i] == correct_index[i]
  95.         # 无需移动
  96.       else
  97.         # 需要对调次数+1
  98.         need_exchange += 1
  99.         # 实际对调
  100.         try_exchange[i] = get_index[correct_index[i]]
  101.         try_exchange[correct_index[i]] = get_index[i]
  102.       end
  103.     end
  104.     #
  105.     if need_exchange % 2 == 0
  106.       # 有解
  107.       return true
  108.     else
  109.       # 无解
  110.       return false
  111.     end
  112.   end
  113. end
复制代码
各种求优化 求讨论
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-6-2 13:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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