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))
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))
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))
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)
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)
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()
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()
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)
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)
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))
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))
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)