我怎样才能使游戏中的每个"gold"都引用 Python 迷宫游戏中的不同问题?



我正在使用python 3,我非常非常没有经验,所以请尽可能简单地解释。

我有一个Python迷宫游戏,这也是一种语言词汇游戏。目前,除了一件事外,一切都在起作用。当玩家在游戏中滚动"黄金"并弹出问题时,我希望每个"黄金"与词典不同。我的字典如下:

# Create dictionary.
dic = {'spanish': [
    {'question': 'What is morado/a?', 'answer': 'purple'},
    {'question': 'What is blanco/a?', 'answer': 'white'},
    {'question': 'What is el durazno?', 'answer': 'peach'},
    {'question': 'What is la granada?', 'answer': 'pomegranate'},
    {'question': 'What is la galleta?', 'answer': 'cookie'},
    {'question': 'What is el bistec?', 'answer': 'steak'},
    {'question': 'What is el relámpago?', 'answer': 'lightning'},
    {'question': 'What is el amanecer?', 'answer': 'sunrise'}
],
'french': [
    {'question': 'What is le arc en ciel?', 'answer': 'rainbow'},
    {'question': 'What is la glace?', 'answer': 'ice'},
    {'question': 'What is la cascade?', 'answer': 'waterfall'},
    {'question': 'What is le marais?', 'answer': 'swamp'},
    {'question': 'What is le feu?', 'answer': 'fire'},
    {'question': 'What is la cuillère?', 'answer': 'spoon'},
    {'question': 'What is la bouche?', 'answer': 'mouth'},
    {'question': 'What is le dos?', 'answer': 'back'},
    {'question': 'What is le visage?', 'answer': 'face'},
    {'question': 'What is le chat?', 'answer': 'cat'}
],
'japanese': [
    {'question': 'What is ペンギン?', 'answer': 'penguin'},
    {'question': 'What is 甲虫?', 'answer': 'beetle'},
    {'question': 'What is 蝶々?', 'answer': 'butterfly'},
    {'question': 'What is お兄さん?', 'answer': 'older brother'},
    {'question': 'What is ふうふ?', 'answer': 'married couple'},
    {'question': 'What is 今日は?', 'answer': 'hello'},
    {'question': 'What is 元気です。?', 'answer': 'I am good.'},
    {'question': 'What is わくわくしています。?', 'answer': 'I am excited.'},
    {'question': 'What is 恥ずかしいです。?', 'answer': 'I am embarrassed.'},
    {'question': 'What is 誰??', 'answer': 'Who?'},
    {'question': 'What is 何??', 'answer': 'What?'}
],
'turkish': [
    {'question': 'What is nasıl??', 'answer': 'How?'},
    {'question': 'What is Banyo nerede??', 'answer': 'Where is the bathroom?'},
    {'question': 'What is kitaplık?', 'answer': 'library'},
    {'question': 'What is piyasa?', 'answer': 'market'},
    {'question': 'What is plaj?', 'answer': 'beach'},
    {'question': 'What is fırıncılık?', 'answer': 'bakery'},
    {'question': 'What is kule?', 'answer': 'tower'},
    {'question': 'What is lunapark?', 'answer': 'amusement park'},
    {'question': 'What is taraf?', 'answer': 'party'},
    {'question': 'What is kitapçı?', 'answer': 'bookstore'},
    {'question': 'What is gökdelen?', 'answer': 'skyscraper'},
    {'question': 'What is uçak?', 'answer': 'airplane'},
    {'question': 'What is taksicilik?', 'answer': 'taxi'}
]}

所以说我处于西班牙级别,我翻过了"黄金"。我的第一个问题应该是"西班牙语"中字典中的第一个问题。然后,当我转到下一个黄金并捡起它时,应该出现一个不同的问题,而不是第一个问题。这是特定功能:

# Create function to get questions and answers.
def getQuestions(language):
    stop = False
    for qa in dic[language]:
        if not stop:
            q = qa['question']
            a = qa['answer']
            ans = simpledialog.askstring("Input", q, parent=root)
            if ans == a:
                print("Great job!")
                stop = True
            else:
                print("The correct answer was...", a)
            screen.listen()
        else:
            break

