八数码游戏就是通过移动空格把数字从给定的状态移动到目标状态,例如:
初始状态为 目标状态为
2 8 3 1 2 3
1 6 4 8 4
7 5 7 6 5
程序中用0表示空格,提供了两套状态。
EightNums.rb
class EightNums
#常量定义
UP = 1
DOWN = -1
LEFT = 2
RIGHT = -2
ROW = 0
COL = 1
#初始化
@@InitStat = [[2,8,3], [1,6,4], [7,0,5]] #初始状态
@@TargetStat = [[1,2,3], [8,0,4], [7,6,5]] #目标状态
@@Stat = [[2,8,3], [1,6,4], [7,0,5]] #初始状态
@@ZeroPos = [2, 1] #0的位置
# @@InitStat = [[2,0,3], [1,4,5], [6,7,8]] #初始状态
# @@TargetStat = [[1,2,3], [4,0,5], [6,7,8]] #目标状态
# @@Stat = [[2,0,3], [1,4,5], [6,7,8]] #初始状态
# @@ZeroPos = [0, 1] #0的位置
def run()
puts "Initial status:"
printStat(@@InitStat)
min = getValue(@@Stat)
puts "Target status:"
printStat(@@TargetStat)
puts "Initial value: #{min}",' '
steps = 0
lastmove = -1 #记录上次移动方向,避免反复
while steps < 10 do
flag = false #是否找到比min小的值
#寻找最小值,确定移动方向
direction = UP
[UP, DOWN, LEFT, RIGHT].each do
|i|
val = tryMoving(i)
if val != -1
if val < min && i != -lastmove then
min = val
flag = true
direction = i
end
end
end
#移动
moveZero(direction)
lastmove = direction
printStat(@@Stat)
puts "Current value: #{getValue(@@Stat)}"
if !flag
min = getValue(@@Stat)
end
steps += 1
break if getValue(@@Stat) == 0
end
end
private
def getValue(status)
value = 0
for row in 0..2 do
for col in 0..2 do
if status[row][col] != @@TargetStat[row][col]
value += 1
end
end
end
return value
end
#移动0
def moveZero(direction)
case direction
when UP #上移
if @@ZeroPos[ROW] != 0
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL]] = @@Stat[@@ZeroPos[ROW] - 1][@@ZeroPos[COL]]
@@Stat[@@ZeroPos[ROW] - 1][@@ZeroPos[COL]] = 0
@@ZeroPos[ROW] -= 1
else
return -1
end
when DOWN #下移
if @@ZeroPos[ROW] != 2
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL]] = @@Stat[@@ZeroPos[ROW] + 1][@@ZeroPos[COL]]
@@Stat[@@ZeroPos[ROW] + 1][@@ZeroPos[COL]] = 0
@@ZeroPos[ROW] += 1
else
return -1
end
when LEFT #左移
if @@ZeroPos[COL] != 0
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL]] = @@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL] - 1]
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL] - 1] = 0
@@ZeroPos[COL] -= 1
else
return -1
end
when RIGHT #右移
if @@ZeroPos[COL] != 2
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL]] = @@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL] + 1]
@@Stat[@@ZeroPos[ROW]][@@ZeroPos[COL] + 1] = 0
@@ZeroPos[COL] += 1
else
return -1
end
end
return 0
end
#打印状态
def printStat(status)
3.times {|i| print status[i][0], ' ', status[i][1], ' ', status[i][2], "\n"}
end
#尝试移动,移动不成功则返回-1
def tryMoving(direction)
success = moveZero(direction)
if success == 0
value = getValue(@@Stat)
moveZero(-direction)
return value
else
return -1
end
end
end
Num = EightNums.new
Num.run()
分享到:
相关推荐
【标题】"飞机大战ruby实现" 是一个使用Ruby编程语言开发的飞行射击游戏,它基于RPG Maker XP 1.03引擎构建。这个项目展示了如何利用Ruby的灵活性和RPG Maker XP的功能来创建一款简单但有趣的游戏。 【描述】中的...
综上所述,这个基于Ruby实现的系统利用了Ruby语言的特性,构建了一个集游戏信息管理与游戏映射信息处理于一体的平台,展示了Ruby在游戏开发领域的强大潜力和灵活性。无论是对于初学者还是经验丰富的开发者,这样的...
**Ruby-TensorStream:用Ruby重现实现TensorFlow** Ruby-TensorStream是一个开源项目,旨在为Ruby开发者提供一个类似于Google TensorFlow的深度学习框架。它的核心目标是让Ruby程序员能够利用TensorFlow的强大功能...
游戏脚本语言(ruby初步) 游戏脚本语言是游戏开发中不可或缺的一部分,而 ruby 是一种广泛应用于游戏脚本编程的语言。了解游戏脚本编程的基础是游戏开发者的必备技能,而 ruby 的语法和基本用法是游戏脚本编程的...
本资源"ruby-使用ruby实现的排序算法-sorting.zip"聚焦于如何使用Ruby实现不同的排序算法,这对于Ruby开发者来说是一项重要的技能。下面将详细讨论Ruby中的排序算法及其原理。 1. 内置排序方法 `sort` Ruby提供了...
此外,Python还可以与C++或Unity等更底层的游戏引擎交互,实现更高效的游戏性能。 其次,Lua是一种轻量级的脚本语言,特别适合嵌入到大型游戏项目中作为配置语言使用。它的设计目标就是简单、快速、小巧,这使得Lua...
这个库为Ruby开发者提供了一套强大的工具,用于在应用程序中实现多语言支持和文化敏感的文本处理。 首先,我们来了解一下ICU。ICU是一个广泛使用的开源库,它提供了全面的Unicode支持和跨平台的本地化功能。它包含...
ruby-snmp, SNMP ( 简单网络管理协议)的ruby 实现 用于 ruby的 SNMP库摘要这里库实现 SNMP ( 简单网络管理协议) 。 它在纯 ruby 中实现,因此不依赖于的外部库( 如 ) 。 你可以在 ruby 可以运行的任何地方运行这里库...
在Ruby on Rails(ROR)框架中,实现搜索和分页功能是常见的需求,尤其是在构建数据密集型Web应用时。本示例将深入探讨如何利用Ruby技术和Rails的强大特性来完成这一任务。 首先,我们需要理解搜索功能的基础:查询...
在Ruby的世界里,管理不同的Ruby实现(如MRI、JRuby、Rubinius、MagLev和MRuby)是非常重要的,这有助于开发者根据项目需求选择最适合的运行时环境。`ruby-install`就是这样一个工具,它允许用户方便地安装和管理...
Ruby-Http2是HTTP/2协议的一个纯Ruby实现,它为Ruby开发者提供了一种高效、安全的方式来处理HTTP通信。HTTP/2是HTTP协议的最新版本,相比于早期的HTTP/1.1,它引入了许多改进,旨在提高网络性能,降低延迟,并优化...
在Ruby中开发Scrum扑克游戏,首先需要理解游戏的基本规则。团队成员各自选择一张代表他们对任务工作量估计的卡片,然后公开展示。这种方式鼓励开放讨论,以便团队达成共识,而不是简单地平均各个成员的估计值。...
Ruby Ruby Ruby Ruby Ruby Ruby
Ruby-Whois是一个高效、灵活且完全用Ruby语言编写的WHOIS客户端和解析库。它设计用于查询域名、IP地址和其他WHOIS相关的记录,并能够处理各种服务器响应格式。这个库的强大之处在于它不仅可以发送WHOIS请求,还可以...
标题、描述及标签均指向了“Ruby自动化脚本实现网络拓扑映射”这一主题,然而,实际的部分内容却似乎与自动化脚本或网络拓扑映射没有直接关联,而更像是一个自动化操作的脚本示例,可能用于模拟鼠标移动和键盘输入,...
Ruby游戏脚本(RGSS)是用于开发角色扮演游戏(RPG)的一种编程工具,它基于Ruby语言,并由日本公司Enterbrain为他们的RPG Maker系列软件所设计。RGSS(Ruby Game Scripting System)允许开发者通过编写Ruby代码来...
标题提到的"用Python, Lua 和 Ruby语言设计游戏",这三种动态语言各自拥有独特的优点,适用于不同的游戏开发场景。接下来,我们将深入探讨每种语言在游戏开发中的应用、特点以及它们如何协同工作。 **Lua** Lua 是...
本资料包“ruby-使用ruby实现的算法之冒泡排序.zip”专注于讲解如何使用Ruby来实现经典的冒泡排序算法,这对于理解排序算法以及提升Ruby编程技能非常有帮助。 冒泡排序是一种基础且直观的排序算法,它通过重复遍历...