166 lines
4.5 KiB
Python
166 lines
4.5 KiB
Python
from random import randrange
|
|
|
|
from kivy.app import App
|
|
from kivy.clock import Clock
|
|
from kivy.lang import Builder
|
|
|
|
from kivy.uix.screenmanager import Screen, ScreenManager
|
|
from kivy.uix.boxlayout import BoxLayout
|
|
from kivy.uix.label import Label
|
|
from kivy.uix.popup import Popup
|
|
from kivy.uix.widget import Widget
|
|
|
|
from kivy.properties import ObjectProperty
|
|
from kivy.core.window import Window
|
|
|
|
from kivy.graphics import Rectangle
|
|
|
|
Builder.load_string("""
|
|
<ScreenOne>:
|
|
BoxLayout:
|
|
Button:
|
|
text: "Go to Screen 2"
|
|
on_press:
|
|
root.manager.transition.direction = "left"
|
|
root.manager.transition.duration = 1
|
|
root.manager.current = "screen_two"
|
|
|
|
<ScreenTwo>:
|
|
BoxLayout:
|
|
Button:
|
|
text: "Go to Screen 1"
|
|
on_press:
|
|
root.manager.transition.direction = "right"
|
|
root.manager.transition.duration = 1
|
|
root.manager.current = "screen_one"
|
|
""")
|
|
|
|
class ScreenOne(Screen):
|
|
pass
|
|
|
|
class ScreenTwo(Screen):
|
|
pass
|
|
|
|
screen_manager = ScreenManager()
|
|
screen_manager.add_widget(ScreenOne(name="screen_one"))
|
|
screen_manager.add_widget(ScreenTwo(name="screen_two"))
|
|
|
|
def collides(rect1, rect2):
|
|
r1x = rect1[0][0]
|
|
r1y = rect1[0][1]
|
|
r2x = rect2[0][0]
|
|
r2y = rect2[0][1]
|
|
r1w = rect1[1][0]
|
|
r1h = rect1[1][1]
|
|
r2w = rect2[1][0]
|
|
r2h = rect2[1][1]
|
|
|
|
if (r1x < r2x + r2w and r1x + r1w > r2x and r1y < r2y + r2h and r1y + r1h > r2y):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
class GameWidget(Widget):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(**kwargs)
|
|
self._keyboard = Window.request_keyboard(self._on_keyboard_closed, self)
|
|
self._keyboard.bind(on_key_down=self._on_key_down)
|
|
self._keyboard.bind(on_key_up=self._on_key_up)
|
|
|
|
self.nearbyobj = []
|
|
|
|
#for obj in range(10):
|
|
|
|
with self.canvas:
|
|
self.player = Rectangle(source="assets/images/player.png", pos=(0,0), size=(100,100))
|
|
self.enemy = Rectangle(pos=(300,300), size=(80,80))
|
|
|
|
self.keysPressed = set()
|
|
|
|
Clock.schedule_interval(self.move_step,0)
|
|
|
|
def _on_keyboard_closed(self):
|
|
self._keyboard.unbind(on_key_down=self._on_key_down)
|
|
self._keyboard.unbind(on_key_up=self._on_key_up)
|
|
self._keyboard = None
|
|
|
|
def _on_key_down(self, keyboard, keycode, text, modifiers):
|
|
self.keysPressed.add(text)
|
|
|
|
def _on_key_up(self,keyboard,keycode):
|
|
text = keycode[1]
|
|
if text in self.keysPressed:
|
|
self.keysPressed.remove(text)
|
|
|
|
def move_step(self,dt):
|
|
currentx = self.player.pos[0]
|
|
currenty = self.player.pos[1]
|
|
|
|
step_size = 200 * dt
|
|
|
|
if "w" in self.keysPressed:
|
|
currenty += step_size
|
|
if "s" in self.keysPressed:
|
|
currenty -= step_size
|
|
if "a" in self.keysPressed:
|
|
currentx -= step_size
|
|
if "d" in self.keysPressed:
|
|
currentx += step_size
|
|
|
|
self.player.pos = (currentx, currenty)
|
|
|
|
if collides((self.player.pos,self.player.size),(self.enemy.pos,self.size)):
|
|
print("X")
|
|
else:
|
|
print('.')
|
|
|
|
class GlobalForest(App):
|
|
def build(self):
|
|
#return Label(text='Hello world')
|
|
return GameWidget()
|
|
|
|
class CustomPopup(Popup):
|
|
pass
|
|
|
|
class SampleBoxLayout(BoxLayout):
|
|
checkbox_is_active = ObjectProperty(False)
|
|
def checkbox_18_clicked(self, instance, value):
|
|
if value is True:
|
|
print("Checkbox Checked")
|
|
else:
|
|
print("Checkbox is Unchecked")
|
|
|
|
blue = ObjectProperty(True)
|
|
red = ObjectProperty(False)
|
|
green = ObjectProperty(False)
|
|
|
|
def switch_on(self, instance, value):
|
|
if value is True:
|
|
print("Switch On")
|
|
else:
|
|
print("Switch Off")
|
|
|
|
def open_popup(self):
|
|
the_popup = CustomPopup()
|
|
the_popup.open()
|
|
|
|
def spinner_clicked(self, value):
|
|
print("Spinner Value " + value)
|
|
|
|
class MainApp(App):
|
|
def build(self):
|
|
#Window.clearcolor = (1, 1, 1, 1)
|
|
return screen_manager
|
|
|
|
global app, screens
|
|
app = self
|
|
screens = {'main_screen': MainScreen(name='main_screen'),
|
|
'about_screen': AboutScreen(name='about_screen')}
|
|
self.screen_manager = ScreenManager
|
|
self.main()
|
|
|
|
if __name__ == '__main__':
|
|
#app = GlobalForest()
|
|
app = MainApp()
|
|
app.run()
|