IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Problème d'overflow lors de la création du jeu Pong [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème d'overflow lors de la création du jeu Pong
    Bonjour à tous,
    j'espère poster mon message au bon endroit (je débute sur le site).
    Je suis en train de programmer le jeu "Pong" grâce au module turtle de python.
    Pour l'instant mon jeu semble fonctionnel mais il s'arrête au bout d'environ une minute à cause d'un overflow.
    Celui viendrait de la ligne 154, au moment où j'appelle avec un ontimer la fonction Mouvement(), donc de manière récursive.
    J'avais augmenté (l7) le nombre maximal d'appels récursifs mais ce n'est pas suffisant.
    Auriez-vous s'il vous plaît une méthode pour contourner ce problème d'overflow ?
    Merci d'avance,
    BDPython

    Voici le script, vous pouvez l'exécuter pour vous rendre compte du problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
     
    """ Première version Pong en mode 2 Joueurs""" 
    from turtle import *
    from time import *
    from random import *
    from math import *
    import sys
    sys.setrecursionlimit(10**9) #Augmenté au maximum, mais ça ne suffit pas...
     
    hauteur = 700
    longueur = 900
    Bord_terrain = 300
    setup(longueur, hauteur, 0, 0)
    colormode(255)
     
    #VitesseBalle = 10
    ecartBord = 30
    DeplacementJoeur = 30
     
    hideturtle()
    tracer(0)
     
    global CoinBG1,CoinBG2 
    CoinBG1, CoinBG2 = 0,0
    global BalleX,BalleY
    BalleX, BalleY = 0,0
    global Angle
    Angle = 0
    global Point1, Point2
    Point1, Point2 = 0,0
     
    #Création des crayons de chauqe joueur, et de la balle
    Joueur1 = Turtle("square")
    Joueur1.shapesize(60 / 20, 30 / 20)
    Joueur1.color("blue")
    Joueur1.penup()
    Joueur1.goto(-longueur/2 + 30,CoinBG1)
     
    Joueur2 = Turtle("square")
    Joueur2.shapesize(60 / 20, 30 / 20)
    Joueur2.color("red")
    Joueur2.penup()
    Joueur2.goto(longueur/2 - 30,CoinBG1)
     
    balle = Turtle("circle")
    balle.color("green")
    balle.penup()
     
     
    def Joueur_1_haut():
       global CoinBG1
       if CoinBG1 + DeplacementJoeur < Bord_terrain :
          CoinBG1 += DeplacementJoeur
          Joueur1.goto(-longueur/2 + ecartBord,CoinBG1)
       update()
     
    def Joueur_1_bas():
       global CoinBG1
       if CoinBG1 - DeplacementJoeur >-Bord_terrain :
          CoinBG1 -= DeplacementJoeur
          Joueur1.goto(-longueur/2 + ecartBord,CoinBG1)
       update()
     
    def Joueur_2_haut():
       global CoinBG2
       if CoinBG2 + DeplacementJoeur < Bord_terrain :
          CoinBG2 += DeplacementJoeur
          Joueur2.goto(longueur/2 - ecartBord,CoinBG2)
       update()
     
    def Joueur_2_bas():
       global CoinBG2
       if CoinBG2 - DeplacementJoeur > -Bord_terrain :
          CoinBG2 -= DeplacementJoeur
          Joueur2.goto(longueur/2 - ecartBord,CoinBG2)
       update()
     
    def reset_balle():
       global Angle
       balle.setposition(0, 0)
       Angle = randint(20, 60) + choice([0, 180]) * choice([1, -1]) 
       balle.setheading(Angle)
     
    def Nouveau_point():
       global Point1,Point2
       global CoinBG1,CoinBG2
       global BalleX
       if BalleX > 0:
          Point1+=1
          #bgcolor((163,225,243))
       else:
          Point2+=1
          #bgcolor((255,136,136))
       clear()
       goto(-longueur/4,Bord_terrain)
       write(Point1, font = ("Arial", 15, "bold"))
       goto(longueur/4,Bord_terrain)
       write(Point2, font = ("Arial", 15, "bold"))   
       reset_balle()
       Terrain()
       CoinBG1 = 0
       CoinBG2 = 0
       Joueur1.goto(-longueur/2 + 30,CoinBG1)
       Joueur2.goto(longueur/2 - 30,CoinBG2)
       update()
       sleep(3)
     
    def Terrain():
       pensize(3)
       for _ in range(-Bord_terrain+10,Bord_terrain-10,40): 
          up()
          goto(0,_)
          down()
          goto(0,_+20)   
       up()
       goto(-longueur/2 + 30,Bord_terrain)
       down()
       goto(longueur/2 + 30,Bord_terrain)
       up()
       goto(-longueur/2 + 30,-Bord_terrain)
       down()
       goto(longueur/2 + 30,-Bord_terrain)
       up()
       update()
     
    def AngleRebond(a1):
       global Angle
       Angle = -a1
       balle.setheading(Angle)
     
     
    def Mouvement():
       global BalleX,BalleY
       BalleX,BalleY = balle.position()
       global CoinBG1,CoinBG2
       global Angle
       balle.setheading(Angle)
       if BalleY> Bord_terrain -30 or BalleY< -Bord_terrain +30: 
          AngleRebond(Angle)  
       elif BalleX > (longueur/2 - 60): 
          if BalleY >= (CoinBG2-40) and BalleY <= (CoinBG2 + 40):
             balle.setheading(180 - Angle)
             Angle = balle.heading()
          else:
             Nouveau_point()
       elif BalleX < (-longueur/2 + 60):
          if BalleY >= (CoinBG1 -40) and BalleY <= (CoinBG1 + 40):
             balle.setheading(180 - Angle)
             Angle = balle.heading()
          else:
             Nouveau_point()
       balle.forward(VitesseBalle)
       update()
       ontimer(Mouvement, 20)
       exitonclick()
     
    bgcolor("black")
    pencolor("white")
    clear()
    reset_balle()  
    Terrain()
    update()
    VitesseBalle = 3 * int(numinput("Difficulté", "Veuillez saisir le niveau s'il vous plaît, entre 1 (facile) et 5 (difficile)"))
     
    listen()
    onkeypress(Joueur_1_haut, "a" )
    onkeypress(Joueur_1_bas, "q" )
    onkeypress(Joueur_2_haut, "Up")
    onkeypress(Joueur_2_bas, "Down")
     
    Mouvement()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Ça serait bien de poster le traceback complet (un tas de lignes) que vous affiche Python pour signaler l'erreur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Oui, effectivement j'aurais dû le poster directement :

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 749, in callit
      File "C:\Users\basti\OneDrive\Documents\Programmes\Jeux\Pong.py", line 152, in Mouvement
      File "<string>", line 8, in update
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 1304, in update
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 3011, in _drawturtle
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 516, in _drawpoly
      File "<string>", line 1, in itemconfigure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 2578, in itemconfigure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1476, in _configure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1327, in _options
    MemoryError: Stack overflow
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 701, in eventfun
      File "C:\Users\basti\OneDrive\Documents\Programmes\Jeux\Pong.py", line 60, in Joueur_1_bas
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 1776, in goto
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 3179, in _goto
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 2661, in _update
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 3011, in _drawturtle
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\turtle.py", line 516, in _drawpoly
      File "<string>", line 1, in itemconfigure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 2578, in itemconfigure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1476, in _configure
      File "C:\Users\basti\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1320, in _options
    MemoryError: Stack overflow

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Ben vous commencez par virer l'instruction sys.setrecursionlimit(10**9) de la ligne 8.
    Ensuite ligne 155, vous mettez en commentaire l'instruction exitonclick().
    Enfin, à la dernière ligne vous ajoutez l'instruction mainloop().

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    C'était bien ça, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Problème lors de la création du jeu Pong
    Par obscuwave dans le forum Lazarus
    Réponses: 2
    Dernier message: 25/06/2015, 13h29
  2. Réponses: 6
    Dernier message: 09/03/2008, 13h12
  3. Problême d'accent lors de la création d'un fichier txt
    Par maxmarie dans le forum Windows Mobile
    Réponses: 15
    Dernier message: 24/08/2007, 21h59
  4. Problème de charset lors de la création d'une instance 8i
    Par girint dans le forum Administration
    Réponses: 2
    Dernier message: 15/06/2007, 13h50
  5. Réponses: 8
    Dernier message: 06/06/2007, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo