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

Python Discussion :

Jeu 'Flood' et remplissage par diffusion


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Jeu 'Flood' et remplissage par diffusion
    Salut !!

    J'aurai besoin d'aide svp. J'ai un projet en progra (python)qui est de créer un jeu à partir d'un squelette (le jeu c'est flood) mais j'ai énormément de mal étant donné que j'e n'ai pas un très très bon niveau et que je suis à peine en L1.

    Y'aurait-il une âme charitable qui accepterait de m'aider afin de venir à bout de ce projet ?

    Merci d'avance, je compte sur vous !!

    flood1.0.py
    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
    # ==============================================================================
    """FLOOD : 2-player implementation of the 'Flood' game"""
    # ==============================================================================
    __author__  = "Flood"
    __version__ = "1.0" #  version
    __date__    = "2022-05-08"
    # ==============================================================================
    from ezTK import *
    from random import randrange as rr
    # ------------------------------------------------------------------------------
    def config(rows=18, cols=12, colors=6, nameA='Player A', nameB='Player B'):
      """create the config window and pack the widgets"""
      global win,row,col; fontA, fontB = 'Arial 12', 'Arial 20 bold'
      row=rows
      col=cols
      win=Win(title='FLOOD', border=1, op=1)
     
      Label(win,text='CONFIGURATION',font=fontB, grow=False, border=5, bg='black', fg= 'white')
      frame=Frame(win,fold=2)
     
     
      lA=Label(frame,text='Name of player A :',grow=False)
      win.nameA=Entry(frame, width=10); win.nameA.state=nameA
     
      lB=Label(frame,text='Name of player B :',grow=False)
      win.nameB=Entry(frame, width=10); win.nameB.state=nameB
     
      lR=Label(frame,text='Number of rows :',grow=False,width=15 )
      win.rowscale = Scale(frame, scale=(1,36), length=200, flow='E',state=rows)
     
      lC=Label(frame,text='Number of cols :',grow=False,width=15)
      win.colscale = Scale(frame, scale=(1,54), length=200, flow='E',state=cols)
     
      lc=Label(frame,text='Number of colors :',grow=False,width=15)
      win.colorscale = Scale(frame, scale=(1,8), length=200, flow='E',state=colors)
     
      Button(win,text='START',font=fontB, grow=False, border=5, bg='black', fg= 'white', command=game)
     
     
    # ------------------------------------------------------------------------------
    def game():
      """create the game window and pack the widgets"""
      global win,row,col; fontA, fontB = 'Arial 16 bold', 'Arial 36 bold'
      rows, cols, colors, nameA, nameB = win.rowscale.state, win.colscale.state, win.colorscale.state, win.nameA.state, win.nameB.state
      win.exit()
      colors = ('#F00','#0F0','#00F','yellow','magenta','cyan','orange','grey')
      win = Win(title='FLOOD', bg='white', op=2, grow=False, flow='ES')
      frA=Frame(win, grow=False)
      Label(frA, text=nameA, grow=False, font=fontA)
      frA1=Frame(frA, fold=4, grow=False)
      frA2=Frame(frA)
      frA3=Frame(frA)
      frB=Frame(win, fold=cols)
      lettres = ('A','Z','E','R','Q','S','D','F')
      for n in range (len(colors)):
        Label(frA1, text=lettres[n],bg=colors[n], font=fontA, border=2, width=2)
      Label(frA2, text='Steps :',grow=False, font=fontA, border=2,width=10)
      Label(frA3, text='Score :',grow=False, font=fontA, border=2,width=10)
     
      for loop in range(rows*cols):
        Brick(frB, height=64, width=64, border=2, bg=colors, state=0)
     
     
      states = frB[0][0].states # get number of states for each grid cell
      for r in range(rows):
        for c in range(cols):
          frB[r][c].state = rr(states) # set selected widget to random state
     
     
      frC=Frame(win, grow=False)
      frC1=Frame(frC)
      frC2=Frame(frC)
      frC3=Frame(frC, fold=4, grow=False)
      Label(frC1, text='Score :',grow=False, font=fontA, border=2,width=10)
      Label(frC2, text='Steps :',grow=False, font=fontA, border=2,width=10)
      lettres2=('U','I','O','P','J','K','L','M')
     
      for j in range (len(colors)):
        Label(frC3, text=lettres2[j],bg=colors[j], font=fontA, border=2,width=2)
      Label(frC, text=nameB, grow=False, font=fontA)
     
    # ------------------------------------------------------------------------------
    def on_key(widget, code, mods):
      """callback function for all keyboard events"""
      if code not in ('A','Z','E','R','Q','S','D','F'): return # wrong key (= not a directional key)
      move(code) # apply move for frog in selected direction
    # ------------------------------------------------------------------------------
    def move(direction):
      """find empty cell and move its neighboring frog in provided direction"""
      row, col, colors = win.rowscale.state, win.colscale.state, win.colorscale.state # create local shortcuts
     
     
     
     
     
     
      # TODO : get current player and seed cell from code of key pressed
      # TODO : call 'flood' starting with seed cell of current player
      # TODO : update score and steps values on window
      # TODO : call 'victory' if current player fulfils victory condition
    # ------------------------------------------------------------------------------
    def flood(row, col, old, new):
      """apply recursive flood fill algorithm using (row,col) as seed cell"""
      # TODO : check these web pages to get info about the flood fill algorithm :
      # - https://en.wikipedia.org/wiki/Flood_fill
      # - https://fr.wikipedia.org/wiki/Algorithme_de_remplissage_par_diffusion
    # ------------------------------------------------------------------------------
    def victory():
      """play victory animation"""
      # TODO : show winner by blinking his score on window
    # ==============================================================================
    if __name__ == "__main__":
      config()
    # ==============================================================================

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut !

    Je ne connaissais pas ce "jeu", visiblement c'est un exo régulier : https://www.developpez.net/forums/d2...thon-flood-it/

    Ca à l'air amusant à coder ce truc mais pas si simple à première vue en effet...

    Encore ce fameux algorithme de remplissage @Sve@r !?

    Si ça peut aider : https://github.com/alkashef/pyFlood



    PS : Rien à voir windows 11 in the PC ! Une révolution ! Nan je déconne ! ^^

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par LeNarvalo Voir le message
    Je ne connaissais pas ce "jeu", visiblement c'est un exo régulier : https://www.developpez.net/forums/d2...thon-flood-it/]
    On le trouve sur les Linux sous le nom de "sgt-flood" dans le paquetage "sgt-puzzles" (apt install sgt-puzzles). Il faut, par le biais de choix judicieux, remplir toute la zone d'une couleur unie.
    Nom : flood1.png
Affichages : 280
Taille : 7,4 Ko
    On commence avec la case en haut à gauche (ok dans cet exemple j'ai déjà joué 3 coups mais au début elle est seule de sa couleur). Ensuite chaque clic sur une case adjacente remplit toute la zone de cette couleur. Si par exemple je clique sur "jaune" du dessous tout devient jaune en y incluant toutes les cases jaunes qui la touchent (ok là il n'y en n'a pas d'autres). Mais si ensuite je clique sur le "orange" du dessous ça incluera aussi les deux "orange" de la droite. Ou alors d'abord le rouge du dessous ce qui incluera aussi le rouge de la droite pour qu'ensuite le orange dont j'ai parlé englobe aussi les deux oranges en haut à droite ainsi que le 4° orange isolé un peu en dessous à droite.
    Faut donc essayer soit de ramasser le plus de cases à chaque coup, soit regrouper les isolés pour les ramasser tous d'un coup plus tard ; pour arriver au final à tout remplir avec le nb de coups donnés au départ
    Nom : flood2.png
Affichages : 277
Taille : 8,3 Ko

    Citation Envoyé par LeNarvalo Voir le message
    Encore ce fameux algorithme de remplissage @Sve@r !?]
    Hé oui, c'est lui. On le trouve sur Wikipedia avec une implémentation basée sur une pile (ce qui évite le souci de récursion limitée). Il m'avait bien aidé le jour où sur un site de challenge de programmation je devais trouver la surface d'une figure un peu chaotique (suffit de remplir et compter).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/12/2010, 18h18
  2. Réponses: 2
    Dernier message: 12/06/2009, 14h47
  3. TableViewer et remplissage par mockobjects
    Par skud dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 07/05/2008, 10h14
  4. Réponses: 1
    Dernier message: 17/04/2008, 10h10
  5. Jeu de Stratégie tour par tour en Java
    Par Thommas dans le forum Général Java
    Réponses: 13
    Dernier message: 30/04/2007, 17h00

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