我不知道如何做到这一点,所以每个问题在词典中都是一个不同的问题。下面我包括(几乎((几乎(我的整个游戏代码,以便您可以查看函数所在的上下文。

from turtle import RawTurtle, TurtleScreen
import tkinter
from tkinter import PhotoImage, simpledialog
import random
largefont = ("Verdana", 12)
# Define function to create Spanish level.
def span():
    pen.setup(level_1)
    player.setup(level_1)
    setup(level_1)
# Define function to create French level.
def fren():
    pen.setup(level_2)
    player.setup(level_2)
    setup(level_2)
# Define function to create Japanese level.
def jpn():
    pen.setup(level_3)
    player.setup(level_3)
    setup(level_3)
# Define function to create Turkish level.
def turk():
    pen.setup(level_4)
    player.setup(level_4)
    setup(level_4)
# Create dictionary.
dic = {'spanish': [
    {'question': 'What is morado/a?', 'answer': 'purple'},
    {'question': 'What is blanco/a?', 'answer': 'white'},
    {'question': 'What is el durazno?', 'answer': 'peach'},
    {'question': 'What is la granada?', 'answer': 'pomegranate'},
    {'question': 'What is la galleta?', 'answer': 'cookie'},
    {'question': 'What is el bistec?', 'answer': 'steak'},
    {'question': 'What is el relámpago?', 'answer': 'lightning'},
    {'question': 'What is el amanecer?', 'answer': 'sunrise'}
],
'french': [
    {'question': 'What is le arc en ciel?', 'answer': 'rainbow'},
    {'question': 'What is la glace?', 'answer': 'ice'},
    {'question': 'What is la cascade?', 'answer': 'waterfall'},
    {'question': 'What is le marais?', 'answer': 'swamp'},
    {'question': 'What is le feu?', 'answer': 'fire'},
    {'question': 'What is la cuillère?', 'answer': 'spoon'},
    {'question': 'What is la bouche?', 'answer': 'mouth'},
    {'question': 'What is le dos?', 'answer': 'back'},
    {'question': 'What is le visage?', 'answer': 'face'},
    {'question': 'What is le chat?', 'answer': 'cat'}
],
'japanese': [
    {'question': 'What is ペンギン?', 'answer': 'penguin'},
    {'question': 'What is 甲虫?', 'answer': 'beetle'},
    {'question': 'What is 蝶々?', 'answer': 'butterfly'},
    {'question': 'What is お兄さん?', 'answer': 'older brother'},
    {'question': 'What is ふうふ?', 'answer': 'married couple'},
    {'question': 'What is 今日は?', 'answer': 'hello'},
    {'question': 'What is 元気です。?', 'answer': 'I am good.'},
    {'question': 'What is わくわくしています。?', 'answer': 'I am excited.'},
    {'question': 'What is 恥ずかしいです。?', 'answer': 'I am embarrassed.'},
    {'question': 'What is 誰??', 'answer': 'Who?'},
    {'question': 'What is 何??', 'answer': 'What?'}
],
'turkish': [
    {'question': 'What is nasıl??', 'answer': 'How?'},
    {'question': 'What is Banyo nerede??', 'answer': 'Where is the bathroom?'},
    {'question': 'What is kitaplık?', 'answer': 'library'},
    {'question': 'What is piyasa?', 'answer': 'market'},
    {'question': 'What is plaj?', 'answer': 'beach'},
    {'question': 'What is fırıncılık?', 'answer': 'bakery'},
    {'question': 'What is kule?', 'answer': 'tower'},
    {'question': 'What is lunapark?', 'answer': 'amusement park'},
    {'question': 'What is taraf?', 'answer': 'party'},
    {'question': 'What is kitapçı?', 'answer': 'bookstore'},
    {'question': 'What is gökdelen?', 'answer': 'skyscraper'},
    {'question': 'What is uçak?', 'answer': 'airplane'},
    {'question': 'What is taksicilik?', 'answer': 'taxi'}
]}
# Create window and canvas using tkinter.
root = tkinter.Tk()
root.title("Language Labyrinth")
canvas = tkinter.Canvas(root, width=600, height=600)
canvas.pack()
screen = TurtleScreen(canvas)
screen.bgcolor('black')
# Define a function to set flag background for Spanish level
def spanishFlag():
    screen.bgpic("spainflag.png")
# Define a function to set flag background for French level
def frenchFlag():
    screen.bgpic("franceflaggrunge.png")
# Define a function to set flag background for Japanese level        
def japaneseFlag():
    screen.bgpic("japanflagoffwhite.png")
# Define a function to set flag background for Turkish level
def turkishFlag():
    screen.bgpic("turkishflagdiagonal.png")
# Define a function to combine the level and background setup functions for Spanish level
def combinedSpanishCommands():
    span()
    spanishFlag()
# Define a function to combine the level and background setup functions for French level
def combinedFrenchCommands():
    fren()
    frenchFlag()
# Define a function to combine the level and background setup functions for Japanese level
def combinedJapaneseCommands():
    jpn()
    japaneseFlag()
# Define a function to combine the level and background setup functions for Turkish level
def combinedTurkishCommands():
    turk()
    turkishFlag()
# Create function to get questions and answers.
def getQuestions(language):
    stop = False
    for qa in dic[language]:
        if not stop:
            q = qa['question']
            a = qa['answer']
            ans = simpledialog.askstring("Input", q, parent=root)
            if ans == a:
                print("Great job!")
                stop = True
            else:
                print("The correct answer was...", a)
            screen.listen()
        else:
            break
# Create function to get Spanish Questions.
def getSpanishQuestions():
    getQuestions('spanish')
# Create function to get French Questions.
def getFrenchQuestions():
    getQuestions('french')
# Create function to get Japanese Questions.
def getJapaneseQuestions():
    getQuestions('japanese')
# Create function to get Turkish Questions.
def getTurkishQuestions():
    getQuestions('turkish')
# Create class with separate window to choose level.
class StartPage():
    def __init__(self):
        # Creation of second window.
        wn = tkinter.Tk()
        wn.title("Welcome!")
        # Creation of game title on start page.
        label = tkinter.Label(wn, text="Language Labyrinth", font=largefont)
        label.pack()
        # Create Spanish level button.
        button = tkinter.Button(wn, text="Spanish", command=combinedSpanishCommands)
        button.pack()
        # Create French level button.
        button2 = tkinter.Button(wn, text="French", command=combinedFrenchCommands)
        button2.pack()
        # Create Japanese level button.
        button3 = tkinter.Button(wn, text="Japanese", command=combinedJapaneseCommands)
        button3.pack()
        # Create Turkish level button.
        button4 = tkinter.Button(wn, text="Turkish", command=combinedTurkishCommands)
        button4.pack()
        # Create quit button for start page.
        qbutton = tkinter.Button(wn, text="Quit", command=wn.destroy)
        qbutton.pack()
start = StartPage()
# Create Pen class to draw the maze.
class Pen(RawTurtle):
    def __init__(self):
        super().__init__(screen, shape='square')
        self.speed('fastest')
        self.color('white')
        self.penup()
    # Create setup so the maze will be drawn.
    def setup(self, level):
        for y in range(len(level)):
            screen_y = 288 - (y * 24)
            for x in range(len(level[y])):
                if level[y][x] == 'X':
                    screen_x = (x * 24) - 288
                    self.goto(screen_x, screen_y)
                    self.stamp()
                    walls.append((screen_x, screen_y))
# Create player class to have a player.
class Player(RawTurtle):
    def __init__(self):
        super().__init__(screen, shape='square')
        self.penup()
        self.speed('fastest')
        self.color('black')
    def bKey(self):
        global color
        print("b key pressed")
        self.color('blue')
    def rKey(self):
        global color
        print("r key pressed")
        self.color('red')
    def gKey(self):
        global color
        print("g key pressed")
        self.color('green')
    def pKey(self):
        global color
        print("p key pressed")
        self.color('purple')
    def yKey(self):
        global color
        print("y key pressed")
        self.color('goldenrod')
    def oKey(self):
        global color
        print("o key pressed")
        self.color('orange')
    # Create setup to create the player on the screen.
    def setup(self, level):
        for y in range(len(level)):
            for x in range(len(level[y])):
                if level[y][x] == 'P':
                    screen_x = (x * 24) - 288
                    screen_y = 288 - (y * 24)
                    self.goto(screen_x, screen_y)
                    return
    # Define a function that will allow player to move up.
    def move_up(self):
        # Calculate the spot to move to.
        movetoX = self.xcor()
        movetoY = self.ycor() + 24
        # Check if the space has a wall.
        if (movetoX, movetoY) not in walls:
            self.goto(movetoX, movetoY)
            gold_encounter()
    # Define a function that will allow player to move down.
    def move_down(self):
        # Calculate the spot to move to.
        movetoX = self.xcor()
        movetoY = self.ycor() - 24
        # Check if the space has a wall.
        if (movetoX, movetoY) not in walls:
            self.goto(movetoX, movetoY)
            gold_encounter()
    # Define a function that will allow player to move left.
    def move_left(self):
        # Calculate the spot to move to.
        movetoX = self.xcor() - 24
        movetoY = self.ycor()
        # Check if the space has a wall.
        if (movetoX, movetoY) not in walls:
            self.goto(movetoX, movetoY)
            gold_encounter()
    # Define a function that will allow player to move right.
    def move_right(self):
        # Calculate the spot to move to.
        movetoX = self.xcor() + 24
        movetoY = self.ycor()
        # Check if the space has a wall.
        if (movetoX, movetoY) not in walls:
            self.goto(movetoX, movetoY)
            gold_encounter()
    # Check if player touches the question.
    def collision(self, other):
        return self.distance(other) < 5
# Create Question class to create the "gold" in the game.
class Question(RawTurtle):
    def __init__(self, x, y):
        super().__init__(screen, shape='circle', visible=False)
        self.speed('fastest')
        self.color('hotpink')
        self.penup()
        self.goto(x, y)
        self.showturtle()
    # Define function that will remove gold when collided with.
    def destroy(self):
        self.hideturtle()
# Define function to setup the "gold" in the game.
def setup(level):
    for y in range(len(level)):
        for x in range(len(level[y])):
            char = level[y][x]
            screen_x = -288 + (x * 24)
            screen_y = 288 - (y * 24)
            if char == 'Q':
                questions.append(Question(screen_x, screen_y))
# Define a function for the quit button.
def quitPlaying():
    root.destroy()
    root.quit()
# Game loop in regards to the gold.
def gold_encounter():
    if levels[1] == True:
        print("It worked")
        return
    else:
        # Check for player collision with a question.
        # Iterate through the questions list.
        for question in questions:
            if player.collision(question):
                master = tkinter.Tk()
                b1 = tkinter.Button(master, text="Spanish Questions", command=getSpanishQuestions)
                b1.pack()
                b2 = tkinter.Button(master, text="French Questions", command=getFrenchQuestions)
                b2.pack()
                b3 = tkinter.Button(master, text="Japanese Questions", command=getJapaneseQuestions)
                b3.pack()
                b4 = tkinter.Button(master, text="Turkish Questions", command=getTurkishQuestions)
                b4.pack()
                # Destroy the question.
                question.destroy()
                # Remove question from questions list.
                questions.remove(question)
                screen.listen()
# Create frame where button(s) will be.
frame = tkinter.Frame(root)
frame.pack()
# Add questions list.
questions = []
# Wall coordinate list.
walls = []
# Create a levels list.
levels = []
# Define first level.
level_1 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XP XXXXXXX          XXXXX",
"X  XXXXXXX  XXXXXX  XXXXX",
"X       XX  XXXXXX  XXXXX",
"X       XX  XXX        XX",
"XXXXXX  XX  XXX   Q    XX",
"XXXXXX  XX  XXXXXX  XXXXX",
"XXXXXX  XX    XXXX  XXXXX",
"X  XXX Q      XXXX  XXXXX",
"X  XXX  XXXXXXXXXXXXXXXXX",
"X         XXXXXXXXXXXXXXX",
"X     Q          XXXXXXXX",
"XXXXXXXXXXXX     XXXXX  X",
"XXXXXXXXXXXXXXX  XXXXX  X",
"XXX  XXXXXXXXXX         X",
"XXX               Q     X",
"XXX         XXXXXXXXXXXXX",
"XXXXXXXXXX  XXXXXXXXXXXXX",
"XXXXXXXXXX              X",
"XX   XXXXX        Q     X",
"XX   XXXXXXXXXXXXX  XXXXX",
"XX    XXXXXXXXXXXX  XXXXX",
"XX    Q     XXXX        X",
"XXXX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
# Define second level.
level_2 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XP  XX       XX      XXXX",
"X   XX       XX      XXXX",
"X   XXXXXXX  XX  XX     X",
"X   XXXXXXX  XX  XX Q   X",
"X   XX   XX  XX  XXXXX  X",
"X   XX   XX  XX  XXXXX  X",
"XQ         Q     XX  X  X",
"X                XX  X  X",
"X   XXXXXXX   XXXXX  XXXX",
"X   XX   XX             X",
"XXXXXX   XX        Q    X",
"XXXXXX   XXXXXXXXXXXX   X",
"X      Q      XX   XX   X",
"X             XX   XX   X",
"XXXXXXXXXX    XX        X",
"XXXXXX   X    XX     Q  X",
"XXXXXX   X    XX   XX   X",
"X                 X  X  X",
"X       Q         X  X  X",
"XXXXXX   XXXXXXXXXX  X  X",
"XXXXXX   XXXXXXXXXX     X",
"X         X             X",
"X         XQ     XXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
# Define third level.
level_3 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"X      X   XP           X",
"X    Q X   X            X",
"X   XXXX   XXXXXXXXXX   X",
"X   XXXX   XXXXXXXXXX   X",
"X         Q    XX       X",
"X              XX       X",
"XXXXXXXXXXXX   XXXX   XXX",
"X              XXXX   XXX",
"X              XXXX   XXX",
"XXXXX Q XXXXXXXXXXX   XXX",
"X                   Q   X",
"X                       X",
"XXXXXXXXXX Q  XXXXXXX   X",
"XXXXXXXXXX    XXXXXXX   X",
"XXXX         XXXXXXXXX  X",
"XXX      XXXXXXXXX      X",
"XXXXXX   XXXXXXXXXXXX   X",
"X            X      Q   X",
"X  Q         X       XXXX",
"XXXXXXX            XXXXXX",
"XXXXXXXXXXXX Q XXXXXXXXXX",
"X                       X",
"X Q         XXX       Q X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
# Define fourth level.
level_4 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXX  P  XXXXXXXXXX",
"XXXXXXXXXX     XXXXXXXXXX",
"XXXXXXXXXXX Q XXXXXXXXXXX",
"X                       X",
"X          XXX          X",
"XXXXX  Q  XXXXX  Q  XXXXX",
"X          XXX          X",
"XXXXXXXX    X    XXXXXXXX",
"X Q         X         Q X",
"X           X           X",
"XXXXXXXXXX QXQ XXXXXXXXXX",
"X                       X",
"X                       X",
"XXXXXXXXXXXXXXXXXXXXX   X",
"XXXXXXXXXXXXXXXXXXXXX   X",
"XXXXXX   XXXXXXXXX      X",
"XXXXXX   XXXXXXX Q  XXXXX",
"XQ                      X",
"X                       X",
"XXXXXXXXXXX   XXXXXXX   X",
"XXXXXXXX      XXXXXXX   X",
"XXXXXX     XXXXXXXXXX   X",
"XXXXX  Q XXXXXXXXXXX Q  X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
# Add the level(s) to the levels list.
levels.append(level_1)
levels.append(level_2)
levels.append(level_3)
levels.append(level_4)
# Class instances.
pen = Pen()
player = Player()
# Creation of quit button.
quitButton = tkinter.Button(frame, text='Quit', command=quitPlaying)
quitButton.pack()
# Button commands for player movement
screen.onkeypress(player.move_up, 'Up')
screen.onkeypress(player.move_down, 'Down')
screen.onkeypress(player.move_left, 'Left')
screen.onkeypress(player.move_right, 'Right')
# Button commands for customizable player colors 
screen.onkeypress(player.bKey, "b")
screen.onkeypress(player.rKey, "r")
screen.onkeypress(player.gKey, "g")
screen.onkeypress(player.pKey, "p")
screen.onkeypress(player.yKey, "y")
screen.onkeypress(player.oKey, "o")
screen.listen()
# Call main game loop.
screen.mainloop()

基本上我希望每个问题都不同,但目前一直在问同一问题。

您可以使用全局变量来保存您的问题的计数参考,并且由于您的应用程序中的一个函数可以访问此变量,因此从内部修改它不会是问题功能主体:

# global variable reference to question number
question_counter = 0
# Create function to get questions and answers.
def getQuestions(language):
    global question_counter  # required to modify global variable from inside function body 
    stop = False
    if question_counter > len(dic[language]):  # reset our question counter
        question_counter = 0 
    for i in range(question_counter, len(dic[language]), 1):
        qa = dic[language][i]
        if not stop:
            q = qa['question']
            a = qa['answer']
            ans = simpledialog.askstring("Input", q, parent=root)
            if ans == a:
                print("Great job!")
                stop = True
            else:
                print("The correct answer was...", a)
            screen.listen()
        else:
            break
    question_counter += 1  # increase our counter to get the next question next time

相关内容

  • 没有找到相关文章

最新更新