Sha256: 33b47a887f6dd3e01c3077d17dd982e389eb710e31e43a7f659010c30af60255
Contents?: true
Size: 1.91 KB
Versions: 6
Compression:
Stored size: 1.91 KB
Contents
# Copyright (c) 2007-2023 Andy Maleh # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. require_relative 'ship' class Battleship module Model class ShipCollection BATTLESHIPS = { aircraft_carrier: 5, battleship: 4, submarine: 3, cruiser: 3, destroyer: 2 } attr_reader :game, :player, :ships attr_accessor :placed_count def initialize(game, player) @game = game @player = player @ships = BATTLESHIPS.reduce({}) do |hash, pair| name, width = pair ship = Ship.new(self, name, width) Glimmer::DataBinding::Observer.proc do |cell_value| self.placed_count = ships.values.map(&:top_left_cell).compact.size end.observe(ship, :top_left_cell) hash.merge(name => ship) end end def reset! ships.values.each(&:reset!) end end end end
Version data entries
6 entries across 6 versions & 1 rubygems