如何让这艘战舰游戏在价值方面更加用户友好?

时间:2016-04-13 20:39:10

标签: python

我在Python中设置了战舰游戏,但是我设置的网格范围介于0到5之间。这意味着战舰的第一行和第二列将是(0,0)我不想要这个,因为任何搁浅的用户都可能从1开始计算,因此他们将(1,1)或(1,2)值0作为他们想要输入的值。如何让我的程序反映出来,其中1,1是开始列而行不是第2列。由于用户只能输入0到4之间的值,因此5表示为无效值,并表示它不在网格上。

所以唯一可能的组合是这些:

行:0,1,2,3,4, 列:0,1,2,3,4

我希望它是:

行:1,2,3,4,5 第1,2,3,4,5栏

这是我的代码:

import random

Battleship_Board = []

for x in range(0,5):
  Battleship_Board.append(["O"] * 5)


def print_Battleship_Board(Battleship_Board):
  for row in Battleship_Board:
    print (" ".join(row))

print ("Let's play a game of Battleships!")
print_Battleship_Board(Battleship_Board)


def Random_Battleship_Board_Row(Battleship_Board):
return random.randint(0, len(Battleship_Board)-1)

def Random_Battleship_Board_Column(Battleship_Board):
return random.randint(0, len(Battleship_Board[0])-1)

Battleship_Board_Row = Random_Battleship_Board_Row(Battleship_Board)
Battleship_Board_Column = Random_Battleship_Board_Column(Battleship_Board)


print (Battleship_Board_Row) 
print (Battleship_Board_Column) 

for turn in range(5):

Guess_Battleship_Board_Row = int(input("Guess the X coordinate:"))
Guess_Battleship_Board_Column = int(input("Guess the Y coordinate:"))


if Guess_Battleship_Board_Row == Battleship_Board_Row and Guess_Battleship_Board_Column == Battleship_Board_Column:
    print ("You sunk the battleship!")
    print ("My ship was here: [" + str(Battleship_Board_Row) + "][" + str(Battleship_Board_Column) + "]")
    break

else:

        if turn + 1 == 5:
            Battleship_Board[Guess_Battleship_Board_Row][Guess_Battleship_Board_Column] = "X"
            print_Battleship_Board(Battleship_Board)
            print ("Game Over")
            print ("My ship was here: [" + str(Battleship_Board_Row) + "][" + str(Battleship_Board_Column) + "]")

        if (Guess_Battleship_Board_Row < 0 or Guess_Battleship_Board_Row > 4) or (Guess_Battleship_Board_Column < 0 or Guess_Battleship_Board_Column > 4):
            print ("The inserted value is not on the grid.")
        elif(Battleship_Board[Guess_Battleship_Board_Row ][Guess_Battleship_Board_Column] == "X"):
            print ("You already inserted this combination")
        else:
            print ("You missed my battleship")
            Battleship_Board[Guess_Battleship_Board_Row][Guess_Battleship_Board_Column] = "X"
        print ("Number of turns:", turn + 1,"out of 5")
        print_Battleship_Board(Battleship_Board)

3 个答案:

答案 0 :(得分:4)

您可以从用户的猜测中减去一个,并添加一个注释,表示这些数字不是从零开始的。请记住检查有效输入!

Guess_Battleship_Board_Row = int(input("Guess the X coordinate:")) - 1
Guess_Battleship_Board_Column = int(input("Guess the Y coordinate:")) - 1

答案 1 :(得分:1)

让用户输入1到5范围内的行和列,但在放置战舰等之前减去1。

例如,如果他们插入&#39; 5&#39;,减1然后放船等。

Guess_Battleship_Board_Row = int(输入(&#34;猜X坐标:&#34;)) - 1 Guess_Battleship_Board_Column = int(输入(&#34;猜Y坐标:&#34;)) - 1

答案 2 :(得分:0)

看起来像是一个很棒的项目你来到这里!

有很多方法可以解决这个问题,所以我想我只会拍摄一些。

好的,所以所有数组都从“0”开始,但是(0,0)有点看起来很难看,我同意。简单的方法就是创建一个6,6阵列,而不是使用0,0部分。

另一种方法是在显示数组索引之前为数组索引添加+1,或者在访问数组索引之前为-1。

因此,当用户键入4,5时,您所做的只是(arrayA [userinput - 1],arrayB [userinput - 1])有效地存储在3,4,并且用户永远不会知道。

同样可能有趣的挑战是使用字母数字字母代替行或列。(例如,3,C)

使用switch语句或if / esle语句。

例如

if  userSelection == 'a' or userSelection == 'A'
    arrayA[0] = true

(抱歉,我的python语法真的很生疏,但概念应该仍然适用)

希望有所帮助!