Okay I'm not sure how to develop another board with hidden spaces for the computers ships per-se, and have it test for hits. Again I'm not even sure how I'm going to test for hits on the board I have now. Make note: The player turn function will be migrated to the computer board since you wouldn't be attacking your own ships. Here is the code. It may not be the best formatting (as in with Methods and objects and such) but I can polish it up a little later. Also would there be another way to make placing the ships all in one function? Or with the way I have it, will it have to stay that way?
class battleship(object):def __init__(self):self.board = [["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ["O"] * 10, ]self.printboard()self.placeAircraftCarrier()self.placeBattleShip()self.placeSubmarine()self.placeDestroyer()self.placePatrolBoat()for i in range(100):self.playerTurn()def printboard(self):print "Game Board\n"print "1","2","3","4","5","6","7","8","9","10"for row in self.board:print "|".join(row)
def placeBattleShip(self):while True:self.vOrHPlacement = input("Would you like to place the Battleship (1) Vertically or (2)Horizontally?:")if self.vOrHPlacement == 1 or self.vOrHPlacement == 2:breakelse:print "You must press 1 or 2."while True:self.battleshipRow = input("With the head as the starting place what row would you like to place the Battleship (Takes 4 Spaces)?:")self.battleshipCol = input("What column would you like to start the BattleShip at?:")if self.vOrHPlacement == 1:if self.battleshipRow > 7 or self.battleshipRow <= 0:print "\nIf placing vertically you can only choose 1-7 for the row."elif self.battleshipCol <= 0 or self.battleshipCol > 10:print "You must choose 1 - 10 for a column."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 2self.battleshipCol -= 1for i in range(4):self.board[self.battleshipRow + 1][self.battleshipCol] = "X"self.battleshipRow += 1breakelif self.vOrHPlacement == 2:if self.battleshipCol > 7 or self.battleshipCol <= 0:print "\nIf placing horizontally you can only choose 1-7 for a column."elif self.battleshipRow <= 0 or self.battleshipRow > 10:print "\n You must choose 1 - 10 as a row choice."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 1self.battleshipCol -= 2for i in range(4):self.board[self.battleshipRow][self.battleshipCol + 1] = "X"self.battleshipCol += 1breakself.printboard()
def placeAircraftCarrier(self):while True:self.vOrHPlacement = input("Would you like to place the Aircraft Carrier (1) Vertically or (2)Horizontally?:")if self.vOrHPlacement == 1 or self.vOrHPlacement == 2:breakelse:print "You must press 1 or 2."while True:self.battleshipRow = input("With the head as the starting place what row would you like to place the Aircraft Carrier (Takes 5 Spaces)?:")self.battleshipCol = input("What column would you like to start the Aircraft Carrier at?:")if self.vOrHPlacement == 1:if self.battleshipRow > 6 or self.battleshipRow <= 0:print "\nIf placing vertically you can only choose 1-6 for the row."elif self.battleshipCol <= 0 or self.battleshipCol > 10:print "You must choose 1 - 10 for a column."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 2self.battleshipCol -= 1for i in range(5):self.board[self.battleshipRow + 1][self.battleshipCol] = "X"self.battleshipRow += 1breakelif self.vOrHPlacement == 2:if self.battleshipCol > 6 or self.battleshipCol <= 0:print "\nIf placing horizontally you can only choose 1-6 for a column."elif self.battleshipRow <= 0 or self.battleshipRow > 10:print "\n You must choose 1 - 10 as a row choice."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 1self.battleshipCol -= 2for i in range(5):self.board[self.battleshipRow][self.battleshipCol + 1] = "X"self.battleshipCol += 1breakself.printboard()
def placeSubmarine(self):while True:self.vOrHPlacement = input("Would you like to place the Submarine (1) Vertically or (2)Horizontally?:")if self.vOrHPlacement == 1 or self.vOrHPlacement == 2:breakelse:print "You must press 1 or 2."while True:self.battleshipRow = input("With the head as the starting place what row would you like to place the Submarine (Takes 3 Spaces)?:")self.battleshipCol = input("What column would you like to start the Submarine at?:")if self.vOrHPlacement == 1:if self.battleshipRow > 8 or self.battleshipRow <= 0:print "\nIf placing vertically you can only choose 1-8 for the row."elif self.battleshipCol <= 0 or self.battleshipCol > 10:print "You must choose 1 - 10 for a column."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 2self.battleshipCol -= 1for i in range(3):self.board[self.battleshipRow + 1][self.battleshipCol] = "X"self.battleshipRow += 1breakelif self.vOrHPlacement == 2:if self.battleshipCol > 8 or self.battleshipCol <= 0:print "\nIf placing horizontally you can only choose 1-8 for a column."elif self.battleshipRow <= 0 or self.battleshipRow > 10:print "\n You must choose 1 - 10 as a row choice."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 1self.battleshipCol -= 2for i in range(3):self.board[self.battleshipRow][self.battleshipCol + 1] = "X"self.battleshipCol += 1breakself.printboard()
def placeDestroyer(self):while True:self.vOrHPlacement = input("Would you like to place the Destroyer (1) Vertically or (2)Horizontally?:")if self.vOrHPlacement == 1 or self.vOrHPlacement == 2:breakelse:print "You must press 1 or 2."while True:self.battleshipRow = input("With the head as the starting place what row would you like to place the Destroyer (Takes 3 Spaces)?:")self.battleshipCol = input("What column would you like to start the Destroyer at?:")if self.vOrHPlacement == 1:if self.battleshipRow > 8 or self.battleshipRow <= 0:print "\nIf placing vertically you can only choose 1-8 for the row."elif self.battleshipCol <= 0 or self.battleshipCol > 10:print "You must choose 1 - 10 for a column."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 2self.battleshipCol -= 1for i in range(3):self.board[self.battleshipRow + 1][self.battleshipCol] = "X"self.battleshipRow += 1breakelif self.vOrHPlacement == 2:if self.battleshipCol > 8 or self.battleshipCol <= 0:print "\nIf placing horizontally you can only choose 1-8 for a column."elif self.battleshipRow <= 0 or self.battleshipRow > 10:print "\n You must choose 1 - 10 as a row choice."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 1self.battleshipCol -= 2for i in range(3):self.board[self.battleshipRow][self.battleshipCol + 1] = "X"self.battleshipCol += 1breakself.printboard()
def placePatrolBoat(self):while True:self.vOrHPlacement = input("Would you like to place the Patrol Boat (1) Vertically or (2)Horizontally?:")if self.vOrHPlacement == 1 or self.vOrHPlacement == 2:breakelse:print "You must press 1 or 2."while True:self.battleshipRow = input("With the head as the starting place what row would you like to place the Patrol Boat (Takes 2 Spaces)?:")self.battleshipCol = input("What column would you like to start the Patrol Boat at?:")if self.vOrHPlacement == 1:if self.battleshipRow > 9 or self.battleshipRow <= 0:print "\nIf placing vertically you can only choose 1-9 for the row."elif self.battleshipCol <= 0 or self.battleshipCol > 10:print "You must choose 1 - 10 for a column."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 2self.battleshipCol -= 1for i in range(2):self.board[self.battleshipRow + 1][self.battleshipCol] = "X"self.battleshipRow += 1breakelif self.vOrHPlacement == 2:if self.battleshipCol > 9 or self.battleshipCol <= 0:print "\nIf placing horizontally you can only choose 1-9 for a column."elif self.battleshipRow <= 0 or self.battleshipRow > 10:print "\n You must choose 1 - 10 as a row choice."elif self.board[self.battleshipRow - 1][self.battleshipCol - 1] == "X":print "There is already a ship there."else:self.battleshipRow -= 1self.battleshipCol -= 2for i in range(2):self.board[self.battleshipRow][self.battleshipCol + 1] = "X"self.battleshipCol += 1breakself.printboard()
def playerTurn(self):while True:self.row = input("What row coordinate would you like to hit?:")self.column = input("What column coordinate would you like to hit?")if self.row > 10 or self.row < 0:print "You must pick a row coordinate between 1 and 10."elif self.column > 10 or self.column < 0:print "You must pick a column coordinate between 1 and 10."elif self.board[self.row - 1][self.column - 1] == "*":print "You have already hit there."else:self.board[self.row - 1][self.column - 1] = "*"breakself.printboard()b = battleship()