Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from UBpygame import *
- from random import *
- from math import *
- ## ECRAN
- # Creer l'ecran - 640
- window = initialize(640, 640, "Stick Hero")
- # Recuperer la taille de l'ecran
- width = window["width"]
- height = window["height"]
- ## VARIABLES
- # Couleurs
- BROWN = (139,69,19)
- # Animations and Interactions
- interaction={'stick_raising':False, 'restart_game':False}
- stick_anim_done_once = False
- stick_r = False
- restart_g = False
- delay_anim = 10
- # Score
- game_over = False
- score = 0
- game_over_text = "GAME OVER"
- game_over_text_w = text_size(game_over_text, 50)[0]//2
- game_over_r_text = "Press 'r' to retry"
- game_over_r_text_w = text_size(game_over_r_text, 20)[0]//2
- ## ITEMS
- # Plateformes
- plateforme_y = height-height//3
- plateforme_h = height//3
- plateforme_Ini_w = width//8
- plateforme_Ini_x = width//8
- plateforme_Fin_w = randint(width//8, width//4)
- plateforme_Fin_x = randint(plateforme_Ini_x + plateforme_Ini_w + plateforme_Fin_w, width - plateforme_Fin_w - width//16)
- plateforme_New_w = 0
- plateforme_New_x = 0
- # Plank
- plank_x = plateforme_Ini_x + plateforme_Ini_w
- plank_y = plateforme_y
- plank_len_ini = 5
- plank_len = plank_len_ini
- ## PLAYER
- # Player
- player_position = [plateforme_Ini_x + plateforme_Ini_w//2, plateforme_y]
- # Ninja
- ninja_w = 40
- ninja_w_f = 10
- ninja_h = 60
- ninja_h_c = 50
- ninja_h_f = 10
- ## FUNCTION: NEW RANDOM PLATEFORME VALUES
- def GetRandomPlateforme():
- global plateforme_New_w, plateforme_New_x
- # Valeurs aleatoire pour les
- plateforme_New_w = randint(width//8, width//4)
- plateforme_New_x = randint(plateforme_Ini_x + plateforme_Ini_w + plateforme_Fin_w, width - plateforme_Fin_w - width//16) + plateforme_Fin_x
- if (plateforme_New_x < width):
- plateforme_New_x = width + 1
- ## FUNCTION: CREER LE NINJA
- def CreateNinja(pos):
- x, y = pos[0], pos[1]
- # Creer le ninja
- body = create_rectangle((x - (ninja_w//2), y - ninja_h), ninja_w, ninja_h_c, (0,0,0))
- foot_L = create_rectangle((x - (ninja_w//2) + (ninja_w//8), y - ninja_h_f), ninja_w_f, ninja_h_f, (0,0,0))
- foot_R = create_rectangle((x + (ninja_w//8), y - ninja_h_f), ninja_w_f, ninja_h_f, (0,0,0))
- eye = create_rectangle((x + (ninja_w//5), y - ninja_h + (ninja_h_c//6) + (ninja_h_c//5)), ninja_w//5, ninja_h_c//8, (255, 255, 255))
- bandana1 = create_rectangle((x - (ninja_w//2) - (ninja_w//10), y - ninja_h + (ninja_h_c//6)), ninja_w + (ninja_w//5), ninja_h_c//5, (255, 0, 0))
- bandana2 = create_rectangle((x - ninja_w + (ninja_w//8), y - ninja_h + (ninja_h_c//5)), ninja_w_f, ninja_h_f - (ninja_h_f//10), (255, 0, 0))
- bandana3 = create_rectangle((x - ninja_w + (ninja_w//8) + (ninja_w_f//10), y - ninja_h + (ninja_h_c//5) + (ninja_h_c//5)), ninja_w_f - (ninja_w_f//10), ninja_h_f, (255, 0, 0))
- # Dessiner le ninja
- draw_rectangle(body)
- draw_rectangle(foot_L)
- draw_rectangle(foot_R)
- draw_rectangle(eye)
- draw_rectangle(bandana1)
- draw_rectangle(bandana2)
- draw_rectangle(bandana3)
- ## FUNCTION: CREER LA PLATEFORME
- def CreatePlateforme(y, h, ini_w, ini_x, fin_w, fin_x, new_w, new_x):
- ## PLATEFORMES
- # Creer les plateformes
- plateforme_Ini = create_rectangle((ini_x, y), ini_w, h, (80,80,80))
- plateforme_Fin = create_rectangle((fin_x, y), fin_w, h, (80,80,80))
- if (new_x > 0):
- plateforme_New = create_rectangle((new_x, y), new_w, h, (80,80,80))
- # Dessiner les plateformes
- draw_rectangle(plateforme_Ini)
- draw_rectangle(plateforme_Fin)
- if (new_x > 0):
- draw_rectangle(plateforme_New)
- ## FUNCTION: CREER LA PLANCHE
- def CreatePlank(start_x, start_y, stop_x, stop_y, c, t):
- plank = create_line((start_x, start_y), (stop_x, stop_y), c, t)
- draw_line(plank)
- ## FUNCTION: GERER LES ANIMATIONS
- def handle_animation(cmd):
- ## GLOBALS
- global plateforme_Ini_x, plateforme_Fin_x, plateforme_New_x
- global plateforme_Ini_w, plateforme_Fin_w, plateforme_New_w
- global stick_anim_done_once, stick_r, plank_len, plank_x, plank_y
- global player_position
- global score
- ## CONDITIONS
- # Recommencer (pour tester)
- if (cmd['restart_game']):
- player_position = [plateforme_Ini_x + plateforme_Ini_w//2, plateforme_y]
- plank_len = plank_len_ini
- score = 0
- stick_r = False
- stick_r = False
- stick_anim_done_once = False
- DessinerEcran()
- refresh_window()
- delay(delay_anim)
- # Agrandir le baton
- if (cmd['stick_raising']):
- plank_len += 2
- CreatePlank(plank_x, plank_y, plank_x, plank_y - plank_len, BROWN, 5)
- refresh_window()
- delay(delay_anim)
- # Faire tomber le baton
- if (not cmd['stick_raising'] and plank_len > 5):
- if (stick_anim_done_once == False):
- # Si la planche atterit sur la plateforme
- if(plank_len > plateforme_Fin_x - plank_x and plank_len < plateforme_Fin_x - plank_x + plateforme_Fin_w):
- # Faire tourner la planche
- for d_A in range (-90, 1):
- r_A = radians(d_A)
- M = ((plank_x + cos(r_A) * plank_len), (plank_y + sin(r_A) * plank_len))
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- # Faire bouger le joueur a la plateforme
- for pp in range (player_position[0], plateforme_Fin_x + plateforme_Fin_w//2, 2):
- M = ((plank_x + cos(0) * plank_len), (plank_y + sin(0) * plank_len))
- player_position[0] = pp
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- score += 1
- Ini_x = plateforme_Ini_x
- GetRandomPlateforme()
- # Faire bouger l'ecran
- while(plateforme_Fin_x > Ini_x):
- plateforme_Ini_x -= 3
- plateforme_Fin_x -= 3
- plateforme_New_x -= 3
- player_position[0] -= 3
- DessinerEcran()
- if (plank_y < height):
- plank_y += 4
- plank_x -= 3
- M = ((plank_x + cos(0) * plank_len), (plank_y + sin(0) * plank_len))
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- DessinerEcran()
- plateforme_Ini_w, plateforme_Ini_x = plateforme_Fin_w, plateforme_Fin_x
- plateforme_Fin_w, plateforme_Fin_x = plateforme_New_w, plateforme_New_x
- plateforme_New_w, plateforme_New_x = 0, 0
- plank_x, plank_y = plateforme_Ini_x + plateforme_Ini_w, plateforme_y
- plank_len = plank_len_ini
- stick_anim_done_once = False
- # Si la planche va plus loing que la plateforme
- elif(plank_len > plateforme_Fin_x - plank_x):
- # Faire tourner la planche
- for d_A in range (-90, 1):
- r_A = radians(d_A)
- M = ((plank_x + cos(r_A) * plank_len), (plank_y + sin(r_A) * plank_len))
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- # Faire bouger le joueur a la fin de la planche
- player_fall = True
- for pp in range (player_position[0], plank_x + plank_len + ninja_w, 2):
- if (pp < width):
- M = ((plank_x + cos(0) * plank_len), (plank_y + sin(0) * plank_len))
- player_position[0] = pp
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- else:
- player_fall = False
- # Faire tomber le joueur
- if player_fall:
- for pp in range (player_position[1], height + ninja_h + ninja_h//10, 4):
- M = ((plank_x + cos(0) * plank_len), (plank_y + sin(0) * plank_len))
- player_position[1] = pp
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- stick_anim_done_once = True
- # Texte de Game Over
- draw_text(game_over_text, ((width//2)-game_over_text_w, height//3), (255,0,0), 50)
- draw_text(game_over_r_text, ((width//2)-game_over_r_text_w, height//3 + height//20), (255,0,0), 20)
- # Si la planche n'atteint pas la plateforme
- else:
- # Faire tourner la planche
- for d_A in range (-90, 91):
- r_A = radians(d_A)
- M = ((plank_x + cos(r_A) * plank_len), (plank_y + sin(r_A) * plank_len))
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- # Fair avancer le joueur
- for pp in range (player_position[0], plateforme_Ini_x + plateforme_Ini_w + ninja_w):
- M = ((plank_x + cos(radians(90)) * plank_len), (plank_y + sin(radians(90)) * plank_len))
- player_position[0] = pp
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- # Faire tomber le joueur
- for pp in range (player_position[1], height + ninja_h + ninja_h//10, 4):
- M = ((plank_x + cos(radians(90)) * plank_len), (plank_y + sin(radians(90)) * plank_len))
- player_position[1] = pp
- DessinerEcran()
- CreatePlank(plank_x, plank_y, M[0], M[1], BROWN, 5)
- refresh_window()
- delay(delay_anim)
- stick_anim_done_once = True
- # Texte de Game Over
- draw_text(game_over_text, ((width//2)-game_over_text_w, height//3), (255,0,0), 50)
- draw_text(game_over_r_text, ((width//2)-game_over_r_text_w, height//3 + height//20), (255,0,0), 20)
- stick_r = False
- refresh_window()
- ## FUNCTION: GERER LES INTERACTIONS
- def handle_interaction():
- ## GLOBALS
- global stick_r
- global restart_g
- stick_r = False
- restart_g = False
- if (is_key_pressed(K_SPACE) and stick_anim_done_once == False):
- stick_r = True
- if (plank_len > plank_y):
- stick_r = False
- if (is_key_pressed(K_r)):
- restart_g = True
- return ({'stick_raising':stick_r, 'restart_game':restart_g})
- ## FUNCTION: DESSINER SUR LECRAN
- def DessinerEcran():
- ## ECRAN
- # Fond d'ecran blanc
- clear_window()
- bg = create_rectangle((0, 0), width, height, (255, 255, 255))
- draw_rectangle(bg)
- CreatePlateforme(plateforme_y, plateforme_h, plateforme_Ini_w, plateforme_Ini_x, plateforme_Fin_w, plateforme_Fin_x, plateforme_New_w, plateforme_New_x)
- ## NINJA
- CreateNinja(player_position)
- ## SCORE
- tw, th = text_size(str(score), 50)
- draw_text(str(score), ((width//2)-tw//2, height//10), (0,0,0), 50)
- ## FUNCTION: LE JEU ET SA FENETRE
- def StickHero():
- ## GLOBALS
- global interaction
- ## ECRAN
- GetRandomPlateforme()
- DessinerEcran()
- while(not is_any_quit_event()):
- handle_animation(interaction)
- interaction = handle_interaction()
- refresh_window()
- uninitialize()
- StickHero()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement