示例#1
0
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()
示例#2
0
    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]
示例#3
0
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
示例#4
0
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()
示例#5
0
    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)
示例#6
0
    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")
示例#7
0
    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
示例#9
0
 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
示例#10
0
 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        
示例#11
0
    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()
示例#12
0
    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)
示例#13
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)

示例#14
0
 def get_collider(self):
     return Collider((self.x, self.waving_y), (self.radius, self.radius), is_circle=True)
示例#15
0
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()
示例#16
0
 def get_colliders(self):
     return [Collider((self.x, self.y), (6, 6), is_circle=True)]
示例#17
0
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