Row
la tarea de contar el número de marcas.
La clase Row
representa a un objeto fila del tablero, incluyendo las diagonales.
Sólo tiene dos métodos porque los dema´s los obtiene del módulo SquaresContainer
:
class Board class Row def initialize( squares, names ) @squares = squares @names = names end include SquaresContainer def to_board_name( index ) Board.index_to_name(@names[index]) end end .... endEl método auxiliar
to_board_name
recibe un índice de la fila, columna o diagonal que
representa el objeto Row
(supongamos que por ejemplo @squares = ["X","O"," "], @names = [2, 4, 6]
y index = 2
y devuelve la notación jugada ("c2"
) que define a esa casilla.
En realidad todos los métodos de conteo xs
, os
, blanks
son proveídos por el módulo
SquaresContainer
:
module TicTacToe module SquaresContainer def []( index ) @squares[index] end def blanks() @squares.find_all { |s| s == " " }.size end def os() @squares.find_all { |s| s == "O" }.size end def xs() @squares.find_all { |s| s == "X" }.size end end .... endEste mixin es incluído por
Rows
para proveer los contadores
para las filas, columnas y diagonales. Pero es también incluído/reutilizado por la clase
Board
para comprobar cuando no hay casillas en blanco y ha habido un empate:
def won? each_row do |row| return "X" if row.xs == 3 # "X" wins return "O" if row.os == 3 # "O" wins end return " " if blanks == 0 # Aqui self es el objeto Board. false # Reutilizamos blanks end
Casiano Rodriguez León 2015-01-07