我是Ruby初学者,我有一个问题。我正在写这个代码 - Dungeon冒险,我想使用用户输入(转换为符号)并检查天气地牢符号引用(:west)是否存在。如果它存在,它应该基于用户输入(例如东)。
我的问题是我不知道如何比较用户输入(y)与现有引用(:west,:east,:south:,:north)
提前谢谢。
class Dungeon
attr_accessor :player
def initialize(player)
@player = player
@rooms = {}
end
def add_room(reference, name, description, connections)
@rooms[reference] = Room.new(reference, name, description, connections)
end
def start(location)
@player.location = location
show_current_description
end
def show_current_description
puts find_room_in_dungeon(@player.location).full_description
end
def find_room_in_dungeon(reference)
@rooms[reference]
end
def find_room_in_direction(direction)
find_room_in_dungeon(@player.location).connections[direction]
end
def go(direction)
puts "You go " + direction.to_s
@player.location = find_room_in_direction(direction)
show_current_description
end
end
class Player
attr_accessor :name, :location
def initialize(name)
@name = name
end
end
class Room
attr_accessor :reference, :name, :description, :connections
def initialize(reference, name, description, connections)
@reference = reference
@name = name
@description = description
@connections = connections
end
def full_description
@name + "\n\nYou are in " + @description
end
end
puts "What is your name?"
x = gets.chomp
player = Player.new(x)
puts "Hi #{x}. Welcome to adventure!"
my_dungeon = Dungeon.new(player)
# Add rooms to the dungeon
my_dungeon.add_room(:largecave, "Large Cave", "a large cavernous cave", { :west => :smallcave, :south => :coldcave, :north => :hotcave})
my_dungeon.add_room(:smallcave, "Small Cave", "a small, claustrophobic cave", { :east => :largecave, :south => :coldcave, :north => :hotcave })
my_dungeon.add_room(:coldcave, "Cold Cave", "a cold, icy cave", { :north => :hotcave })
my_dungeon.add_room(:hotcave, "Hot Cave", "a hot, very hot cave", { :south => :coldcave })
# Start the dungeon by placing the player in the large cave
my_dungeon.start(:largecave)
puts "Where would you like to go? west, north or south?"
y = gets.chomp.to_sym
#Here is the problem that I am not able to solve:
case y
when y == Room::reference then my_dungeon.go(y)
else puts "There is no cave there"
end
答案 0 :(得分:0)
您需要访问所有房间并找到具有该符号的房间。你不需要一个case语句,你应该能够验证它是一个有效的房间,然后发送它:
if(my_dungeon.rooms[y])
my_dungeon.go(y)
else
puts "There is no cave there"
end
这是测试rooms[y]
是否真实(不返回零或假值)。如果y
不存在,则哈希(my_dungeon.rooms
)将返回nil
。这是一个虚假的价值。