Partage
  • Partager sur Facebook
  • Partager sur Twitter

Définir une zone spécifique dans Pygame

Génération aléatoire de coordonnées X et Y

    23 mai 2021 à 14:38:14

    Bonjour à tous !

    Je suis actuellement en train de développer un jeu en Pygame, dont vous avez un aperçu sur la capture d'écran ci-dessous. Il s'agit d'un "Dodger".

    L'objectif est simple. Le joueur, représenté par ce magnifique carré souriant, doit éviter les étoiles, ici les carrés blanc, qui cherchent à entre en collision avec lui. J'a d'autres fonctionnalités en place comme ce carré rouge mais ce n'est pas cela dont je vais vous parler.

    Les carrés blancs fonctionnent de la sorte : À leur création, une 8 des direction de déplacement sur un axe 2D leur est assignée aléatoirement (haut, bas, gauche, diagonale droit haut,...). Et afin de laisser au joueur le temps de les voir pour les esquiver, je veux que les étoiles soient crées en dehors de la fenêtre.

    Voici un schéma pour me faire comprendre :

    Le bleu correspond à la fenêtre visible par le joueur et le rouge est la zone ou j'aimerais vois apparaître mes étoiles.

    Ainsi la question que je vous pose est la suivante : Connaîtriez vous un moyen pour définir graphiquement une zone spécifique avec Pygame ou en python de manière plus générale afin d'y générer aléatoirement des coordonnées x et y ?

    Merci d'avance à ceux qui prendront le temps de lire d'écrire une réponse !

    -
    Edité par KuroWhite 23 mai 2021 à 14:47:48

    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2021 à 15:51:03

      En gros tu veux générer des coordonnées aléatoires uniquement dans la zone rouge. Suffit de générer x et y en fonction de x tel que (x,y) ne n'appartiennent pas à la zone bleue.
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        23 mai 2021 à 19:37:32

        josmiley a écrit:

        En gros tu veux générer des coordonnées aléatoires uniquement dans la zone rouge. Suffit de générer x et y en fonction de x tel que (x,y) ne n'appartiennent pas à la zone bleue.

        J'ai d'abord essayé cette approche mais je ne la trouvais pas optimale car elle nécessitait beaucoup trop de lignes de codes. En fait pour l'axe X ce que j'ai fait pour l'instant c'est que j'ai crée deux intervalles. Un pour la partie rouge de gauche et un pour la partie rouge de droite. Ainsi, je serai toujours dans le rouge et jamais dans le bleu. Je pourrais faire la même chose pour l'axe des y mais cette simple fonctionnalités me demandait déjà trop de lignes de codes pour l'axe X. C'est pourquoi je demandais s'il y'avait un moyen de définir graphiquement une zone correspondant au bandeau rouge de mon schéma.

        Merci pour ta réponse !

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2021 à 20:15:27

          Bah tu prends (x,y) eu pif, si (x,y) est contenu dans la zone bleue tu réaffectes y pour le sortir du bleu. Je pense que ça doit faire 5 lignes max.

          Sinon si c'est juste pour faire apparaitre les petits carrés en dehors de l'écran, c'est plus simple.

          from pygame import *
          from random import randint
          
              
          run = True
          
          while run:
              
              
              scr = display.set_mode((1000,700))
              scr.fill((150,50,50))
              scr.fill((50,50,150),(40,40,920,620))
              draw.rect(scr,(0,0,0),(20,20,960,660),1)
              
              
              if randint(0,1):
                  x = randint(20,960)
                  y = (20,680)[randint(0,1)]
              else:
                  x = (20,980)[randint(0,1)]
                  y = randint(20,660)
                  
              
              petitCarreBlanc = Rect(0,0,40,40)
              petitCarreBlanc.center = (x,y)
              scr.fill(-1,petitCarreBlanc)
              
              display.flip()
              
              while 1:
                  ev = event.wait()
                  if ev.type == QUIT:
                      run = False
                      break
                  if ev.type == KEYDOWN and ev.key==K_SPACE:
                      break
                  
          



          -
          Edité par josmiley 23 mai 2021 à 21:00:40

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            3 septembre 2021 à 23:17:34

            Salut ça fait longtemps désolé. J'ai réussi à tout comprendre sauf cette ligne :

            y = (20, 680)[randint(0, 1)]

            Tu peux m'expliquer s'il te plaît ?

            -
            Edité par KuroWhite 3 septembre 2021 à 23:18:52

            • Partager sur Facebook
            • Partager sur Twitter
              6 septembre 2021 à 11:23:23

              essai la commande pour la tester, tu devrais comprendre son fonctionnement (tirer au hasard l'une au l'autre des coordonnées)
              • Partager sur Facebook
              • Partager sur Twitter

              Définir une zone spécifique dans Pygame

              × 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