python - 当我需要检查它们是否用完猜测时,有没有办法从 TimeToGuess 类访问我的gueses_left变量

标签 python python-3.x kivy kivy-language

我正在 Kivy 中构建一个基本的猜谜游戏应用程序来学习它的基础知识,但还没有完全理解它。当我进入下一个屏幕(TimeToGuess)时,我需要访问gueses_left,这样当我编写逻辑来删除猜测时,如果他们猜错了,如果他们猜错了,最终会失败。

我已经尝试将 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'

提前感谢您的帮助

这是更新的代码,以显示检查的答案实际上如何帮助解决至少该问题(我确信我还会遇到更多问题。哈哈)

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'

最佳答案

我已经有一段时间没有接触 Kivy 了,所以我不完全确定这会起作用,但是如果遵循基本的 OOP 那么这应该会起作用。

您可以在特定类之外声明gueses_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()

如果无法运行,请发表评论,我会尽可能进一步研究。

关于python - 当我需要检查它们是否用完猜测时,有没有办法从 TimeToGuess 类访问我的gueses_left变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770320/

相关文章:

python - Flask python断言错误: unimplemented method 'GET'

python - 在 OpenCV 中查找子像素中的轮廓点

python - 如何在不使用 numpy 的情况下获得列表形状?

python - 将字符串打印到文本文件

python - 用 python 绘制 SDSS 图像

python - 使用 Python 正则表达式将 span 标签替换为 anchor 标签

python - 如何使用 xml.dom 中的 minidom 获取字符串形式的内部内容?

python - 防止 Kivy 留下调试信息

python - 防止 pyttsx3 卡住 GUI

android - 如何让kivy小部件暂停