def update(self):
     super().update()
     sprite_collisions = self.find_collisions()
     for sprite, rect in sprite_collisions:
         sprite.rect.dynamic_limit(
             cdkk.Physics_Limit(rect, cdkk.LIMIT_COLLISION,
                                cdkk.AT_LIMIT_BOUNCE))
Beispiel #2
0
 def __init__(self, limits):
     super().__init__("Bat")
     self.load_image_from_file("bat.png")
     self.rect.centerx = limits.width / 2
     self.rect.top = limits.height * 0.9
     self.rect.add_limit(cdkk.Physics_Limit(
         limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_X_HOLD_POS_X))
Beispiel #3
0
 def check_bat_hits(self, bat):
     for ball in self.sprites():
         score_event = cdkk.EventManager.gc_event("UpdateScore",
                                                  score=ball.value)
         ball.rect.dynamic_limit(
             cdkk.Physics_Limit(bat.rect, cdkk.LIMIT_KEEP_OUTSIDE,
                                cdkk.AT_LIMIT_Y_BOUNCE_Y, score_event))
Beispiel #4
0
 def add_piece(self, col, row, player):
     name = "{0:02d}-{1:02d}".format(col, row)
     piece = Sprite_mnkGame_Piece(name, col, -1, player)
     destination = self.sprite("Board").cell_rect(col, row)
     piece.rect.add_limit(cdkk.Physics_Limit(
         destination, cdkk.LIMIT_OVERLAP, cdkk.AT_LIMIT_Y_CLEAR_VEL_Y))
     piece.rect.go()
     self._current_piece = name
     self.add(piece)
Beispiel #5
0
    def __init__(self, limits):
        super().__init__("Spaceship")
        self._limits = limits
        self.load_animation("Spaceship", "Spaceship{0:02d}.png", 7, crop=self.crop_image)
        self.load_spritesheet("Explosion", "Explosion.png", 4, 4)
        self.show_spaceship()
        self.rect.centerx = limits.width/4
        self.rect.centery = limits.height/2
        self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_X_HOLD_POS_X+cdkk.AT_LIMIT_Y_HOLD_POS_Y))

        return_speed = 3
        limit_rect = cdkk.cdkkRect(0,0,return_speed*2,0)
        limit_rect.center = self.rect.center
        xlimit = cdkk.Physics_Limit(limit_rect, cdkk.LIMIT_MOVE_TO, cdkk.AT_LIMIT_X_MOVE_TO_X)
        xlimit.motion = cdkk.Physics_Motion()
        xlimit.motion.velocity_x = return_speed
        self.rect.add_limit(xlimit)
        self.rect.go()
        self.set_config("auto_move_physics", True)
Beispiel #6
0
    def __init__(self, limits, obstacle):
        super().__init__("")        
        rect = cdkk.cdkkRect(100, limits.bottom-100, 50, 50)
        self.setup_shape(rect, shape_colours=["red3"], shape="Ellipse")

        # Test 1: Keep Inside
        # self.rect.set_velocity(5,-10)
        # self.rect.set_velocity(5,-5)    # Hit bottom limit
        # self.rect.set_velocity(5,-15)   # Hit top limit
        # self.rect.set_velocity(10,-10)  # Hit right limit
        # self.rect.set_velocity(-5,-10)     # Hit left limit
        # self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, AT_LIMIT_X_HOLD_POS_X + AT_LIMIT_Y_HOLD_POS_Y))
        # self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, AT_LIMIT_X_CLEAR_VEL_X + AT_LIMIT_Y_HOLD_POS_Y))
        # self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, AT_LIMIT_XY_CLEAR_VEL_XY))
        self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE))

        # Test 2: Keep Outside
        self.rect.set_velocity(5,-15)
        # self.rect.add_limit(cdkk.Physics_Limit(obstacle, cdkk.LIMIT_KEEP_OUTSIDE, AT_LIMIT_Y_HOLD_POS_Y+AT_LIMIT_Y_CLEAR_VEL_Y))
        self.rect.add_limit(cdkk.Physics_Limit(obstacle, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
 def __init__(self, value, limits):
     super().__init__()
     self.load_image_from_file(self.files[value - 1])
     self.rect.left = random.randint(limits.width * 0.2, limits.width * 0.8)
     self.rect.top = 10
     speed = value * 3 + 5
     angle = random.randint(45, 135)
     self.rect.set_speed_angle(speed, angle)
     self.rect.bounce_cor = self.rect.perfect_bounce
     self.rect.add_limit(
         cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE,
                            cdkk.AT_LIMIT_BOUNCE))
     self.rect.go()
Beispiel #8
0
 def __init__(self, value, limits):
     super().__init__()
     self.value = value
     self.load_image_from_file(self.files[value - 1])
     self.rect.left = random.randint(limits.width * 0.2, limits.width * 0.8)
     self.rect.top = 10
     speed = value * 3 + 5
     angle = random.randint(45, 135)
     self.rect.set_speed_angle(speed, angle)
     self.rect.bounce_cor = self.rect.perfect_bounce
     bounce_event = cdkk.EventManager.gc_event(
         "Boundary", ball_id=self.uuid)
     self.rect.add_limit(cdkk.Physics_Limit(
         limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE, bounce_event))
     self.rect.go()
Beispiel #9
0
    def __init__(self, bullet_type, posx, posy, limits):
        super().__init__(bullet_type)
        if bullet_type == "Bullet":
            self.update_style(Sprite_Ammunition.bullet_style)
            self.rect.set_velocity(20, 0)
        elif bullet_type == "Bomb":
            self.update_style(Sprite_Ammunition.bomb_style)
            self.rect.set_velocity(5, 0)
            self.rect.set_acceleration(0, cdkk.Physics.gravity)
        self.rect.topleft = (posx, posy)

        ev = cdkk.EventManager.gc_event("KillSpriteUUID", uuid=self.uuid, trace="Bullet-Limit")
        self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_XY_DO_NOTHING, ev))
        self.rect.go()
        self.set_config("auto_move_physics", True)
