Partage
  • Partager sur Facebook
  • Partager sur Twitter

Simulation de gravité - Tkinter

Python

    25 mars 2019 à 16:50:02

    Bonjour,

    je souhaiterai crée un jeu de plateforme dans le cadre du projet d'ISN (Informatique et Science du Numérique) pour le baccalauréat. Néanmoins, malgré de nombreuses recherche sur internet site français et anglophone, je n'ai pas trouver de moyen de simuler une gravité/saut afin de permettre à mon "personnage" de retomber au sol. Je travaille sous Python/Tkinter, quelqu'un aurait l'amabilité de m'aider, merci.

    Voici mon code pour le moment:

    #Pour éviter les erreur entre les différentes versions de python
    try:
        from tkinter import *
        from tkinter import messagebox
    except ImportError:
        from Tkinter import *
        from tkinter import messagebox
    from random import *
    import time 
    
    #------Fenetre--------
    fen = Tk()
    fen.title('Jeu')
    #------Variables-------
    x_def = fen.winfo_screenwidth() - 20 #Recupere la résolution horizontale de l'écran
    y_def = fen.winfo_screenheight() - 20 #Recupere la résolution verticale de l'écran
    x1 = 120
    y1 = y_def - 140
    x2 = 420
    y2 = y_def - 110
    #----Positions----
    PosX = 20
    PosY = fen.winfo_screenheight() - 80
    PosY_depart= fen.winfo_screenheight() - 80
    Liste_x1 = [x_def - 10, 105] 
    Liste_x2 = [420, 400]
    Liste_y1 = [20, y_def - 140,y_def - 110]
    Liste_y2 = [y_def -65]
    win = False
    Canevas = Canvas(fen, width = x_def, height =y_def, bg ='white')
    def Clavier(event):
        global PosX, PosY
        key = event.keysym
        print(key)
        
        if key == 'a':#deplacement vers la gauche
            if PosX <= 20 or PosX == x_def - 535 :
                pass
            else:
                PosX -= 5
        #if key == 'z':
            #PosY -= 5
        if key == 'e':#deplacement vers la droite
            if PosX == x_def -40:
                pass
            elif  PosX== x_def -680:
                messagebox.showwarning("Game Over", "Vous avez perdu", )
                PosX = 20
                PosY = PosY_depart
            else:
                PosX += 5
        if key == 'd': #Saut en avant	
            if PosY == PosY_depart:
                 PosY -= 100
                 PosX += 80
            else:
                PosY = PosY_depart
                PosX += 100
        if key == 'q': #Saut en Arriere
            if PosY == PosY_depart:
                 PosY -= 100
                 PosX -= 80
            else:
                PosY = PosY_depart
                PosX -= 100
        Canevas.coords(Pion, PosX - 15, PosY - 15, PosX + 15, PosY + 15)
    
    #-----Canevas (dessins)-----
    Pion = Canevas.create_rectangle(PosX+15, PosY+50, PosX-15, PosY-15, fill='black')
    Sol = Canevas.create_rectangle(0, y_def -50, x_def +100 , y_def, fill='Brown')
    Trou = Canevas.create_rectangle(x_def -700   , y_def -50, x_def -550 , y_def,  fill='white', tags='Mort')
    BordureTrou = Canevas.create_rectangle(x_def -700   , y_def -50, x_def -550 , y_def,  outline='white')
    
    MurDroit = Canevas.create_rectangle(x_def -120 , y_def -200, x_def -0, y_def -1000 , fill='Brown')
    #-----Plateform------
    Pl1= Canevas.create_rectangle(120, y_def - 140, 420, y_def - 110, fill='Brown')
    
    Canevas.focus_set()
    Canevas.bind('<Key>',Clavier)
    Canevas.pack(padx =0.5, pady =0.5)
    
    fen.mainloop()
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2019 à 18:08:19

      Salut, si tu ne veux pas faire une simulation physique précise, c'est pas trop compliqué.

      En gros le personnage (ou le carré) que tu contrôle doit avoir un certain nombre de paramètres :

      • une position (ça c'est ok)
      • une vitesse (vectorielle, c'est important)

      En plus de ça, il faut que tu définisses une genre de constante d'accélération de gravitation `g` (vectorielle ou non) propre à ton jeu (et l'ajuster comme tu veux pour que la gravité te convienne).

      Enfin, une fonction qui est appelée à chaque frame et qui :

      • ajoute g à la vitesse
      • ajoute la vitesse à la position

      petit truc marrant, si `g`est défini comme vecteur et que tu t'amuse à le faire pointer n'importe où, y'a moyen d'avoir une gravité complétement foireuse, genre vers le haut ou horizontale... :lol:

      Et au passage je ne sais pas si tu as vu la POO, mais si oui, elle te simplifierait bine la tache

      • Partager sur Facebook
      • Partager sur Twitter

      Simulation de gravité - Tkinter

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown