Last active 1746354376

game.py Raw
1import pygame
2
3class GameContext :
4 def __init__(
5 self,
6 dt, events, keys,
7 game,
8 ):
9 self.dt = dt
10 self.events = events
11 self.keys = keys
12 self.game = game
13 # ctx.screen -> ctx.game.screen
14
15class Game:
16 def __init__(
17 self,
18 resolution=(640, 480),
19 bg_color=(0, 0, 0),
20 fps=30,
21 objects=[],
22 ):
23 self.resolution = resolution
24 self.bg_color = bg_color
25 self.fps = fps
26 self.objects = objects
27 def run(self):
28 self.screen = pygame.display.set_mode(self.resolution)
29 clock = pygame.time.Clock()
30 running = True
31 while running :
32 # Здесь код на каждый кадр
33
34 dt = clock.tick(self.fps) / 1000.0
35 events = pygame.event.get()
36 for event in events :
37 if event.type == pygame.QUIT :
38 running = False
39
40 self.screen.fill(self.bg_color)
41
42 keys = pygame.key.get_pressed()
43 ctx = GameContext(dt, events, keys, self)
44
45 for o in self.objects :
46 o.update(ctx)
47 o.draw(ctx)
48
49 # Вывести всё нарисованное на окно
50 pygame.display.update()
51 pygame.quit()
52
53class GameObject:
54 def update(self):
55 pass
56 def draw(self):
57 pass
58# Rectangle - прямоугольник
59class Rect(GameObject):
60 def __init__(
61 self,
62 x = 0, y = 0,
63 w = 100, h = 100,
64 fill_color=(255, 255, 255)
65 ):
66 self.x = x
67 self.y = y
68 self.w = w
69 self.h = h
70 self.fill_color = fill_color
71
72 def draw(self, ctx):
73 pygame.draw.rect(
74 ctx.game.screen, self.fill_color,
75 (self.x, self.y,
76 self.w, self.h),
77 )
78
79
80
pong.py Raw
1import game as game
2import pygame
3
4class PlayerRect(game.Rect):
5 def __init__(self, speed=200, **kwargs):
6 super().__init__(**kwargs)
7 self.speed = speed
8 def update(self, ctx):
9 dt = ctx.dt
10 speed = self.speed
11 if ctx.keys[pygame.K_a] :
12 self.x -= dt * speed
13 if ctx.keys[pygame.K_d] :
14 self.x += dt * speed
15 if ctx.keys[pygame.K_w] :
16 self.y -= dt * speed
17 if ctx.keys[pygame.K_s] :
18 self.y += dt * speed
19
20import random
21rects = []
22for i in range(2000) :
23 rect = PlayerRect(
24 speed=random.randint(10, 250),
25 fill_color=(
26 random.randint(0, 255),
27 random.randint(0, 255),
28 random.randint(0, 255),
29 ),
30 x=random.randint(0, 300),
31 y = random.randint(0, 400),
32 )
33 rects.append(rect)
34
35g = game.Game(
36 objects=rects,
37)
38g.run()
39