Drakirus/Sudoku

View on GitHub
class/cell_class.rb

Summary

Maintainability
A
0 mins
Test Coverage
#!/usr/bin/env ruby

# encoding: UTF-8

##
# Author:: CHAMPION Pierre
# License:: MIT Licence
#
# https://github.com/Drakirus/Sudoku
#


# === Gestion de cases dans une planche de Sudoku
# === Variables d'instance
# - +row+   -> (*LECTURE*) Ligne de la case dans la planche<br>
# - +col+   -> (*LECTURE*) Colonne de la case dans la planche<br>
# - +box+   -> (*LECTURE*) Boxe de la case dans la planche<br>
# - +value+ -> (*LECTURE* / *ECRITURE*) Valeur de la case (Sudoku) (0==vide)

class Cell
  attr_accessor :value, :possibles#:nodoc:
  attr_reader :row, :col, :box#:nodoc:

  # Chaque case connait sa propre valeur et sa position dans la planche
  def initialize(row, col, box)
    @row, @col, @box = row, col, box
    @possibles = []
    @value = 0
    @freeze = false
  end
  # Représentation d'une case
  # * *Arguments*    :
  #   - +row+ -> Désignation de la ligne de la case
  #   - +col+ -> Désignation de la colonne de la case
  #   - +box+ -> Désignation de la "box"
  # * *Returns*
  #   - Cell
  def self.creer(row, col, box)
    new(row, col, box)
  end
  private_class_method :new

  include Comparable
  # Méthode de comparaison entre différente instance de Cell
  # * *Arguments*    :
  #   - +other+ -> autre Cell a compare
  # * *Returns*
  #   - true/false
  def ==(other)
    @value == other.value and @freeze == other.freeze?
  end
  # Connaitre si une Cell n'est pas remplie
  # * *Returns*
  #   - true/false
  def vide?
    @value == 0
  end

  # Connaitre si la cell est define lors de la generation
  # * *Returns*
  #   - true/false
  def freeze?
    @freeze
  end

  # Met la case en read only
  def freeze
    # instance_eval { undef :value= }
    @freeze = true
  end

  # Pour debugging
  # * Exemple
  #    Value: 2, Row: 0, Col: 0, Box: 0
  #    Value: 4, Row: 0, Col: 1, Box: 0
  #    Value: 6, Row: 0, Col: 2, Box: 0
  #    Value: 1, Row: 0, Col: 3, Box: 1
  #    Value: 3, Row: 0, Col: 4, Box: 1
  #    Value: 5, Row: 0, Col: 5, Box: 1
  #    Value: 8, Row: 0, Col: 6, Box: 2
  #    Value: 7, Row: 0, Col: 7, Box: 2
  def to_s
    return "Value: #{@value}, Row: #{@row}, Col: #{@col}, Box: #{@box}"
  end
end