IsakViste icon

L1: Stick Hero

IsakViste | PRO | 11/25/16 09:05:38 PM UTC | 0 ⭐ | 390 👁️ | Never ⏰ | []
Python |

12.23 KB

|

None

|

0 👍

/

0 👎

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

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