基本python战舰游戏需要指导

基本python战舰游戏需要指导,python,pyscripter,Python,Pyscripter,我正在编写一个基本战舰游戏的脚本。我是python新手,希望获得一些关于我的错误方向的指导。我想所有的代码都在那里,需要任何帮助都将非常感谢谢谢 def main(): from random import randint #initializing board board = [] for x in range(5): board.append(["o"] * 5) def print_board(board): for row in board: print(

我正在编写一个基本战舰游戏的脚本。我是python新手,希望获得一些关于我的错误方向的指导。我想所有的代码都在那里,需要任何帮助都将非常感谢谢谢

 def main():

   from random import randint

#initializing board

board = []

for x in range(5):
    board.append(["o"] * 5)

def print_board(board):
 for row in board:
  print( " ".join(row))

#starting the game and printing the board

print ("Let's play Battleship!")
print_board(board)

#defining where the ship is
def random_row(board):
  return  randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)

#asking the user for a guess

for turn in range(4):
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))

    # if the user's right, the game ends
    if guess_row == ship_row and guess_col == ship_col:
        print ("Congratulations! You sunk my battleship!")
        break
    else:
        #warning if the guess is out of the board
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            print ("Oops, that's not even in the ocean.")

        #warning if the guess was already made

        elif(board[guess_row][guess_col] == "X"):
            print ("You guessed that one already.")

        #if the guess is wrong, mark the point with an X and start again

        else:
            print ("You missed my battleship!")
            board[guess_row][guess_col] = "X"

        # Print turn and board again here
        print ( "Turn " + str(turn+1) + " out of 4.")
        print_board(board)

#if the user have made 4 tries, it's game over
if turn >= 10:
    print ("Game Over")



if __name__ == '__main__':
    main()
def main():
从随机导入randint
#初始化板
董事会=[]
对于范围(5)内的x:
董事会追加([“o”]*5)
def打印板(板):
对于板中的行:
打印(“.”连接(行))
#开始游戏并打印棋盘
打印(“让我们玩战舰吧!”)
印刷电路板
#确定船的位置
def随机_行(板):
返回randint(0,len(板)-1)
def随机_柱(板):
返回randint(0,len(板[0])-1)
船行=随机船行(板)
船列=随机列(船列)
#询问用户猜测
对于交车范围(4):
猜测行=int(原始输入(“猜测行:”)
guess\u col=int(原始输入(“guess col:”)
#如果用户正确,游戏结束
如果guess\u row==ship\u row和guess\u col==ship\u col:
打印(“祝贺你!你击沉了我的战舰!”)
打破
其他:
#如果猜测不正确,则发出警告
如果(猜测行<0或猜测行>4)或(猜测列<0或猜测列>4):
打印(“哦,那甚至不在海里。”)
#如果已经猜到了,则发出警告
elif(董事会[猜测行][猜测列]=“X”):
打印(“你已经猜到了。”)
#如果猜错了,用X标记该点,然后重新开始
其他:
打印(“你错过了我的战舰!”)
棋盘[猜一排][猜一列]=“X”
#在这里再次打印回合和棋盘
打印(“旋转”+str(旋转+1)+“共4次”)
印刷电路板
#如果用户尝试了4次,游戏就结束了
如果圈数>=10:
打印(“游戏结束”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

首先,您的代码不会像这样运行,因为缩进被破坏了。在Python中,缩进不仅仅是使程序更可读的好样式;它告诉计算机程序的结构。在修复了缩进后,我尝试了你的程序,它按预期工作。不过,“游戏结束”消息不会打印,因为在打印时,变量
turn
包含最后分配给它的值
3
,而不是
10

关于代码的一些随机想法:

  • 最好将所有导入语句放在文件的开头,除非您有理由这样做
  • 变量
    board
    在定义
    random\u row
    random\u col
    的范围内可见,因此不需要将其作为参数传递
  • 电路板尺寸和匝数硬编码两次;在后一种情况下,您(可能是错误地)使用了不同的数字。您可以通过为这些值定义常量(具有大写名称的变量,不能更改)并在以后使用它们来提高代码的可读性:

    BOARD_WIDTH = 5
    BOARD_HEIGHT = 5
    MAX_TURNS = 4
    
    ...
    
    def random_col():
        return random.randint(0, BOARD_WIDTH - 1)
    
  • break
    之后,您不需要
    else
    ,因为循环仍然存在

  • 您不需要带
    elif
    的括号

您有什么问题?你发布的代码很奇怪,main()函数只有一行,它所做的就是导入randint。问题是什么?嗨,主要是我哪里出了问题!它弹出一个错误,说randint没有定义,我应该在哪里定义它?