Python中的简单战舰游戏实现

时间:2013-11-24 19:36:21

标签: python class python-2.7 implementation 2d-games

好吧我不知道如何开发另一块带有隐藏空间的电路板本身的电脑,并让它测试点击率。我甚至不确定我将如何测试我现在拥有的棋盘上的命中率。注意:玩家转弯功能将被移植到电脑板,因为你不会攻击自己的船只。这是代码。它可能不是最好的格式(如使用方法和对象等),但我可以稍后修改它。还有另一种方法可以将船只放在一个功能中吗?或者按照我的方式,它是否必须保持这种状态?

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:
            break
        else:
            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 -= 2
                self.battleshipCol -= 1
                for i in range(4):
                    self.board[self.battleshipRow + 1][self.battleshipCol] = "X"
                    self.battleshipRow += 1
                break
        elif 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 -= 1
                self.battleshipCol -= 2
                for i in range(4):
                    self.board[self.battleshipRow][self.battleshipCol + 1] = "X"
                    self.battleshipCol += 1
                break
    self.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:
            break
        else:
            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 -= 2
                self.battleshipCol -= 1
                for i in range(5):
                    self.board[self.battleshipRow + 1][self.battleshipCol] = "X"
                    self.battleshipRow += 1
                break
        elif 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 -= 1
                self.battleshipCol -= 2
                for i in range(5):
                    self.board[self.battleshipRow][self.battleshipCol + 1] = "X"
                    self.battleshipCol += 1
                break
    self.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:
            break
        else:
            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 -= 2
                self.battleshipCol -= 1
                for i in range(3):
                    self.board[self.battleshipRow + 1][self.battleshipCol] = "X"
                    self.battleshipRow += 1
                break
        elif 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 -= 1
                self.battleshipCol -= 2
                for i in range(3):
                    self.board[self.battleshipRow][self.battleshipCol + 1] = "X"
                    self.battleshipCol += 1
                break
    self.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:
            break
        else:
            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 -= 2
                self.battleshipCol -= 1
                for i in range(3):
                    self.board[self.battleshipRow + 1][self.battleshipCol] = "X"
                    self.battleshipRow += 1
                break
        elif 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 -= 1
                self.battleshipCol -= 2
                for i in range(3):
                    self.board[self.battleshipRow][self.battleshipCol + 1] = "X"
                    self.battleshipCol += 1
                break
    self.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:
            break
        else:
            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 -= 2
                self.battleshipCol -= 1
                for i in range(2):
                    self.board[self.battleshipRow + 1][self.battleshipCol] = "X"
                    self.battleshipRow += 1
                break
        elif 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 -= 1
                self.battleshipCol -= 2
                for i in range(2):
                    self.board[self.battleshipRow][self.battleshipCol + 1] = "X"
                    self.battleshipCol += 1
                break
    self.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] = "*"
            break
    self.printboard()

b = battleship()

1 个答案:

答案 0 :(得分:0)

您需要大量的代码组织。我建议保持Classes不受任何循环或输入的影响!从用户输入内容&amp;然后将其添加到类实例,而不是相反。整理你的代码和添加文档,以便其他人可以帮助您。

你可以做一些这样的事情

class BattleShip:
    """ Ship object container"""

    def __init__(self, position_x, position_y, size):
        """ Necessary variables for the ship go here """
        self.position_x = position_x
        self.position_y = position_y
        self.size = size

    def contains(self, position_x, position_y):
        """ Returns true if supplied point lies inside this ship """
        # code

    def destroy(self, position_x, position_y):
        """ Destroys the ship's point supplied if it contains it """
        assert self.contains(position_x, position_y)
        # Now update the gameboard
        # code

    def isCompletelyDestroyed(self):
        """ Returns True if ship is completely destoryed else False """
        # code


class GameBoard:
    """ The container for the ships """
    def __init__(self, size):
        """Initialize clean GameBoard depending on size, etc """
        self.occupied = "+" # representation for ships
        self.destroyed = 'x' # representation for destroyed area
        self.clear = '-' # representation for clear water

    def printBoard(self):
        """ Print the current gameboard state """

    def update(self, ship):
        """ Updates the gameboard according to updated ship """


# Now do the mainloop
while game_not_over:
    # run game