diff --git a/README.md b/README.md index 54392cc..dd23753 100644 --- a/README.md +++ b/README.md @@ -1,71 +1 @@ # Battleship - -## Description - -Write a program that plays the game of Battleship. The user can act as Player 1, and the computer can act as Player 2. - -## Objectives - -### Learning Objectives - -After completing this assignment, you should... - -* Understand the basics of control flow, variables, and methods in Ruby. -* Understand the basics of Object Oriented Programming. -* Understand the basic use cases of Git for single-developer projects. -* Understand the purpose of test suites and how they can assist in development. -* Understand how frustrating it would have been to try to check and debug this assignment without written tests! - -### Performance Objectives - -After completing this assignment, you should be able to effectively... - -* Accomplish all objectives from earlier in the week. -* Build a game-playing application that asks the user for input and provides output to the user. -* Create a computer player that can act like a human (albeit not necessarily an intelligent one). -* Write an program that can satisfy a test suite. - -## Details - -### Deliverables - -* **A Repository.** Fork this repository to your own github account. -* **A README.** Wipe out this README and write your own. It should tell readers how to play your version of the game. -* **Ruby Files.** You'll need a lot of these, and you'll be creating them from scratch. Again, you should have one per class, plus at least one other to be executed from the command line to run the game. -* **A Playable Game.** When I clone your repository, I should be able to run your program and play through an entire game of Battleship. I should be able to win and to lose. - -When you are finished, create a pull request. - -### Requirements - -The major requirement of this project is for the TEST SUITE TO PASS. You are coding to the tests, and ideally, you're making them pass one at a time. As discussed in class, I would suggest making the first test pass USING THE SIMPLEST MEANS POSSIBLE. Then move on to the second test, the third test and so on. You should commit after each test passes. - -Just to be clear, your computer player does not have to be smart. It just has to play until the game is finished. - -Here's the odd thing. READ THIS. If you're ever going to call `gets.chomp` in your code to prompt the user for his/her input, don't. Put the following code at the top of any file that needs to prompt the user: - -``` -def get_user_input - gets.chomp -end -``` - -This goes BEFORE you start defining your class. I know that looks stupid, and I apologize for it, but the test suite will only run if you ALWAYS ask for user input by calling `get_user_input` rather than `gets.chomp`. Sorry again. - -## Normal Mode - -It's finally time. Your task this weekend, whether or not you choose to accept it, is to write a program that plays the game of Battleship. The user can act as Player 1, and the computer can act as Player 2. However, as you work through the assignment, you'll notice that you're also building it so that two humans could play each other. - -This assignment will bring together two of the assignments from earlier in the week: your written set of computer-friendly instructions from Day 1, and the draft code of your objects from Day 3. You WON'T be using that draft code as a starting point, because it's likely that the classes you designed won't match what the test suite is expecting. You'll be writing code to make a test suite pass, so it is going to dictate a lot of what you put together. - -Your program should allow the user to play a full game of Battleship against the computer. The rules of the game are given in the [Hasbro instructions](http://www.hasbro.com/common/instruct/battleship.pdf). - -## Hard Mode - -Modify your computer player so that it makes intelligent moves. In other words, Normal Mode is satisfied if the computer fires randomly. Hard mode required the computer to fire with some meaning. It has to have a chance of winning. - -In addition to the above, add ten more (meaningful) tests to the test suite. Get them to pass! - -## Nightmare Mode - -In addition to the above, modify your existing code to ask the user which type of game he/she would like to play: regular or SALVO. Allow the user to select and play either game. diff --git a/battleship.rb b/battleship.rb new file mode 100644 index 0000000..4ffbbbf --- /dev/null +++ b/battleship.rb @@ -0,0 +1,6 @@ +require './ship.rb' +require './board.rb' +require './player.rb' +require './human_player.rb' +require './computer_player.rb' +require './game' diff --git a/board.rb b/board.rb new file mode 100644 index 0000000..f11191f --- /dev/null +++ b/board.rb @@ -0,0 +1,117 @@ +require './ship.rb' + +class Board + + + + def initialize + @ships = [] + @place + @hits = [] + @misses = [] + end + + def misses + @misses + end + + def has_ship_on?(x, y) + covered = false + @ships.each do |ship| + if ship.covers?(x, y) + covered = true + end + end + return covered + end + + def place_ship(ship, x, y, across) + ship.place(x, y, across) + @ships.each do |other_ships| + if ship.overlaps_with?(other_ships) + return false + end + end + @ships << ship + end + + def fire_at(x, y) + if @ships.empty? || @hits.include?([x, y]) + return false + else + @ships.each do |ship| + if ship.fire_at(x, y) + @hits << [x, y] + return true + else + return false + end + end + end + end + + def sunk? + if @ships.empty? + return false + else + @ships.each do |ship| + if ship.sunk? + @ships.delete(ship) + end + end + if @ships.empty? + return true + else + return false + end + end + end + + def display_header + puts " 1 2 3 4 5 6 7 8 9 10" + puts " -----------------------------------------" + end + + def display_bottom + puts " -----------------------------------------" + end + + def display + letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] + #covered = false + output = "" + self.display_header + (1..10).each do |r| + output = "#{letters[r-1]} |" + (1..10).each do |c| + if @hits.include?([c, r]) + output << " X |" + elsif self.has_ship_on?(c, r) + output << " O |" + #covered = true + else + output << " |" + end + # output += "|" + end + puts output + + end + self.display_bottom + end + + def x_of(coordinate) + coordinate.slice(1..coordinate.length).to_i + end + + def y_of(coordinate) + letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I"] + y = coordinate[0] + letters.each_with_index do |letter, index| + if letter == y + return index + 1 + end + end + end + +end diff --git a/computer_player.rb b/computer_player.rb new file mode 100644 index 0000000..47028a8 --- /dev/null +++ b/computer_player.rb @@ -0,0 +1,31 @@ +require './player' + +class ComputerPlayer < Player + def initialize + @name = "HAL 9000" + @ships = [] + end + + def name + @name + end + + def create_ships(lengths) + if @ships.empty? + lengths.each do |length| + @ships << Ship.new(length) + end + end + end + + def place_ships(lengths) + self.create_ships(lengths) + puts "#{@name} has placed his ships.\n" + return true + end + + + + + +end diff --git a/game.rb b/game.rb new file mode 100644 index 0000000..60da721 --- /dev/null +++ b/game.rb @@ -0,0 +1,25 @@ +class Game + + def initialize(human, computer, default_ships = [2, 3, 3, 4, 5]) + @human = human + @computer = computer + @default_ships = default_ships + end + + def welcome + puts"Welcome, #{@human.name} and #{@computer.name}!" + puts "It's time to play Battleship." + end + + def place_ships + @human.place_ships(@default_ships) + @computer.place_ships(@default_ships) + end + + def take_turn + end + + + + +end diff --git a/human_player.rb b/human_player.rb new file mode 100644 index 0000000..a4f27b7 --- /dev/null +++ b/human_player.rb @@ -0,0 +1,66 @@ +require './player' +require './board' + +def get_user_input + gets.chomp +end + +class HumanPlayer < Player + def initialize(name = "Dave") + @name = name + @ships = [] + @board = Board.new + @shots_missed = [] + @shots_hit = [] + end + + def shots_missed + @shots_mised + end + + def shots_hit + @shots_hit + end + + def name + @name + end + + def board + @board + end + + def place_ships(lengths) + self.create_ships(lengths) + @ships.each do |length| + if length.placed == false + puts "#{name}, where would you like to place a ship of length #{length.length}?" + coordinates = get_user_input + column = board.x_of(coordinates) + row = board.y_of(coordinates) + puts "Across or Down?" + position = get_user_input + if position == "Down" + position = false + else + position = true + end + board.place_ship(length, column, row, position) + coordinates = "" + position = "" + end + end + end + + def create_ships(lengths) + if @ships.empty? + lengths.each do |length| + @ships << Ship.new(length) + end + end + end + + + + +end diff --git a/player.rb b/player.rb new file mode 100644 index 0000000..9ba1b4d --- /dev/null +++ b/player.rb @@ -0,0 +1,22 @@ +require './board' + +class Player + + + def board + Board.new + end + + def ships + @ships + end + + def turn + puts "Where would you like to fire #{@name}" + coordinates = get_user_input + x = self.board.x_of(coordinates) + y = self.board.y_of(coordinates) + return [x, y] + end + +end diff --git a/ship.rb b/ship.rb new file mode 100644 index 0000000..563b1e8 --- /dev/null +++ b/ship.rb @@ -0,0 +1,69 @@ +class Ship + + def initialize(length) + @length = length + @coordinates = [] + @placed = false + @hit_points = @length + end + + def length + @length + end + + def placed + @placed + end + + + def coordinates + @coordinates + end + + def place(column, row, across) + if @placed == false + @placed = true + if across == true + @length.times do |i| + @coordinates << [column + i, row] + end + else + @length.times do |i| + @coordinates << [column, row + i] + end + end + end + end + + def covers?(column, row) + if @coordinates.include? [column, row] + return true + else + return false + end + end + + def overlaps_with?(other_ship) + if (@coordinates & other_ship.coordinates).empty? + return false + else + puts "Unfortunately, that ship overlaps with one of your other ships. Please try again." + return true + end + end + + def fire_at(x, y) + if @coordinates.include?([x, y]) + @hit_points -= 1 + return true + end + end + + def sunk? + if @hit_points == 0 + return true + end + end + + +end diff --git a/test.rb b/test.rb new file mode 100644 index 0000000..f43a768 --- /dev/null +++ b/test.rb @@ -0,0 +1,1300 @@ +# def display +# a = "A " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts " 1 2 3 4 5 6 7 8 9 10" +# puts " -----------------------------------------" +# puts a + "|" +# +# a = "B " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# puts " 1 2 3 4 5 6 7 8 9 10" +# puts " -----------------------------------------" +# puts a + "|" +# +# (1..10) +# +# +# +# +# +# letters = ["A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I "] +# covered = false +# for (1..10).each do |r| +# output = "#{letters[r-1]} " +# (1..10).each do |c| +# if ship.covers?([r, c]) +# output << "| O " +# covered = true +# end +# end +# if covered == false +# a <<"| " +# end +# +# @ships.each do |ship| +# if ship.covers?(1, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# +# +# +# +# +# +# +# +# +# +# a = "A " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 1) +# a << "| O " +# covered = true +# elsif @hits.include?([1, 1]) +# a << "| X " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 1) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts " 1 2 3 4 5 6 7 8 9 10" +# puts " -----------------------------------------" +# puts a + "|" +# +# a = "B " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 2) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "C " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 3) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "D " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if @hits.include?([7, 4]) +# a << "| X " +# covered = true +# elsif ship.covers?(7, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 4) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "E " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 5) +# a << "| O " +# covered = true +# elsif @hits.include?([7, 5]) +# a << "| X " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 5) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "F " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 6) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "G " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 7) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "H " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 8) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "I " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 9) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# +# puts a + "|" +# +# a = "J " +# covered = false +# @ships.each do |ship| +# if ship.covers?(1, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(2, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(3, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(4, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(5, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(6, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(7, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(8, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(9, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end +# covered = false +# @ships.each do |ship| +# if ship.covers?(10, 10) +# a << "| O " +# covered = true +# end +# end +# if covered == false +# a << "| " +# end