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

时间:2017-07-22 20:10:43

标签: python list

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

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

1 个答案:

答案 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