#set the stage
stage.set_background("jupiter")
#set gravity zero initially so platforms and everything else stays in place
stage.set_gravity(0)
#disable ceiling cause sprite needs to fly higher
stage.disable_ceiling()
#variables
game_over = False
coins = []
platforms = []
springs = []
# this is needed if you need a general variable and multi levels
# I still kept this in case you add more levels later
ground = ""
player = ""
door = ""
#Level 1
def level_1():
global player, ground, door, platforms
door = codesters.Rectangle(-225 ,-162.5, 50, 75, "orange")
#need to set gravity off manually
door.set_gravity_off()
ground = codesters.Rectangle(0, -225, 500, 50, "brown")
platform1 = codesters.Rectangle(-225, 0, 50, 25, "brown")
platforms.append(platform1)
platform2 = codesters.Rectangle(-50, 100, 50, 25, "brown")
platforms.append(platform2)
platform3 = codesters.Rectangle(-225, 175, 50, 25, "brown")
platforms.append(platform3)
platform4 = codesters.Rectangle(65, 150, 80, 50, "brown")
platforms.append(platform4)
platform5 = codesters.Rectangle(150, 25, 50, 25, "brown")
platforms.append(platform5)
platform6 = codesters.Rectangle(225, 125, 50, 25, "brown")
platforms.append(platform6)
platform7 = codesters.Rectangle(0, 125, 50, 400, "brown")
platforms.append(platform7)
#use for loops to make it faster
for i in platforms:
i.set_gravity_off()
coin1 = codesters.Sprite("coin", -225, 25)
coins.append(coin1)
coin2 = codesters.Sprite("coin", -50, 125)
coins.append(coin2)
coin3 = codesters.Sprite("coin", -225, 200)
coins.append(coin3)
coin4 = codesters.Sprite("coin", 50, 185)
coins.append(coin4)
coin5 = codesters.Sprite("coin", 150, 50)
coins.append(coin5)
coin6 = codesters.Sprite("coin", 225, 150)
coins.append(coin6)
# for looops in a list to access items faster
for i in coins:
i.set_size(0.5)
i.set_gravity_off()
spring1 = codesters.Sprite("basketball", -125, -175)
springs.append(spring1)
spring2 = codesters.Sprite("basketball", 225, -175)
springs.append(spring2)
for i in springs:
i.set_gravity_off()
player = codesters.Sprite("alien1", -225, -170)
player.set_size(0.3)
player.can_jump = False
#need to save location so player can jump back to original location
player.location = ""
stage.set_gravity(10)
level_1()
#player movement
def move_right():
player.set_x_speed(5)
stage.event_key("right", move_right)
def move_left():
player.set_x_speed(-5)
stage.event_key("left", move_left)
#gravity
def interval():
# apply friction
player.set_x_speed(player.get_x_speed()*.7)
if player.location != "":
#makes the player fall after it reaches the end of the platform
fall_width = (player.get_width() + player.location.get_width()) / 2
if abs(player.get_x() - player.location.get_x()) > fall_width:
player.location = ""
player.set_gravity_on()
player.can_jump = False
stage.event_interval(interval, 0.05)
def landing(player, landing_pad):
player.set_y_speed(0)
player.set_bottom(landing_pad.get_top())
player.location = landing_pad
player.set_gravity_off()
player.can_jump = True
#jump
def move_up():
if player.can_jump == True:
player.location = ""
player.set_y_speed(12)
player.set_gravity_on()
player.can_jump = False
stage.event_key("up", move_up)
#collision function
def player_collision(sprite, hit_sprite):
if hit_sprite == ground:
landing(sprite, hit_sprite)
elif hit_sprite in coins:
stage.remove_sprite(hit_sprite)
coins.remove(hit_sprite)
# when you collect all coins and door coor changes to green
if len(coins) == 0:
door.set_color("green")
elif hit_sprite.get_color() == "green":
stage.remove_sprite(sprite)
You_Win = codesters.Text("You Win", 0, 0, "White")
game_over = True
You_Win.set_size(2)
#make sure you dont go through the platform and they act as physics bariers
elif hit_sprite in platforms:
if sprite.get_y() > hit_sprite.get_top():
landing(sprite, hit_sprite)
elif sprite.get_y() < hit_sprite.get_bottom():
sprite.set_top(hit_sprite.get_bottom())
sprite.set_y_speed(0)
elif sprite.get_x() > hit_sprite.get_right():
sprite.set_left(hit_sprite.get_right())
sprite.set_x_speed(0)
elif sprite.get_x() < hit_sprite.get_left():
sprite.set_right(hit_sprite.get_left())
sprite.set_x_speed(0)
#when you touch the spring
elif hit_sprite in springs and player.get_y_speed() < 0:
sprite.location = ""
sprite.set_y_speed(20)
player.event_collision(player_collision)