-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpygame_gui_example.py
120 lines (88 loc) · 3.06 KB
/
pygame_gui_example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import pygame
from pygame.transform import rotate
from pygame.sprite import Sprite, Group
from pygame.math import Vector2
import pygame_gui
from pygame_gui.elements import UIButton
# Here we need to call init to load font text for the buttons
pygame.init()
SCREEN_SIZE = (300, 400)
MAP_SIZE = (300, 320)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
FPS = 60
class Ant(Sprite):
def __init__(self, size=(25, 25), speed=(2, 2)):
# Call the parent class (Sprite) constructor
super(Ant, self).__init__()
# Load an image of the ant
self.image = pygame.image.load("ant_worker.png")
self.rect = self.image.get_rect()
self.rect.inflate_ip(*size)
self.rect.update(0, 0, *self.rect.size)
self.vector = Vector2(speed)
@property
def direction(self):
return self.vector.normalize()
def reverse(self):
self.vector = self.vector.reflect(self.vector)
def speed_up(self):
self.vector *= 1.5
def slow_down(self):
self.vector *= 0.5
def update(self):
self.rect.move_ip(self.vector)
if self.rect.left < 0 or self.rect.right > MAP_SIZE[0]:
self.vector = self.vector.reflect((1, 0))
if self.rect.top < 0 or self.rect.bottom > MAP_SIZE[1]:
self.vector = self.vector.reflect((0, 1))
def draw(self, surface):
angle = self.vector.angle_to(Vector2(0, -1))
surface.blit(rotate(self.image, angle), self.rect)
if __name__ == '__main__':
# Creates a graphical window, based on system hardware
# settings
screen = pygame.display.set_mode(SCREEN_SIZE)
# Create Pygame GUI UIManager to tae control of processing
# events
manager = pygame_gui.UIManager(SCREEN_SIZE)
flip_button = UIButton(
relative_rect=pygame.Rect((0, 320), (100, 80)),
text='Flip it!',
manager=manager
)
speed_button = UIButton(
relative_rect=pygame.Rect((100, 320), (100, 80)),
text='Speed up!',
manager=manager
)
slow_button = UIButton(
relative_rect=pygame.Rect((200, 320), (100, 80)),
text='Slow down!',
manager=manager
)
ant = Ant()
colony = Group(ant)
clock = pygame.time.Clock()
running = True
while running:
time_delta = clock.tick(FPS) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.USEREVENT:
if event.user_type == pygame_gui.UI_BUTTON_PRESSED:
if event.ui_element == flip_button:
ant.reverse()
elif event.ui_element == speed_button:
ant.speed_up()
elif event.ui_element == slow_button:
ant.slow_down()
manager.process_events(event)
manager.update(time_delta)
colony.update()
screen.fill(WHITE)
for ant in colony.sprites():
ant.draw(screen)
manager.draw_ui(screen)
pygame.display.flip()