class Boule :
def __init__(self):
self.x = 50 #coordonnées X et Y de la boule (coin supérieur
gauche)
self.y = 42 #ici, totalement arbitraires, hein c'est juste
une position de départ, et c'est toi qui code une fonction de déplacement
(dans l'objet)
self.tx = 60 #et la taille.
self.ty = 60
...
if boule_x < fusée_x+fusée_taille_X or boule_x+boule_taille_x > fusée_x :
#on a la fusée qui est verticalement centrée sur la fusée.
#Tu teste comme si dessus avec y à la place de x pour savoir si
c'est également le cas horizontalement
#et si c'est le cas, alors les deux hitbox se touchent/se croisent
from tkinter import * from PIL import Image, ImageTk from getpass import getpass import random import sys x = 100 y = 250 dx = 0 dy = 10 chrono_var=0 bx1,by1=1350,random.randint(100,490) # definition des variables x1,y1=200,490 # definition des variables y2,x2=y1,x1 # definition des variables point=0 # definition des variables temoin=0 # definition des variables x=5 # definition des variables ####################################################################Definitions def reset(): global play python = sys.executable os.execl(python, python, * sys.argv) def monte (event=None): global y,dy, img #on importe ce dont on a besoin y = y - dy #on change la hauteur if y<-29 : y= 510 #changer les coordonnées can.coords(img,x,y) can.update()#update du cavnas def descend (event=None): global x, y, dy, img y = y + dy if y>510 : y= -29 can.coords(img,x,y) can.update() def boucle_principale(): global top, depart, chrono_var_princ, chrono_var #faire avancer les obstacles #gérer le chronomètre chrono_var = chrono_var + 1 ####change la valeur chrono_var_princ.set(str(chrono_var)) fen.after(100, boucle_principale) can.update() def play(): global jeu_lance, chrono_var_princ, label_chrono jeu_lance=True can.delete(menu) ###construire le compteur chrono_var_princ = StringVar() label_chrono = Label(fen, textvar = chrono_var_princ, bg='white') label_chrono.pack() fen.after(1, boucle_principale) def vitehaut(event=None): global x, y, img y = y - 150 if y<-29 : y= 510 can.coords(img,x,y) can.update() def vitebas(event=None): global x, y, img y = y + 150 if y>510 : y= -29 can.coords(img,x,y) can.update() def connection() : global iden,mdp if iden=="rayane" and mdp=="bonjour": print("bravo") else : print("perdu") #getpass(prompt='Password:Bonjour ', stream=None) def boule():# global bx1,by1,x1,y1,point,x,x2,y2, test #importation des variables bx1=bx1-x #variable utilisee pour faire bouger la boule sur x can.coords(balle,bx1,by1,bx1-20,by1-20) # applicationd e la variable changée à la boule if y2<by1 and y2>by1-20 and x2<bx1 and x2>bx1-20: #verification des coordonees de la boule pour voir si elle touche la grosse boule bx1=1200 #remettre les coordonees de la boule à 0 pour repartir d'au dessus by1=random.randint(10,390) #position aléatoire de la boule sur Y fen.after(1,boule) #refaire redescendre la nouvelle boule sans arrets elif bx1<0: #si la balle a pasé le vaisseau bx1=1200 #remettre les coordonees de la boule à 0 pour repartir d'au dessus by1=random.randint(10,390) #position aléatoire de la boule sur Y fen.after(1,boule) #refaire redescendre la nouvelle boule sans arrets elif bx1>0: # si la boule est toujours "en jeu" fen.after(1,boule) #la boule avance ################################################################################################# ################################################################################################# ######################################### PROGRAMME ##################################### ################################################################################################# ################################################################################################# ###############################################premiere fenetre avec identification #iden=get(entr1) #mdp=get(entr2) fen0 = Tk() bouton1=Button(fen0,bg="blue", text="connection",width=15, command=connection) bouton1.pack() txt0 = Label(fen0, text = "Bienvenue sur Fuse, veuillez vous connecter sur votre session") txt1 = Label(fen0, text = 'Identifiant :') txt2 = Label(fen0, text = 'Mot de Passe :') entr1 = Entry(fen0) entr2 = Entry(fen0) txt0.grid(row=-0) txt1.grid(row =1) txt2.grid(row =2) entr1.grid(row =1, column =1) entr2.grid(row =2, column =1) bouton1.grid(row=3, column =1) fen0.mainloop() #################################################################################MOT DE PASSE############ #import getpass #getpass(prompt= "Bonjour", stream=None) ########################################################Fenetre avec canevas #création de la fenêtre fen = Tk() fen.title("FUSE") texte=Label(fen,text="BIENVENUE SUR FUSE ") texte.pack() #on ouvre l'image image_tk = ImageTk.PhotoImage(Image.open("image.jpg")) #on la transforme pour tk #on la met dans le canvas can = Canvas(fen,width=1300, height=600) can.pack() fusee_tk = ImageTk.PhotoImage(Image.open("fusee.gif")) image = can.create_image(-19,0, anchor = NW, image=image_tk) img = can.create_image(x,y, anchor = NW, image=fusee_tk) menu_tk = ImageTk.PhotoImage(Image.open("menu.png")) menu = can.create_image(0,0, anchor = NW, image=menu_tk) can.delete(image_tk) #########################################################Creation de la balle balle = can.create_oval(bx1, by1, bx1-20, by1-20,width=35, fill="black") # creation de la balle ##########################################################Creation de boutons bouton= Button(fen, bg="white", text = "PLAY",height=5,width=20, command = play) bouton.pack() bou1 = Button(fen, text='GO',width=20, command=boule) # creation du bouton pour lancer le programme, permet aussi a la boule d'aller plus vite bou1.pack() bouton=Button(fen,bg="red", text="Quitter",width=20, command=fen.destroy) bouton.pack() ################################################Lier les évènements clavier fen.bind("<Up>",monte) fen.bind("<Down>",descend) fen.bind("a",vitehaut) fen.bind("q",vitebas) #fen.bind("<Space>", boost) #a garder a la fin fen.mainloop()
posX += (toucheDroite-toucheGauche)*vitesse
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionif (bx1<= xf <= by1+20 or bx1-20 <= xf <= by1+20 and bx1-20 <= xf <= bx1+20) and xf == 10:
can.delete(img)
hitbox_boule = (30, 30) # La boule fait 30x30 pixels (par exemple) hitbox_fusee = (60, 20) # La fusée fait 60x20 pixels (par exemple) def check_collision( coordsA, coordsB, hitboxA = (1,1), hitboxB = (1,1) ): # Note : les coordonnées doivent être le centre de l'objet collision_x = coordsB[0] - hitboxB[0]/2 - hitboxA[0]/2 < coordsA[0] < coordsB[0] + hitboxB[0]/2 + hitboxA[0]/2 collision_y = coordsB[1] - hitboxB[1]/2 - hitboxA[1]/2 < coordsA[1] < coordsB[1] + hitboxB[1]/2 + hitboxA[1]/2 # Pour qu'il y ai collision, il faut collision sellon x et selon y return collision_x and collision_y if check_collision( (x, y), (bx1, by1), hitbox_boule, hitbox_fusee ): can.delete(img)
def check_collision( coordsA, coordsB, hitboxA = (1,1), hitboxB = (1,1), anchor="CENTER" ): # Note : les ancres valides sont soit CENTER soit une composition des lettres N, S, W et E comme dans tkinter (majuscule ou minuscule). # Les calculs de collision se baseront sur les coins supérieur gauche, en fonction de l'ancre, on va déterminer les coordonnées de ces points. CORRECTION = (-0.5, -0.5) anchor_definition = { "N": (0, 0.5), "S": (0, -0.5), "W": (0.5, 0), "E": (-0.5, 0) } if anchor.upper() != "CENTER": for letter in anchor: CORRECTION = (CORRECTION[0] + anchor_definition[letter.upper()][0], CORRECTION[1] + anchor_definition[letter][1]) (upper_leftA, upper_leftB) = ((coordsA[0] - int(hitboxA[0]*CORRECTION[0]), coordsA[1] - int(hitboxA[1]*CORRECTION[1])), (coordsB[0] - int(hitboxB[0]*CORRECTION[0]), coordsB[1] - int(hitboxB[1]*CORRECTION[1]))) # Et maintenant on regarde si il y a collision ! return (upper_leftB[0] - hitboxA[0] < upper_leftA[0] < upper_leftB[0] + hitboxB[0]) and (upper_leftB[1] - hitboxA[1] < upper_leftA[1] < upper_leftB[1] + hitboxB[1])
16 mai 2014 à 02:22