我在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)
答案 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语法真的很生疏,但概念应该仍然适用)
希望有所帮助!