Есть ли способ получить доступ к моей переменной guesses_left из класса TimeToGuess, когда мне нужно проверить, закончились ли они догадки - PullRequest
1 голос
/ 08 ноября 2019

Я создаю базовое приложение для игры в угадайку в Киви, чтобы выучить его основы, но пока не совсем все понимаю. Мне нужно получить доступ к guesses_left, когда я перехожу к следующему экрану (TimeToGuess), чтобы при написании логики удалить догадки, если они угадали неправильно, и в конечном итоге проиграть, если они закончились.

Я уже пробовалустановить атрибут класса TimeToGuess как Guesses, чтобы получить к нему быстрый доступ, но использование canvas.clear () в релизе кнопки, которое также переключается на TimeToGuess, не работает для меня.

вот код файла 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

guesses_left = int()
computer_num = random.randint(1, 10)
user_guess = int()

class WannaPlay(Screen):
    pass


class Guesses(Screen):
    guesses_left = int()


class TimeToGuess(Screen):
        def user_is_guessing(self):
        if user_guess != computer_num:
            guesses_left -= 1


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


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: 'How Many Guesses Would You Like?'

        GridLayout:
            cols: 4

            Button:
                name: 'guess_amount_one'
                text: '1'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 1
                    print(guesses_left)



            Button:
                name: 'guess_amount_two'
                text: '2'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 2
                    print(guesses_left)

            Button:
                name: 'guess_amount_three'
                text: '3'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 3
                    print(guesses_left)

            Button:
                name: 'guess_amount_four'
                text: '4'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 4
                    print(guesses_left)


<TimeToGuess>
    name: 'time_to_guess'
    GridLayout:
        cols: 1

        Label:
            text: 'Guess a number between 1 and 10'

        GridLayout:
            cols: 5

            Button:
                name: 'guess_1'
                text: '1'
            Button:
                name: 'guess_2'
                text: '2'
            Button:
                name: 'guess_3'
                text: '3'
            Button:
                name: 'guess_4'
                text: '4'
            Button:
                name: 'guess_5'
                text: '5'
            Button:
                name: 'guess_6'
                text: '6'
            Button:
                name: 'guess_7'
                text: '7'
            Button:
                name: 'guess_8'
                text: '8'
            Button:
                name: 'guess_9'
                text: '9'
            Button:
                name: 'guess_10'
                text: '10'

Заранее благодарим за помощь

Этот обновленный код показывает, как на самом деле помог проверенный ответрешить хотя бы эту проблему (я уверен, что у меня будет еще больше проблем. lol)

Код 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

guesses_left = int()
user_guess = int()
computer_num = random.randint(1, 10)


class WannaPlay(Screen):
    pass


class Guesses(Screen):
    pass


def user_is_guessing(guesses_amount=guesses_left, computer_num=computer_num):
    if user_guess != computer_num and guesses_amount == 0:
        #subtract from  guesses_left go to lose page
        pass
    elif guesses_amount == computer_num:
        #go to win page
        pass
    elif guesses_amount != computer_num:
        #subtract from guesses_left and have the user guess again
        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


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: 'How Many Guesses Would You Like?'

        GridLayout:
            cols: 4

            Button:
                name: 'guess_amount_one'
                text: '1'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 1
                    print(guesses_left)



            Button:
                name: 'guess_amount_two'
                text: '2'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 2
                    print(guesses_left)

            Button:
                name: 'guess_amount_three'
                text: '3'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 3
                    print(guesses_left)

            Button:
                name: 'guess_amount_four'
                text: '4'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 4
                    print(guesses_left)


<TimeToGuess>
    name: 'time_to_guess'
    GridLayout:
        cols: 1

        Label:
            text: 'Guess a number between 1 and 10'

        GridLayout:
            cols: 5

            Button:
                name: 'guess_1'
                text: '1'
            Button:
                name: 'guess_2'
                text: '2'
            Button:
                name: 'guess_3'
                text: '3'
            Button:
                name: 'guess_4'
                text: '4'
            Button:
                name: 'guess_5'
                text: '5'
            Button:
                name: 'guess_6'
                text: '6'
            Button:
                name: 'guess_7'
                text: '7'
            Button:
                name: 'guess_8'
                text: '8'
            Button:
                name: 'guess_9'
                text: '9'
            Button:
                name: 'guess_10'
                text: '10'

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Я некоторое время не прикасался к Киви, поэтому не совсем уверен, что это сработает, но если подчиняется базовому ООП, то это должно сработать.

Вы можете просто объявить переменную guesses_left вне определенного класса, сделав ее доступной для всех ваших классов. то есть:

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

# Initilize here
guesses_left = int()

class WannaPlay(Screen):
    pass


class Guesses(Screen):
    # instead of here
    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


if __name__ == '__main__':
    # Or initilize here
    # guesses_left = int()
    GuessingGameApp().run()

Если это не сработает, оставьте комментарий, и я рассмотрю его, когда смогу.

0 голосов
/ 08 ноября 2019

Это обновленный код, показывающий, как приведенный выше ответ действительно помог решить хотя бы эту проблему (хотя я уверен, что у меня будет больше проблем. Lol)

Код 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

guesses_left = int()
user_guess = int()
computer_num = random.randint(1, 10)


class WannaPlay(Screen):
    pass


class Guesses(Screen):
    pass


def user_is_guessing(guesses_amount=guesses_left, computer_num=computer_num):
    if user_guess != computer_num and guesses_amount == 0:
        #subtract from  guesses_left go to lose page
        pass
    elif guesses_amount == computer_num:
        #go to win page
        pass
    elif guesses_amount != computer_num:
        #subtract from guesses_left and have the user guess again
        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


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: 'How Many Guesses Would You Like?'

        GridLayout:
            cols: 4

            Button:
                name: 'guess_amount_one'
                text: '1'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 1
                    print(guesses_left)



            Button:
                name: 'guess_amount_two'
                text: '2'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 2
                    print(guesses_left)

            Button:
                name: 'guess_amount_three'
                text: '3'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 3
                    print(guesses_left)

            Button:
                name: 'guess_amount_four'
                text: '4'
                on_release:
                    root.manager.transition.duration = 0
                    root.manager.current = 'time_to_guess'
                    guesses_left = 4
                    print(guesses_left)


<TimeToGuess>
    name: 'time_to_guess'
    GridLayout:
        cols: 1

        Label:
            text: 'Guess a number between 1 and 10'

        GridLayout:
            cols: 5

            Button:
                name: 'guess_1'
                text: '1'
            Button:
                name: 'guess_2'
                text: '2'
            Button:
                name: 'guess_3'
                text: '3'
            Button:
                name: 'guess_4'
                text: '4'
            Button:
                name: 'guess_5'
                text: '5'
            Button:
                name: 'guess_6'
                text: '6'
            Button:
                name: 'guess_7'
                text: '7'
            Button:
                name: 'guess_8'
                text: '8'
            Button:
                name: 'guess_9'
                text: '9'
            Button:
                name: 'guess_10'
                text: '10'
...