class MineField::Map

Attributes

points[R]
size[R]

Public Class Methods

new() click to toggle source
# File lib/mine_field/map.rb, line 5
def initialize
  print 'Matrix Boyunuz: '

  @size = gets.to_i - 1
  @points = []
  @print_size = @size.to_s.length + 1

  create_points
end

Public Instance Methods

create_points() click to toggle source
# File lib/mine_field/map.rb, line 15
def create_points
  mines_points
  other_points
end
draw() click to toggle source
# File lib/mine_field/map.rb, line 20
def draw
  puts `clear`
  header = '| ' + ' ' * (@print_size + 3) + (0..@size).to_a.map {|i| i.to_s.ljust(@print_size)}.join + " |\n"
  seperator = '-' * (header.length - 1) + "\n"

  (0..@size).each do |y|
    if y.zero?
      print seperator
      print header
      print seperator
    end

    print "| #{y.to_s.rjust(@print_size)} | "

    (0..@size).each do |x|
      point = get_point(x, y)

      print "#{point.to_s.ljust(@print_size)}"
      print ' |' if x == @size
    end

    puts ''
  end

  puts seperator
end
get_point(x, y) click to toggle source
# File lib/mine_field/map.rb, line 47
def get_point(x, y)
  @points.each do |point|
    return point if point.coordinate_x == x && point.coordinate_y == y
  end

  nil
end
visible!() click to toggle source
# File lib/mine_field/map.rb, line 55
def visible!
  @points.select {|p| p.opened == false}.each {|p| p.opened = true}
end

Private Instance Methods

exist_point?(x, y) click to toggle source
# File lib/mine_field/map.rb, line 83
def exist_point?(x, y)
  @points.each do |point|
    return true if point.coordinate_x == x && point.coordinate_y == y
  end

  false
end
mines_points() click to toggle source
# File lib/mine_field/map.rb, line 61
def mines_points
  mines_count = Math.sqrt(@size + 1).ceil

  loop do
    x = (0..@size).to_a.sample
    y = (0..@size).to_a.sample

    @points.push(Point.new(self, x, y, MINE_CHARACTER)) unless exist_point?(x, y)
    break if @points.size == mines_count
  end
end
other_points() click to toggle source
# File lib/mine_field/map.rb, line 73
def other_points
  (0..@size).each do |x|
    (0..@size).each do |y|
      next if exist_point?(x, y)

      @points.push(Point.new(self, x, y, NORMAL_CHARACTER))
    end
  end
end