Мне нужно менять свое случайное число каждый раз, когда эта конкретная кнопка нажимается в Киви - PullRequest
0 голосов
/ 09 ноября 2019

Мне нужно, каждый раз, когда игра запускается поверх моего случайного числа, чтобы измениться. Имейте в виду, что случайное число доступно нескольким классам. Вот несколько фрагментов кода из файлов python и .kv.

Файл Python:

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 file:

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()

Итак, когда yesщелкнул. Мне нужно новое случайное число для генерации, к которому все еще можно легко получить доступ из разных классов. Заранее благодарю за помощь

1 Ответ

2 голосов
/ 10 ноября 2019

В начале вашего 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()
...