Beispiel #10
0
 def __init__(self, posx, posy, gravity, limits):
     super().__init__("FlappyBird")
     self._gravity = gravity
     self._limits = limits
     self.load_spritesheet("Bird",
                           "FlappyBird.png",
                           4,
                           4,
                           start=0,
                           end=3,
                           set_anim=True,
                           img_process=("scale", (96, 96)))
     self.rect.center = (posx, posy)
     self.rect.set_acceleration(0, self._gravity)
     self.rect.add_limit(
         cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE,
                            cdkk.AT_LIMIT_Y_HOLD_POS_Y))
     self.rect.go()
     self.set_config("auto_move_physics", True)
Beispiel #11
0
    def __init__(self, speed, limits, gap_top, gap_size):
        super().__init__("Pipe")
        self._pipe_t = cdkk.Sprite("PipeTop")
        self._pipe_b = cdkk.Sprite("PipeBottom")
        pipe_h = self._pipe_t.rect.height
        pipe_w = self._pipe_t.rect.width
        xpos = limits.right + pipe_w
        stretch_t = gap_top - pipe_h
        stretch_b = limits.height - gap_top - gap_size - pipe_h
        self._pipe_t.load_image_from_spritesheet(
            "FlappyBird.png",
            4,
            4,
            6,
            img_process=("stretch", [0, 0, stretch_t, 0]))
        self._pipe_b.load_image_from_spritesheet(
            "FlappyBird.png",
            4,
            4,
            5,
            img_process=("stretch", [0, 0, 0, stretch_b]))
        self._pipe_t.rect.bottomleft = (xpos, gap_top)
        self._pipe_b.rect.topleft = (xpos, gap_top + gap_size)
        self.add(self._pipe_t)
        self.add(self._pipe_b)

        pipe_limit = cdkk.cdkkRect(limits.left - pipe_w, limits.top, 1,
                                   limits.height)
        for s in self.sprites():
            s.set_config("Type", "Pipe")
            s.rect.set_velocity(-speed, 0)
            ev = cdkk.EventManager.gc_event("KillSpriteUUID", uuid=s.uuid)
            limit = cdkk.Physics_Limit(pipe_limit,
                                       cdkk.LIMIT_KEEP_OUTSIDE,
                                       cdkk.AT_LIMIT_XY_DO_NOTHING,
                                       event=ev)
            s.rect.add_limit(limit)
            s.rect.go()
            s.set_config("auto_move_physics", True)
 def check_bat_hits(self, bat):
     for ball in self.sprites():
         ball.rect.dynamic_limit(
             cdkk.Physics_Limit(bat.rect, cdkk.LIMIT_KEEP_OUTSIDE,
                                cdkk.AT_LIMIT_Y_BOUNCE_Y))
Beispiel #13
0
 def setup(self, posx, posy, limits):
     self.rect.right = posx
     self.rect.bottom = posy - 1
     ev = cdkk.EventManager.gc_event("KillSpriteUUID", uuid=self.uuid, trace="CaveItem-Limit")
     self.rect.add_limit(cdkk.Physics_Limit(limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_XY_DO_NOTHING, ev))
Beispiel #14
0
 def run_test(self):
     if self._next_test == 1:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(700,100,50,250))
         ball = Sprite_Ball(100, 500, 5, -13,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
         self._timer = cdkk.Timer(10, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)
     elif self._next_test == 2:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(100,100,50,250))
         ball = Sprite_Ball(700, 500, -5, -13,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
         self._timer = cdkk.Timer(5, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)
     elif self._next_test == 3:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(320,160,300,50))
         ball = Sprite_Ball(100, 500, 10, -20,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
         self._timer = cdkk.Timer(10, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)
     elif self._next_test == 4:
         obstacle1 = Sprite_Obstacle(cdkk.cdkkRect(320,160,300,50))
         obstacle2 = Sprite_Obstacle(cdkk.cdkkRect(500,350,250,50))
         ball = Sprite_Ball(100, 500, 6, -20,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle1.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle2.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
         self._timer = cdkk.Timer(10, cdkk.EVENT_GAME_TIMER_1)
         self.add(ball, obstacle1, obstacle2)
         self._balls.add(ball)
     elif self._next_test == 5:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(700,100,50,250))
         ball = Sprite_Ball(100, 500, 5, -13,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_X_CLEAR_VEL_X))
         self._timer = cdkk.Timer(5, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)
     elif self._next_test == 6:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(100,100,50,250))
         ball = Sprite_Ball(700, 500, -5, -14,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_XY_CLEAR_VEL_XY))
         self._timer = cdkk.Timer(5, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)
     elif self._next_test == 7:
         obstacle = Sprite_Obstacle(cdkk.cdkkRect(700,100,50,250))
         ball = Sprite_Ball(100, 500, 20, -12,
             cdkk.Physics_Limit(self._limits, cdkk.LIMIT_KEEP_INSIDE, cdkk.AT_LIMIT_BOUNCE),
             cdkk.Physics_Limit(obstacle.rect, cdkk.LIMIT_KEEP_OUTSIDE, cdkk.AT_LIMIT_BOUNCE))
         ball.rect.bounce_cor = 0.5
         self._timer = cdkk.Timer(6, cdkk.EVENT_GAME_TIMER_1)
         self.add(obstacle, ball)
         self._balls.add(ball)