Python自编程游戏在特定点不起作用



Hello Stack Overflow Team, 我的代码中有一个(可能(轻微的错误,但我仍然没有找到它。代码如下:

import random
from random import randint
board = []
print("n")
board.append(["S", "a " * 10])
for x in range(2):
board.append(["a", "+" * 17, "a"])
board.append(["a", "+" * 17, "E"])
for x in range(3):
board.append(["a", "+" * 17, "a"])
board.append(["E", "+" * 17, "a"])
for x in range(4):
board.append(["a", "+" * 17, "a"])
board.append(["a", "+" * 17, "E"])
board.append(["a " * 11])

def print_board(board):
for row in board:
print(" ".join(row))
print("                                  Auf geht's mit 'ner kleinen Runde: Das Brettspieln")
print("Deine Figur startet bei "S". Jede Runde würfelst du 1- Mal. Die Anzahl der erwürfelten Augen bestimmen die "
"Schrittweite deiner Figur. Drücke "Enter" Taste um zu würfeln.")
print("n")
token = input("Gib ein Zeichen ein, welches deine Spielfigur werden soll :")
x = 0
y = 0
print_board(board)
randeves = ["Du hast Pech und musst leider 3 Felder zurück", "Du hast Glück und darfst 4 Felder nach vorne", "Deine Position bleibt unverändert"]

while True:
print("n")
wurf = input("Würfle: ")
dice = randint(1, 6)
print("Du hast eine " + str(dice) + " gewürfeltn")
if x + dice < 13:
x += dice
orc = board[x][y]
board[x][y] = token
print_board(board)
board[x][y] = orc
if orc == "a":
print("")
elif orc == "E":
print("n")
print(randeves[random.randrange(0, len(randeves))])
if randeves == "Du hast Pech und musst leider 3 Felder zurück":
x -= 3
elif randeves == "Du hast Glück und darfst 4 Felder nach vorne":
x += 4
elif randeves == "Deine Position bleibt unverändert":
print("")
elif x + dice > 13:
ex = (x + dice) - 13
y += ex
x = 13
orc = board[x][y]
board[x][y] = token
print_board(board)
board[x][y] = orc
if orc == "a":
print("")
elif orc == "E":
print("n")
print(randeves[random.randrange(0, len(randeves))])
if randeves == "Du hast Pech und musst leider 3 Felder zurück":
board[x - 3][y] = token
elif randeves == "Du hast Glück und darfst 4 Felder nach vorne":
board[x + 4][y] = token
elif randeves == "Deine Position bleibt unverändert":
print("")
elif x + dice == 13:
break

如您所见,我想编写一个小棋盘游戏。 我的问题是游戏中的令牌没有进入底线,而是收到错误消息,指出列表(即棋盘(超出范围。我真的不知道如何正确解决这个故障。

通过在创建板后添加以下行,它将解释为什么 y 索引不能正确:

print('length board :', len(board))
for l in board:
print(len(l), l)
# length board : 14
# 2 ['S', 'x07 x07 x07 x07 x07 x07 x07 x07 x07 x07 ']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'E']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['E', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'x07']
# 3 ['x07', '+++++++++++++++++', 'E']
# 1 ['x07 x07 x07 x07 x07 x07 x07 x07 x07 x07 x07 ']

您声明板的方式,每行都是包含 1、2 或 3 个元素的列表。

当 y = 0 时,您没有问题,但是当您这样做时:

y += ex
orc = board[x][y]

您不能适合您创建的列表。

我没有最终答案,您将不得不处理显示结果,这些行可能会对您有所帮助:

board.append(["S"]+ ["a "] * 10)
for x in range(2):
board.append(["a"] + ["+"] * 17 + ["a"])
#[...]
board.append(["a "]* 11)

对于randeves的东西,你可以这样做:

randeves = [("Du hast Pech und musst leider 3 Felder zurück",-3),
("Du hast Glück und darfst 4 Felder nach vorne",4),
("Deine Position bleibt unverändert",0)]
rand = random.randrange(0, len(randeves))
print(randeves[rand][0])
x += randeves[rand][1]

我希望这一次有德国奖金:p

最新更新