Python自编程序的游戏在特定点不工作

2024-09-30 06:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,堆栈溢出团队, 我的代码中有一个(可能)小错误,但我仍然没有找到它。代码如下:

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

如你所见,我想编一个小棋盘游戏。 我的问题是,游戏中的令牌没有进入底线,但我得到的错误消息是列表(即棋盘)超出范围。我真的不知道如何正确地解决这个错误。你知道吗


Tags: boardtokenifrandomdiceckprintdu
1条回答
网友
1楼 · 发布于 2024-09-30 06:31:51

通过在创建board之后添加以下行,可以解释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

相关问题 更多 >

    热门问题