随机显示屏幕

时间:2019-02-23 08:21:05

标签: python python-3.x audio kivy

我正在尝试制作一个应用程序,实际上是一个游戏,当触摸“下一个”按钮时,该游戏将随机显示屏幕,因此我将屏幕和标签显示在每个屏幕上,但我无法让它显示触摸“下一步”按钮时出现随机屏幕,它只是遵循一种模式,有人在这里帮我吗?这是代码:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import Image kivy.uix.image.Image
#: import SoundLoader kivy.core.audio.SoundLoader


ScreenManagement:

    transition: FadeTransition()

    MainScreen:

    GameScreen:

    GameScreen2:

    GameScreen3:

    GameScreen4:


<Button>:

    font_size: 12
    size_hint: 0.2, 0.1

<MainScreen>:


    name: "main"

    FloatLayout:

    Button:

        text: "START GAME"
        color: 1,0,1,1
        pos_hint: {"x": 0, "y":0}
        on_release: app.root.current = "game"

    Button:

        text: "QUIT"
        color: 1,0,0,1
        pos_hint: {"x": .8, "y": 0}
        on_release: quit()

    Button:
        text: "SOUND"
        color: 0,1,0,1
        pos_hint: {"x":.2 , "y": .4}
        on_press: app.play_sound1()

<GameScreen>:
    name: "game"

    FloatLayout:
        Label:
            text: "Python\nSnowden\nMr.Robot"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y": 0}


    Button:

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game2"
        color: 0,1,0,1
        pos_hint: {"x":0, "y":0}

<GameScreen2>:
    name: "game2"

    FloatLayout:

        Label:
            text: "Banana\n\nOrange\n\nTea\n\nSleep"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y": 0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game3"
        color: 0,1,0,1
        pos_hint: {"x": 0, "y": 0}

<GameScreen3>:
    name: "game3"

    FloatLayout:

        Label:
            text: "Assembly\n\nRuby\n\nC"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y":0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game4"
        color: 0,1,0,1
        pos_hint: {"x": 0, "y": 0}

<GameScreen4>:
    name: "game4"

    FloatLayout:

        Label:
            text: "Prolog\n\nPygame\n\nC++"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y":0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

上面是kv代码,对于业余爱好者来说,很抱歉我是一个业余爱好者 这是python边码:

from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.core.audio import SoundLoader
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class MainScreen(Screen):
    pass

class GameScreen(Screen):
    pass

class GameScreen2(Screen):
    pass

class GameScreen3(Screen):
    pass

class GameScreen4(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("quora.kv")

class MainApp(App):

    def build(self):

        self.load_sounds()

        return presentation

    def load_sounds(self):
        self.sounds = {}
        for i in range(10):
            fname = 'sound' + str(i+1) + '.wav'
            self.sounds[i] = SoundLoader.load(fname)

    def play_sound1(self):
        sound = self.sounds.get(0)
        if sound is not None:
            sound.volume = 0.5
            sound.play()

    def play_sound2(self):
        sound = self.sounds.get(1)
        if sound is not None:
            sound.volume = 0.5
            sound.play()


if __name__ == "__main__":

    MainApp().run()

这是我为您准备的示例,因为原始示例比此示例大得多,我不知道如何使用某种LOOP来生成屏幕,因此我在原始代码上创建了20个以上的屏幕,如果可以的话帮我弄清楚当我按“开始”按钮时如何停止菜单歌曲,以便我可以按SCREEN1上的“歌曲”按钮播放其歌曲,我将不胜感激。感谢您的耐心配合。

1 个答案:

答案 0 :(得分:0)

触摸“下一步”按钮时显示随机屏幕

使用screen_names

  

screen_names

     

添加的所有Screen小部件的名称列表。清单是   只读。

     

screens_names是AliasProperty,并且是只读的。更新了   如果屏幕列表更改或屏幕名称更改。

摘要

#:import choice random.choice
...

    Button:

        text: "Next"
        on_release: 
            root.manager.current = choice(root.manager.screen_names[1:])
        color: 0,1,0,1
        pos_hint: {"x":0, "y":0}

停止/播放音乐

您可能想使用ToggleButton代替Button来播放音乐。请参考下面的示例。

示例

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.togglebutton import ToggleButton
from kivy.core.audio import SoundLoader
from kivy.properties import ObjectProperty


class MusicScreen(Screen):
    enter = ObjectProperty(None)
    text_input = ObjectProperty(None)
    stop = ObjectProperty(None)
    musicbutton = ToggleButton()


class ScreenManagement(ScreenManager):
    pass


class MainApp(App):
    sound = ObjectProperty(None, allownone=True)

    def build(self):
        return ScreenManagement()

    def on_state(self, state, filename):
        print("ONSTATE!!!")
        print("\tstate=", state)

        if self.sound is None:
            self.sound = SoundLoader.load(filename)

        # stop the sound if it's currently playing
        if self.sound.status != 'stop':
            self.sound.stop()

        if state == "down":
            self.sound.volume = .5
            self.sound.play()
        else:   # if state == "normal":
            if self.sound:
                self.sound.stop()
                # self.sound.unload()
                self.sound = None


if __name__ == "__main__":
    MainApp().run()

main.kv

#:kivy 1.11.0

<ScreenManagement>:
    MusicScreen:
        name: 'music'

<MusicScreen>:
    text_input: text_input
    id: "music"
    name: "music"

    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: "vertical"
        FileChooserListView:
            id: filechooser
            rootpath: "/home/iam/Music/"
            on_selection: text_input.text = self.selection and self.selection[0] or ''

        TextInput:
            id: text_input
            size_hint_y: None
            height: 50
            multiline: False

        ToggleButton:
            size_hint: 1, .2
            text: "Play/Stop By File"
            on_state: app.on_state(self.state, text_input.text)

        ToggleButton:
            id: musicbutton
            size_hint: 1, .2
            text: "Play/Stop By Title"
            on_state: app.on_state(self.state, text_input.text)