명백한 논리 오류에 대한 피드백을 찾고 최적화하지 않았습니다. 마지막 게임 메시지 (예 : 1 tick이 11 tick으로 바뀜)에서 이상한 틱 수가 계속 나타납니다.매우 구체적인 Conway의 Game of Life (Ruby beginner)
코드를 실행하는 동안 발견 할 수있는 가장 큰 오류는 2 차 틱에서 발생하며 매우 많은 양의 살아있는 셀이 나타납니다. 이유를 이해하는 데 너무 익숙하지 않지만 @alive_cells가 각 검사 후에 0으로 다시 설정되지 않는 것처럼 보입니다.
내 코드는 크기가 크지 만 경험이있는 사람에게는 어린이의 놀이가되어야합니다.
class CellGame
def initialize
puts "How big do you want this game?"
@size = gets.chomp.to_i
@cell_grid = Array.new(@size) { Array.new(@size) }
@grid_storage = Array.new(@size) { Array.new(@size) }
@tick_count = 0
fill_grid_with_random_cells
end
def fill_grid_with_random_cells
@cell_grid.each do |row|
row.map! do |cell|
roll = rand(10)
if roll > 9
"•"
else
" "
end
end
end
check_cells_for_future_state
end
def check_for_any_alive_cells
@cell_grid.each do |row|
if row.include?("•")
check_cells_for_future_state
break
else
end_game_print_result
end
end
end
def check_cells_for_future_state
@cell_grid.each_with_index do |row, row_index|
row.each_with_index do |cell, cell_index|
@live_neighbors = 0
add_row_shift = (row_index + 1)
if add_row_shift == @size
add_row_shift = 0
end
add_cell_shift = (cell_index + 1)
if add_cell_shift == @size
add_cell_shift = 0
end
def does_this_include_alive(cell)
if cell.include?("•")
@live_neighbors +=1
end
end
top_left_cell = @cell_grid[(row_index - 1)][(cell_index - 1)]
does_this_include_alive(top_left_cell)
top_cell = @cell_grid[(row_index - 1)][(cell_index)]
does_this_include_alive(top_cell)
top_right_cell = @cell_grid[(row_index - 1)][(add_cell_shift)]
does_this_include_alive(top_right_cell)
right_cell = @cell_grid[(row_index)][(add_cell_shift)]
does_this_include_alive(right_cell)
bottom_right_cell = @cell_grid[(add_row_shift)][(add_cell_shift)]
does_this_include_alive(bottom_right_cell)
bottom_cell = @cell_grid[(add_row_shift)][(cell_index)]
does_this_include_alive(bottom_cell)
bottom_left_cell = @cell_grid[(add_row_shift)][(cell_index - 1)]
does_this_include_alive(bottom_left_cell)
left_cell = @cell_grid[(row_index)][(cell_index - 1)]
does_this_include_alive(left_cell)
if @live_neighbors == 2 || @live_neighbors == 3
@grid_storage[row_index][cell_index] = "•"
else
@grid_storage[row_index][cell_index] = " "
end
end
end
update_cell_grid
end
def update_cell_grid
@cell_grid = @grid_storage
print_cell_grid_and_counter
end
def print_cell_grid_and_counter
system"clear"
@cell_grid.each do |row|
row.each do |cell|
print cell + " "
end
print "\n"
end
@tick_count += 1
print "\n"
print "Days passed: #{@tick_count}"
sleep(0.25)
check_for_any_alive_cells
end
def end_game_print_result
print "#{@tick_count} ticks were played, end of game."
exit
end
end
+1 'lives_on?'방법은 아름다움의 것입니다. –
@ Mark_Thomas - 고마워요. 이것에 대한 지출 시간이 너무 길어집니다. – seph
이 남자를 들여다 주셔서 감사합니다. 나는 이것을 공부해야합니다. 그래서 당신이 지금 하하 한 것을 이해하십시오. – Stringy