145 lines
3.8 KiB
Python
145 lines
3.8 KiB
Python
from tkinter import *
|
|
from random import randint
|
|
import color
|
|
|
|
# Var
|
|
canvas = None
|
|
joueur = None
|
|
triangles = []
|
|
triangle = None
|
|
timer = 0
|
|
fin = 0
|
|
|
|
# Touches
|
|
gauche = False
|
|
droite = False
|
|
|
|
# Images
|
|
image_triangle = None
|
|
image_triangle_Highlight = None
|
|
image_jg = None
|
|
image_jd = None
|
|
DROITE = 'Droite'
|
|
GAUCHE = 'Gauche'
|
|
image_j = DROITE
|
|
|
|
# Main
|
|
def main(c: Canvas):
|
|
global canvas, image_triangle, image_jg, image_jd, joueur, triangle, timer, image_triangle_Highlight, triangles
|
|
|
|
canvas = c
|
|
|
|
# Images
|
|
# - Triangle -
|
|
# Origin: 8x7
|
|
# Real: 32x28
|
|
# - Personnage -
|
|
# Origin: 10x21
|
|
# Real: 40x84
|
|
image_triangle = PhotoImage(file = 'res/Triangle.png').zoom(4)
|
|
image_triangle_Highlight = PhotoImage(file = 'res/Triangle_Highlight.png').zoom(4)
|
|
image_jg = PhotoImage(file = 'res/Personnage_Gauche.png').zoom(4)
|
|
image_jd = PhotoImage(file = 'res/Personnage_Droit.png').zoom(4)
|
|
|
|
# Joueur
|
|
joueur = canvas.create_image(200, 258, image = image_jd)
|
|
|
|
# Triangle
|
|
triangles = []
|
|
timer = randint(60, 300)
|
|
|
|
# Bindings
|
|
win = canvas.master
|
|
win.bind('<q>', lambda event: gauche_event(True))
|
|
win.bind('<d>', lambda event: droite_event(True))
|
|
win.bind('<KeyRelease-q>', lambda event: gauche_event(False))
|
|
win.bind('<KeyRelease-d>', lambda event: droite_event(False))
|
|
|
|
# Loop
|
|
def loop(deltatime: float, difficulty: float, end):
|
|
deplacement_joueur(difficulty)
|
|
deplacement_triangle(difficulty)
|
|
create_triangles(difficulty)
|
|
collision()
|
|
|
|
if fin == 1:
|
|
end()
|
|
return
|
|
|
|
def create_triangles(difficulty: float):
|
|
global timer
|
|
|
|
if timer <= 0:
|
|
triangles.append(canvas.create_image(randint(20, 380), -15, image = image_triangle_Highlight))
|
|
timer = randint(120, 300)
|
|
else:
|
|
timer -= difficulty
|
|
|
|
def deplacement_joueur(difficulty: float):
|
|
global image_j
|
|
|
|
# Obtention des coordonnées du joueur
|
|
x1, _ = canvas.coords(joueur)
|
|
|
|
if droite and x1 <= 375:
|
|
canvas.move(joueur, 2 * difficulty, 0)
|
|
if image_j == GAUCHE:
|
|
canvas.itemconfigure(joueur, image = image_jd)
|
|
image_j = DROITE
|
|
|
|
if gauche and x1 >= 25:
|
|
canvas.move(joueur, -2 * difficulty, 0)
|
|
if image_j == DROITE:
|
|
canvas.itemconfigure(joueur, image = image_jg)
|
|
image_j = GAUCHE
|
|
|
|
def deplacement_triangle(difficulty: float):
|
|
for triangle in triangles:
|
|
# Obtention des coordonnées du triangle
|
|
x1, y1 = canvas.coords(triangle)
|
|
|
|
if y1 <= 282:
|
|
canvas.move(triangle, 0, 2 * difficulty)
|
|
else:
|
|
canvas.delete(triangle)
|
|
triangles.remove(triangle)
|
|
|
|
if y1 >= 30:
|
|
canvas.itemconfigure(triangle, image = image_triangle)
|
|
if y1 >= 50:
|
|
canvas.itemconfigure(triangle, image = image_triangle_Highlight)
|
|
if y1 >= 70:
|
|
canvas.itemconfigure(triangle, image = image_triangle)
|
|
|
|
def collision():
|
|
global fin
|
|
|
|
for triangle in triangles:
|
|
# Obtention des coordonnées des objets
|
|
xt, yt = canvas.coords(triangle)
|
|
xj, yj = canvas.coords(joueur)
|
|
|
|
if yt + 16 >= yj - 42:
|
|
if xj - 20 <= xt +- 2 and xt +- 2 <= xj + 20:
|
|
fin = 1
|
|
if yt + 8 >= yj - 42:
|
|
if xj - 20 <= xt + 6 and xt + 6 <= xj + 20 or xj - 20 <= xt - 6 and xt - 6 <= xj + 20:
|
|
fin = 1
|
|
if yt >= yj - 42:
|
|
if xj - 20 <= xt + 10 and xt + 10 <= xj + 20 or xj - 20 <= xt - 10 and xt - 10 <= xj + 20:
|
|
fin = 1
|
|
if yt - 8 >= yj - 42:
|
|
if xj - 20 <= xt + 14 and xt + 14 <= xj + 20 or xj - 20 <= xt - 14 and xt - 14 <= xj + 20:
|
|
fin = 1
|
|
|
|
|
|
def gauche_event(pressed: bool):
|
|
global gauche
|
|
gauche = pressed
|
|
|
|
def droite_event(pressed: bool):
|
|
global droite
|
|
droite = pressed
|
|
|
|
|