class NewRules
Public Class Methods
new()
click to toggle source
# File lib/new_Rules.rb, line 7 def initialize; end
Public Instance Methods
checkBorderFriends(_board, index, borders)
click to toggle source
# File lib/new_Rules.rb, line 61 def checkBorderFriends(_board, index, borders) copy = Marshal.load(Marshal.dump($checkBoard)) matches = 0 # Top side if borders[0].include?(index) matches = 0 pos1 = index - 1 pos2 = index + 1 pos3 = pos1 + $size.to_i pos4 = pos2 + $size.to_i pos5 = index + $size.to_i matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? matches += 1 if $checkBoard[pos4].is_alive? matches += 1 if $checkBoard[pos5].is_alive? elsif borders[1].include?(index) # Rigth side matches = 0 pos1 = $size - 1 pos2 = pos1 - 1 pos3 = pos2 + $size pos4 = pos3 + $size pos5 = pos4 + 1 matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? matches += 1 if $checkBoard[pos4].is_alive? matches += 1 if $checkBoard[pos5].is_alive? elsif borders[2].include?(index) # Bottom side matches = 0 pos1 = index + 1 pos2 = pos1 - $size.to_i pos3 = pos2 - 1.to_i pos4 = pos3 - 1.to_i pos5 = pos4 + $size.to_i matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? matches += 1 if $checkBoard[pos4].is_alive? matches += 1 if $checkBoard[pos5].is_alive? else # Left side matches = 0 pos1 = index - $size pos2 = pos1 + 1 pos3 = pos2 + $size pos4 = pos3 + $size pos5 = pos4 - 1 matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? matches += 1 if $checkBoard[pos4].is_alive? matches += 1 if $checkBoard[pos5].is_alive? end case matches when 0, 1 copy[index].die when 2 copy[index].live if copy[index].is_alive? when 3 copy[index].live unless copy[index].is_alive? when 4, 5, 6 copy[index].die end copy[index] end
checkFriends(checkBoard, borders, squares)
click to toggle source
# File lib/new_Rules.rb, line 9 def checkFriends(checkBoard, borders, squares) $checkBoard = checkBoard newBoard = [] size = $checkBoard.size.to_i $size = Math.sqrt(size) $checkBoard.each_with_index do |cell, index| copyBoard = Marshal.load(Marshal.dump(checkBoard)) case cell.kind when 'normal' newCell = checkNormalFriends(copyBoard, index) when 'border' newCell = checkBorderFriends(copyBoard, index, borders) when 'square' newCell = checkSquareFriends(copyBoard, index, squares) end newBoard << newCell end newBoard end
checkNormalFriends(_board, index)
click to toggle source
# File lib/new_Rules.rb, line 29 def checkNormalFriends(_board, index) copy = Marshal.load(Marshal.dump($checkBoard)) matches = 0 pos1 = index - $size - 1 pos2 = pos1 + 1 pos3 = pos2 + 1 pos4 = index - 1 pos5 = index + 1 pos6 = index + $size - 1 pos7 = pos6 + 1 pos8 = pos7 + 1 matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? matches += 1 if $checkBoard[pos4].is_alive? matches += 1 if $checkBoard[pos5].is_alive? matches += 1 if $checkBoard[pos6].is_alive? matches += 1 if $checkBoard[pos7].is_alive? matches += 1 if $checkBoard[pos8].is_alive? case matches when 0, 1 copy[index].die when 2 copy[index].live if copy[index].is_alive? when 3 copy[index].live unless copy[index].is_alive? when 4, 5, 6 copy[index].die end copy[index] end
checkSquareFriends(_board, index, squares)
click to toggle source
# File lib/new_Rules.rb, line 130 def checkSquareFriends(_board, index, squares) copy = Marshal.load(Marshal.dump($table.board)) matches = 0 squares = squares.sort! # First square if squares[0] == index pos1 = 1 pos2 = pos1 + $size.to_i pos3 = $size.to_i matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? elsif squares[1] == index pos1 = index - 1.to_i pos2 = pos1 + $size.to_i pos3 = pos2 + 1.to_i matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? elsif squares[2] == index auxSize = $size * ($size - 1).to_i pos1 = auxSize - $size pos2 = pos1 + 1 pos3 = auxSize + 1 matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? elsif squares[3] == index auxSize = ($size * $size) - 1 pos1 = auxSize - 1 pos2 = pos1 - $size pos3 = auxSize - $size matches += 1 if $checkBoard[pos1].is_alive? matches += 1 if $checkBoard[pos2].is_alive? matches += 1 if $checkBoard[pos3].is_alive? end case matches when 0, 1 copy[index].die when 2 copy[index].live if copy[index].is_alive? when 3 copy[index].live unless copy[index].is_alive? end copy[index] end