Hello Stack溢出团队, 在我的代码中有一个(可能)轻微的错误,但我仍然没有找到它。代码如下:
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 Brettspiel\n")
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ürfelt\n")
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
正如你所看到的,我想编写一个小棋盘游戏。 我的问题是,游戏中的令牌没有进入底线,而是我收到错误消息,列表(即板)超出范围。我真的不知道如何妥善解决这个错误。
答案 0 :(得分:0)
通过在创建电路板后添加以下行,它将解释为什么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