gpt4 book ai didi

Ruby 为国际象棋网格命名方形对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:05 24 4
gpt4 key购买 nike

我正在用 Ruby 编写国际象棋程序。我正在尝试创建一个由 64 个 Square 对象组成的 Board,它将跟踪 piece_on_square , x位置,y位置,和 coordinates . coordinates变量将保存该特定空间的字母数字组合,例如“a8”或“a1”。但是,我无法生成这些字母数字组合,使用我的 #assign_coordinates方法。

这是我所拥有的:

方形类

class Square
attr_accessor :piece_on_square, :x, :y, :coordinates
def initialize(piece_on_square=nil, x=nil, y=nil, coordinates=nil)
@piece_on_square = piece_on_square
@x = x
@y = y
@coordinates = coordinates
end
end

板类

class Board
def initialize
@square_array = Array.new(64)
setup_new_board
assign_coordinates
end

def setup_new_board
@square_array.each_with_index do |n, index|
square_array[index] = Square.new
end
end

def assign_coordinates
letters = ["a", "b", "c", "d", "e", "f", "g", "h"]
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
@square_array.each do |i|
letters.each do |x|
numbers.each do |n|
i.coordinates = "#{x}#{n}"
end
end
end
end

当我这样做时,所有 coordinates被列为“h8”。例如,在 IRB 中查找时,@square_array[0]返回:

=> #<Square:0x007fd74317a0a8 @piece_on_square=nil, @x=nil, @y=nil, @coordinates="h8">

我做错了什么?如何正确创建和命名这些 Square 对象中的每一个?

最佳答案

对于每个正方形,您依次(重新)分配从 "a1""h8" 的每个值,最终分配 "h8"

要正确地做到这一点,你可以这样做:

class Board
Letters = ("a".."h").to_a
Numbers = ("1".."8").to_a
def initialize
@square_array = Array.new(64){Square.new}
assign_coordinates
end
def assign_coordinates
Letters.product(Numbers).zip(@square_array){|a, e| e.coordinates = a.join}
end
end

关于Ruby 为国际象棋网格命名方形对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com