class Enemy: def __init__(self, w, pos_x, pos_y, health, g_controller): self.g_controller = g_controller self.health = health self.w = w self.img = PhotoImage(file='sprites/enemy.png') self.size = (self.img.width(), self.img.height()) self.col = Collider('enemy', self.size[0], self.size[1]) self.pos_x = pos_x self.pos_y = pos_y self.graphic = Frame(width=self.size[0], height=self.size[1], bg='black') Label(self.graphic, image=self.img, bg='black').pack() self.health_ui = Label(self.graphic, fg='white', bg='black') self.health_ui.pack() self.update_health_ui() def update(self): if self.health > 0: self.movement() else: return def render(self): render_pos = (self.pos_x - self.size[0] / 2, self.pos_y - self.size[1] / 2) self.col.set_position(render_pos[0], render_pos[1]) self.graphic.place(x=render_pos[0], y=render_pos[1]) def shoot(self): Projectile(self.w, self.pos_x, self.pos_y + self.size[1] / 2, 1, self.g_controller.get_player(), 'red', self.g_controller) def damage(self): self.health -= 1 if self.health <= 0: self.die(True) return self.update_health_ui() def update_health_ui(self): self.health_ui['text'] = 'HP: {}'.format(self.health) def die(self, score): self.health = 0 if score is True: self.g_controller.on_enemy_die() self.col.enabled = False self.graphic.destroy()
def _setup_colliders(self): c1x, c1y = self.position c2x, c2y = self.position c1x += int(self.size[0]/2) c1y += int(self.size[1]/3) collider1 = Collider((c1x, c1y), (int(2*self.size[0]/3), int(2*self.size[1]/3)), is_circle=True) c2x += 10 c2y += int(self.size[1]/3) collider2 = Collider((int(c1x-2-self.size[0]/3), c2y), (3*self.size[0]/4+3, int(2*self.size[1]/3))) return [collider1, collider2]
class Projectile: def __init__(self, w, pos_x, pos_y, dir, targets, color, g_controller): self.g_controller = g_controller self.targets = targets self.col = Collider('projectile', 4, 16) self.pos_x = pos_x self.pos_y = pos_y self.dir = dir self.w = w self.graphic = Frame() self.graphic.config(bg=color, width=4, height=16) self.move() self.g_controller.projectiles.append(self) def move(self): self.pos_y += 4 * self.dir self.col.set_position(self.pos_x, self.pos_y) if self.targets is not None: for target in self.targets: if target.col.enabled is True: if self.col.check_collision(target.col): target.damage() Shake(self.w, 5, 10) self.destroy_p() return if self.pos_y > self.w.winfo_height() or self.pos_y < 0: self.destroy_p() return self.graphic.place(x=self.pos_x, y=self.pos_y) def destroy_p(self): self.graphic.destroy() p = self.g_controller.projectiles for id in range(len(p)): if p[id] is self: self.g_controller.projectiles.pop(id) return
class Main(): def __init__(self, gru_file=None): self.menu = Menu(self, config, game = None) self.library = Library(self, config) self.collider = Collider(self.menu, self.library, game=None) self.dispatcher = Dispatcher(self.collider, self.library, self.menu, game=None) self.clock = pygame.time.Clock() self.fps = Fps(self.clock, config) if gru_file is not None: game = Game(gru_file) self.load(game) else: self.game = None def load(self, game): self.library.clear() self.game = game self.collider.game = game self.menu.game = game def clear(self): self.game = None self.collider.game = None self.menu.game = None def draw(self): tick = self.clock.get_time() self.menu.draw() if self.game == None: self.library.draw() else: self.game.draw(tick) def start(self): while 1: self.clock.tick() mrect = Rect(mouse.get_pos(), (1,1)) self.collider.check() self.draw() self.fps.draw() for ev in event.get(): self.dispatcher.process(ev) display.update()
def __init__(self, w, pos_x, pos_y, dir, targets, color, g_controller): self.g_controller = g_controller self.targets = targets self.col = Collider('projectile', 4, 16) self.pos_x = pos_x self.pos_y = pos_y self.dir = dir self.w = w self.graphic = Frame() self.graphic.config(bg=color, width=4, height=16) self.move() self.g_controller.projectiles.append(self)
def add_component(self, type_): def fail(): raise Exception( f'Cannot add component {type_}, as another component is interfering with it.', 'sprite.Sprite.add_component(type_)') new_component = None if type_ == 'body': if self.get_component('body') is False: new_component = Body(self) else: fail() elif type_ == 'image': if self.get_component('image') is False and self.get_component( 'rect renderer') is False and \ self.get_component('circle renderer') is False: new_component = Image() else: fail() elif type_ == 'rect renderer': if self.get_component('image') is False and self.get_component( 'rect renderer') is False and \ self.get_component('circle renderer') is False: new_component = RectRenderer(self) else: fail() elif type_ == 'script': new_component = ScriptComponent() elif type_ == 'collider': if not self.get_component('collider') and not self.get_component( 'composite collider'): new_component = Collider(self) elif type_ == 'composite collider': if not self.get_component('collider') and not self.get_component( 'composite collider'): new_component = CompositeCollider(self) elif type_ == 'animation': if not self.get_component('animation'): new_component = Animation(self) elif type_ == 'particle emitter': if not self.get_component('particle emitter'): new_component = ParticleEmitter(self) if new_component is not None: self.components.append(new_component) return new_component else: raise Exception(f"component {type_} does not exist")
def __init__(self, w, pos_x, pos_y, health, g_controller): self.g_controller = g_controller self.health = health self.w = w self.img = PhotoImage(file='sprites/enemy.png') self.size = (self.img.width(), self.img.height()) self.col = Collider('enemy', self.size[0], self.size[1]) self.pos_x = pos_x self.pos_y = pos_y self.graphic = Frame(width=self.size[0], height=self.size[1], bg='black') Label(self.graphic, image=self.img, bg='black').pack() self.health_ui = Label(self.graphic, fg='white', bg='black') self.health_ui.pack() self.update_health_ui()
def get_optimised_rects(self, map): rects = [] for x in range(len(map)): for y in range(len(map[0])): if map[x, y] == 255: rect_x = x rect_y = y rect_width, rect_height = self.find_rect_size(map, x, y) rect_fill_sum = np.sum(map[rect_x:rect_x + rect_width, rect_y:rect_y + rect_height]) if rect_fill_sum == rect_width * rect_height * 255: rects.append( Collider((rect_x, rect_y), (rect_width, rect_height))) map[rect_x:rect_x + rect_width, rect_y:rect_y + rect_height] = 0 else: rects.append(Collider((rect_x, rect_y), (1, 1))) map[x, y] = 0 return rects
def on_key_press(key, modifiers): if key == pyglet.window.key.E: self.add_game_objects((GameObject( Collider.random_polygon(6, np.random.randint(50, 101)), Rigidbody(1., 2e4, np.array([650., 800 + i * 300]), np.pi / 3)) for i in range(8))) print(len(self.constraints)) elif key == pyglet.window.key.R: self.offset = np.zeros(2) self.objects = deepcopy(snapshot) elif key == pyglet.window.key.P: self.paused = not self.paused
def __init__(self, gru_file=None): self.menu = Menu(self, config, game = None) self.library = Library(self, config) self.collider = Collider(self.menu, self.library, game=None) self.dispatcher = Dispatcher(self.collider, self.library, self.menu, game=None) self.clock = pygame.time.Clock() self.fps = Fps(self.clock, config) if gru_file is not None: game = Game(gru_file) self.load(game) else: self.game = None
def __init__(self, w, pos_x, pos_y, g_controller): self.g_controller = g_controller self.health = 100 self.w = w self.img = PhotoImage(file='sprites/player.png') self.size = (self.img.width(), self.img.height()) self.pos_x = pos_x - self.size[0]/2 self.pos_y = pos_y self.speed = 18 self.reload_time = 200 self.can_fire = True self.col = Collider('player', self.size[0], self.size[1]) self.graphic = Frame(width=self.size[0], height=self.size[1], bg='black') Label(self.graphic, image=self.img, bg='black').pack() w.bind('<KeyPress>', self.on_press) self.move()
def __init__(self, **kwargs): super(Game, self).__init__(**kwargs) self.set_gamemode() self.path = [self.source] self.system = System(page(self.source)) self.collider = Collider() self.player = Spaceship() self.add_widget(self.system.star) for planet in self.system.planets: self.add_widget(planet) self.controller = Controller(self.player) self.add_widget(self.player) Clock.schedule_interval(self.update, 1.0 / 60.0)
line.penup() else: line.pendown() line.forward(80) screen = Screen() screen.setup(width=1200, height=800) screen.bgcolor("black") screen.title("Hamsik2rang's Pong") screen.tracer(0) screen.listen() draw_line() collider = Collider() player = Player(collider) ball = Ball(collider=collider) enemy = Enemy(collider=collider, ball=ball) referee = Referee(player=player, enemy=enemy, ball=ball) screen.update() collider.set_player(player) collider.set_enemy(enemy) collider.set_ball(ball) ball.set_referee(referee=referee) screen.onkeypress(key="Up", fun=player.move_up) screen.onkeypress(key="Down", fun=player.move_down)
def get_collider(self): return Collider((self.x, self.waving_y), (self.radius, self.radius), is_circle=True)
from collider import Collider from game_manager import GameManager screen = t.Screen() screen.setup(width=600, height=600) screen.bgcolor("black") screen.title("Snake Game") screen.tracer(0) snake = Snake() screen.update() food_spawner = FoodSpawner() screen.update collider = Collider(snake=snake, food_spawner=food_spawner) game_manager = GameManager(snake=snake, food_spawner=food_spawner, collider=collider) collider.ref_game_manager(game_manager) screen.listen() screen.onkey(key="Left", fun=snake.turn_left) screen.onkey(key="Right", fun=snake.turn_right) screen.onkey(key="Up", fun=snake.turn_up) screen.onkey(key="Down", fun=snake.turn_down) # write game logic below while game_manager.game_is_on: screen.update()
def get_colliders(self): return [Collider((self.x, self.y), (6, 6), is_circle=True)]
class Player: def __init__(self, w, pos_x, pos_y, g_controller): self.g_controller = g_controller self.health = 100 self.w = w self.img = PhotoImage(file='sprites/player.png') self.size = (self.img.width(), self.img.height()) self.pos_x = pos_x - self.size[0]/2 self.pos_y = pos_y self.speed = 18 self.reload_time = 200 self.can_fire = True self.col = Collider('player', self.size[0], self.size[1]) self.graphic = Frame(width=self.size[0], height=self.size[1], bg='black') Label(self.graphic, image=self.img, bg='black').pack() w.bind('<KeyPress>', self.on_press) self.move() def move(self): if self.is_dead() is True: return self.col.set_position(self.pos_x, y=self.pos_y) self.graphic.place(x=self.pos_x, y=self.pos_y) def on_press(self, key): if self.is_dead() is True: return try: if key.char is 'd': self.pos_x += self.speed elif key.char is 'a': self.pos_x -= self.speed elif key.char is ' ': self.shoot() except AttributeError: pass def shoot(self): if self.can_fire is True: self.can_fire = False Projectile(self.w, self.pos_x + self.size[0] / 2, self.pos_y, -1, self.enemies, 'yellow', self.g_controller) self.w.after(self.reload_time, self.reload_weapon) def reload_weapon(self): self.can_fire = True def damage(self): self.health -= 15 self.on_player_damage() if self.health <= 0: self.die() return pass def die(self): self.graphic.destroy() def is_dead(self): return self.health <= 0