首页 > 解决方案 > 每次在 Kivy 中按下此特定按钮时,我都需要更改我的随机数

问题描述

我需要,每次游戏开始时我的随机数都要改变。请记住,随机数由几个不同的类访问。以下是来自 python 和 .kv 文件的一些代码片段。

蟒蛇文件:

from kivy import *
import random
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.textinput import TextInput


class WannaPlay(Screen):
    pass


class Guesses(Screen):
    pass


class TimeToGuess(Screen):
    pass


class Winner(Screen):
    pass


class Loser(Screen):
    pass


class ScreenManage(ScreenManager):
    pass


kv = Builder.load_file('guessinggame.kv')


class GuessingGameApp(App):
    def build(self):
        return kv

    computer_num = random.randint(1, 10)
    random_num = str(computer_num)
    print(random_num)
    guesses_left = 3


if __name__ == '__main__':
    GuessingGameApp().run()

.kv 文件:

ScreenManage:
    WannaPlay:
    Guesses:
    TimeToGuess:
    Winner:
    Loser:


<WannaPlay>:
    name: 'start'
    GridLayout:
        cols: 1
        Label:
            text: 'Want to Play the Guessing Game?'

        GridLayout:
            cols: 2

            Button:
                name: 'yes'
                text: 'Yes'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'guess_choice'

            Button:
                name: 'no'
                text: 'No'
                on_release:
                    app.stop()


<Guesses>
    name: 'guess_choice'
    id: guesses_choice
    GridLayout:
        cols: 1

        Label:
            text: 'You Will Have 3 guesses. Are You Ready?'
        Button:
            name: 'yes_guess'
            text: 'YES'
            on_release:
                root.manager.current = 'time_to_guess'
                root.manager.transition.duration = 0
                app.guesses_left = int(3)





<TimeToGuess>

    name: 'time_to_guess'
    GridLayout:
        cols: 1

        Label:
            text: 'Guess a number between 1 and 10'
        Label:
            id: guesses_left
            text: 'Guesses Left: '

        GridLayout:
            cols: 2

            TextInput:
                id: guess
                name: 'user_guess'

            Button:
                text: 'Submit Answer'
                on_release:

                    app.guesses_left = int(app.guesses_left) - int(1)
                    guesses_left.text = 'Guesses Left: ' + str(app.guesses_left)
                    root.manager.current = 'winner' if guess.text == app.random_num else 'loser' if guess.text != app.random_num and app.guesses_left == int(0) else 'time_to_guess'
                    root.manager.transition.direction = 'left'
                    root.manager.transition.duration = 0
                    guess.text = ''





<Winner>
    name: 'winner'
    GridLayout:
        cols: 1
        Label:
            text: 'You have Won!'
        Label:
            text: 'Would You Like To Play Again?'
        GridLayout:
            cols: 2
            Button:
                text: 'Yes'
                on_release:
                    app.guesses_left = int(3)
                    root.manager.current = 'guess_choice'
                    root.manager.transition.duration = 0


            Button:
                text: 'No'
                on_release:
                    app.stop()
<Loser>
    name: 'loser'
    GridLayout:
        cols: 1
        Label:
            text:'You have Lost!'
        Label:
            text: 'Would You Like To Play Again?'
        GridLayout:
            cols: 2
            Button:
                text: 'Yes'
                on_press:
                    root.manager.current = 'guess_choice'
                    root.manager.transition.duration = 0
            Button:
                text: 'No'
                on_release:
                    app.stop()

因此,当单击是时。我需要一个新的随机数来生成,它仍然可以很容易地从不同的类中访问。提前谢谢你的帮助

标签: pythonpython-3.xkivykivy-language

解决方案


kv文件的开头添加以下行:

#:import random random

然后,无论您需要在何处重新初始化random_num,只需添加以下行:

app.random_num = str(random.randint(1, 10))

例如,在您的<Loser>规则中:

<Loser>
    name: 'loser'
    GridLayout:
        cols: 1
        Label:
            text:'You have Lost!'
        Label:
            text: 'Would You Like To Play Again?'
        GridLayout:
            cols: 2
            Button:
                text: 'Yes'
                on_press:
                    root.manager.current = 'guess_choice'
                    app.random_num = str(random.randint(1, 10))
                    root.manager.transition.duration = 0
            Button:
                text: 'No'
                on_release:
                    app.stop()

推荐阅读