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

Tkinter Python Discussion :

créer des ractangles aléatoires


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut créer des ractangles aléatoires
    Bonjour

    Voici mon soucis, j'essaye tant bien que mal de créer une fonction ( j'ai lu sur des sites qu'il est préférable d'utiliser ramdon ? ) qui crée des rectangles aléatoires dans mon canvas.
    J'ai retourné mon script de toutes les façons possible et dont je suis capable, sans résultats. Je m’abandonne à vous merci pour votre aide.
    J'ai oublié de préciser ( au cas ou sa ne se voit pas assez avec mon script) que je suis débutante en langage tkinter


    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
     
    from tkinter import *
    from random import randrange
     
     
    def nouveau_jeu():
        a=0
    def rectangle():
        d=0
        b=2
        c=10
        while d<3:
           can1.create_rectangle(10+c, 10+c, 100+c, 100+c)
           d=d+1
           c=c+100
     
    def pomme(): 
        a=0
        x=randrange(840)
        y=randrange(480)
        i=0
        i2=0
        while i<rectangle:
            i2=1
     
    def perso(): #personnage
        global dx, dy, x, y, nana, direction
        nana=can1.create_rectangle(20,20,50,50)
     
    def avant(event):
        global dx, dy, x, y,nana, direction
        direction=1
        dx=0
        dy=-10
        x=x+10
        y=y+10
        can1.move(nana, dx, dy)
     
    def gauche(event):
        global dx, dy, nana
        direction=2
        dx=-10
        dy=0
        can1.move(nana, dx, dy)
     
    def droite(event):
        global dx, dy, nana
        direction=3
        dx=10
        dy=0
        can1.move(nana, dx, dy)
        direction=0
     
    def bas(event):
        global dx, dy, nana
        dx=0
        dy=10
        can1.move(nana, dx, dy)
     
    fen1=Tk()
    fen1.title("SUPER NANA ! :D")
    can1= Canvas (fen1, bg='blue', height=480, width=840)
    can1.grid(row=0, column=0, rowspan=10)
    can1.bind_all("<Up>", avant)
    can1.bind_all("<Right>", droite)
    can1.bind_all("<Down>", bas)
    can1.bind_all("<Left>", gauche)
    Button(fen1, text="Nouveau Jeu", font=("ComicSansMS"), command=perso).grid(row =4, column=1, sticky=N, padx=5)
    Button(fen1, text="Quitter", font=("ComicSansMS"),command=fen1.destroy).grid(row =6, column=1, sticky=N)
    x=randrange(840)
    y=randrange(480)
    dx=0
    dy=0
    direction=0
    score=0
    fen1.mainloop()

  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,

    Votre canvas à pour dimensions WIDTH x HEIGHT.
    Pour simplifier, posons WIDTH = HEIGHT = 500.
    Si vous voulez deux nombres aléatoires dans 0..500:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import random
    >>> x, y = random.randint(0,WIDTH), random.randint(0,HEIGHT)
    >>> x, y
    (464, 281)
    >>>
    Par contre, la figure aura une largeur et une longueur, si vous ne voulez pas que la figure "déborde" du cadre, ces (x, y) là seront le "centre".
    Si la figure est un rectangle de côté X_SIZE = Y_SIZE = 30, vous pouvez considérez ces (x, y) comme le coin en haut à gauche.
    Pour que çà ne déborde pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> x, y = random.randint(0,WIDTH-X_SIZE), random.randint(0,HEIGHT-Y_SIZE)
    Puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> canvas.create_rectangle(x, y, x+X_SIZE, y+Y_SIZE)
    1
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Oui , mais c'est possible que @bellabouh ne connaisse pas encore l'importation du module random . Donc si tu pars sur l'idée d'utiliser des fenêtres carrés .
    Wiztricks a compliqué le code , il a essayé de généraliser le concept du code de manière empirique mais j'ai du mal à saisir le role (x, y) ....

    Est-ce que ce sont des carrés ou de vrais rectangles qui seront crées ? Avec tkinter , on dirait que c'est plus simple de créer des cercles

    Encore une chose , ce serait bien @bellabouh que tu commentes chaque ligne de ton code pour que l'on saisisse mieux ce que tu souhaites réaliser ....
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  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,

    Citation Envoyé par Kurodiam Voir le message
    Encore une chose , ce serait bien @bellabouh que tu commentes chaque ligne de ton code pour que l'on saisisse mieux ce que tu souhaites réaliser ....
    Bah, c'est pas si compliqué de voir qu'elle essaie de réaliser un jeu de serpent.

    Citation Envoyé par Kurodiam Voir le message
    Est-ce que ce sont des carrés ou de vrais rectangles qui seront crées ? Avec tkinter , on dirait que c'est plus simple de créer des cercles
    rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> canvas.create_rectangle(x, y, x+X_SIZE, y+Y_SIZE)
    cercle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> canvas.create_oval(x, y, x+X_SIZE, y+Y_SIZE)
    Le plus "simple" est toujours de pianoter un peu à la console pour voir à quoi çà ressemble.

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

  5. #5
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Ok. C'est comme ce jeu qu'on trouve dans les cellulaires où le serpent doit croquer la pomme et ainsi de suite ...C'est l'un des premiers jeu qui a été inventé (d'ailleurs , j'y jouais beaucoup en augmentant les scores )
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  6. #6
    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
    Citation Envoyé par Kurodiam Voir le message
    Ok. C'est comme ce jeu qu'on trouve dans les cellulaires où le serpent doit croquer la pomme et ainsi de suite ...C'est l'un des premiers jeu qui a été inventé
    Absolument d'ailleurs, je ne comprends pas pourquoi elle n'a pas osé appeler sa nana, eve.
    "Au commencement", c'est celle qui se laisse embobiner par un serpent pour croquer une pomme.

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

  7. #7
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Bon , la métaphysique appartient au domaine de la philo , donc il faut laisser çà à des experts .Sincérement , la génese de python est amplement suffisante comme boulot ...

    Que veut-tu dire par (x,y) représente le centre ? Genre le centre du clic ...
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  8. #8
    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
    Si vous voulez rester dans le terre à terre, lancez Python en mode console.
    Puis, tapez les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> import tkinter as tk
    >>> canvas = tk.Canvas(width=500, height=500)
    >>> canvas.pack()
    >>> x = y = 0
    >>> X_SIZE = Y_SIZE = 30
    >>> canvas.delete(1)
    >>> canvas.create_rectangle(x, y, x+X_SIZE, y+Y_SIZE, fill='grey80')
    1
    >>> x = y = 490
    >>> canvas.create_rectangle(x, y, x+X_SIZE, y+Y_SIZE, fill='grey80')
    2
    >>>
    Normalement, vous devriez mieux comprendre la phrase:
    Citation Envoyé par wiztricks
    Par contre, la figure aura une largeur et une longueur, si vous ne voulez pas que la figure "déborde" du cadre, ces (x, y) là seront le "centre".
    Programmer en utilisant un truc passe par la curiosité de regarder si l'idée qu'on s'en fait fonctionne.
    Le problème étant ici de définir les bornes à passer à random.randint - 0..500, 0..500-X_SIZE, X_SIZE//2..500-X_SIZE//2,... - pour savoir comment utiliser ce (x, y) pour passer à .create_rectangle 4 valeurs calculées qui feront ce qu'on attend - même sur les bords -.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut pas sure ,..

    Bonjour,

    Merci pour les réponses

    Je n'ai pas très bien compris ce que vous voulez faire . En tout cas je ne visualisai pas sa comme sa pour la limitation. Je pensais qu'avec une boucle while suffirai ? Si les coordonnée de ma 'Nana' sont égales aux coordonnées du bords par exemple de gauche, alors ma 'nana' n'avance plus. Quelque chose comme sa ?

    Mais mon problème ( ou ma demande) ne se trouve pas la. J'aimerai savoir comment créer une fonction qui crée des rectangles ou carrées aléatoirement ( pas pour les 'manger' mais dans le but de les éviter )dans mon jeux ?

    Pour finir, oui effectivement sa ressemble a un snake mais j'ai imaginé autre chose dans le genre ma 'nana' ( des dessins animé SUPER NANAS pour la touche fifille ) qui doit manger les pommes tout en évitant les rectangles.


    SI NON merci pour vos aides sa fait plaisir

  10. #10
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Y'a pas à dire , ton jeu est trés bizarre

    Quel est le lien de ton jeu et des dessins animés ?
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut ahahha
    Mon idée était de faire quelque chose d'original

  12. #12
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par bellabouh Voir le message
    Mon idée était de faire quelque chose d'original
    Et ben tu devrais réinventer la roue , c'est un peu
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  13. #13
    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
    Citation Envoyé par bellabouh Voir le message
    Mais mon problème ( ou ma demande) ne se trouve pas la. J'aimerai savoir comment créer une fonction qui crée des rectangles ou carrées aléatoirement ( pas pour les 'manger' mais dans le but de les éviter )dans mon jeux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def create_pomme(canvas):
          x, y = random.randint(0, 480-30), random.randint(0, 840-30)
          canvas.create_rectangle(x, y, x+30, y+30)
    Ce sont les lignes de code que je vous ai donné tantôt.
    Vous pouviez tester à la console "pour voir".
    S'il faut aussi prendre la peine d'adapter cela à votre code, non.
    Pour apprendre il faut mettre un peu les mains dans le cambouis et montrer les difficultés que vous rencontrez.
    Sinon vous ne progresserez pas.

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

  14. #14
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut mauvaisse mauvaise
    Bonjour,

    J'ai un peu ( beaucoup trop) retourné mon script pour au final réussir d'autres fonctions mais pas celle que je voulais à la base ( limiter ma fenêtre). Mais heureusement, j'ai réussi à créer des rectangles de différentes coordonnées .

    Seul dilemme , c'est que cette fonction crée des nouveaux rectangles sur les anciens ( qui s'effacent pas) ...

    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
     
    from tkinter import *
    from random import randrange
    import  random
     
     
    def nouveau_jeu():
        a=0
    def rectangle(): # creation de 3 rectangles
        global dx, dy, x, y, x1, y1, x3, y3 , x2, y2, nana
        m=0
        x1=randrange(0,266)
        x2=randrange(267,532) 
        x3=randrange(533,800)
        y1=randrange(0,200)
        y2=randrange(201,400)
        y3=randrange(401,600)
        can1.create_rectangle(x1, y1, y1+30, x1+50, fill='blue')
        can1.create_rectangle(x2, y2, y2+30, x2+50, fill='red')
        can1.create_rectangle(x3, y3, y3+30, x3+50, fill='white')
     
    def perso():
        global dx, dy, x, y, x1, y1, x3, y3 , x2, y2, nana
        nana=can1.create_image(100,100,image=nana2)
    def pomme(): # création de pommes aléatoires + test d'avoir pas les mêmes coordonnées que les rectangles.
        global dx, dy, x, y, x1, y1, x3, y3 , x2, y2, nana
        c=0
        a=0
        b=0
        x=randrange(800)
        y=randrange(600)
        x5= x+10
        y5= y+10
        while c<10:
            while a<=50:
                while b<=30:
                    if x!=x1 and x!=x1+a and x!=x2 and x!=x2+a and x!=x3 and
                    x!=x3+a and y!=y1 and y!=y1+b and y!=y2 and y!=y2+b and
                    y!=y3 and y!=y3+b and x5!=x1 and x5!=x1+a and x5!=x2 and
                    x5!=x2+a and x5!=x3 and x5!=x3+a and y5!=y1 and y5!=y1+a
                    and y5!=y2+a and y5!=y3+a and y5!=y2 and y5!=y3: 
                        can1.create_oval(x,y, x5, y5, fill='green')
                        break
                    else:
                        b=b+1
                a=a+1
                b=0
            c=c+1
            a=0
     
    def avant(event):
        global dx, dy,nana
        dx=0
        dy=-10
        can1.move(nana, dx, dy)
     
    def gauche(event):
        global dx, dy, nana
        dx=-10
        dy=0
        can1.move(nana, dx, dy)
     
    def droite(event):
        global dx, dy, nana
        dx=10
        dy=0
        can1.move(nana, dx, dy)
        direction=0
     
    def bas(event):
        global dx, dy, nana
        dx=0
        dy=10
        can1.move(nana, dx, dy)
     
    fen1=Tk()
    fen1.title("SUPER NANA ! :D")
    nana2= PhotoImage(file='perso.gif')
    photo= PhotoImage(file='background.gif')
    can1= Canvas (fen1, bg='blue', width = 800, height = 600)
    can1.create_image(802, 2, image=photo, anchor=NE)
    #nana=can1.create_image(100,100,image=nana2)
    can1.grid(row=0, column=0, rowspan=10)
    can1.bind_all("<Up>", avant)
    can1.bind_all("<Right>", droite)
    can1.bind_all("<Down>", bas)
    can1.bind_all("<Left>", gauche)
    Button(fen1, text="Nouveau Jeu", font=("ComicSansMS"), command=rectangle).grid(row =4, column=1, sticky=N, padx=5)
    Button(fen1, text="Pomme", font=("ComicSansMS"), command=pomme).grid(row =5, column=1, sticky=N, padx=2)
    Button(fen1, text="Perso", font=("ComicSansMS"), command=perso).grid(row =6, column=1, sticky=N, padx=2)
    Button(fen1, text="Quitter", font=("ComicSansMS"),command=fen1.destroy).grid(row =8, column=1, sticky=N)
    dx=0
    dy=0
    direction=0
    score=0
    fen1.mainloop()

    J'ai aussi essayer de créer une fonction qui créer des pommes ( boules noires) aléatoires, ce que j'ai réussi .
    Mais en esseyant d'aller plus loin, j'ai tenter de creer une sous condition pourque les ' boules' ne soient pas sur les rectangles mais cela ne marche pas.

    voici la fonction :

    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
     
    def pomme(): # création de pommes aléatoires + test d'avoir pas les mêmes coordonnées que les rectangles.
        global dx, dy, x, y, x1, y1, x3, y3 , x2, y2, nana
        c=0
        a=0
        b=0
        x=randrange(800)
        y=randrange(600)
        x5= x+10
        y5= y+10
        while c<10:
            while a<=50:
                while b<=30:
                    if x!=x1 and x!=x1+a and x!=x2 and x!=x2+a and x!=x3 and
                    x!=x3+a and y!=y1 and y!=y1+b and y!=y2 and y!=y2+b and
                    y!=y3 and y!=y3+b and x5!=x1 and x5!=x1+a and x5!=x2 and
                    x5!=x2+a and x5!=x3 and x5!=x3+a and y5!=y1 and y5!=y1+a
                    and y5!=y2+a and y5!=y3+a and y5!=y2 and y5!=y3: 
                        can1.create_oval(x,y, x5, y5, fill='green')
                        break
                    else:
                        b=b+1
                a=a+1
                b=0
            c=c+1
            a=0
    Merci pour votre aide

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut -W
    j'ai essayer ce code pour ma fonction rectangle et pomme mais cela n'a pas marché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def create_pomme(canvas):
          x, y = random.randint(0, 480-30), random.randint(0, 840-30)
          canvas.create_rectangle(x, y, x+30, y+30)
    Ou peut être que je n'ias pas bien compris...

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un problème similaire au vôtre a été traité ici : http://www.developpez.net/forums/d14...snake-tkinter/

    EDIT: plus précisément à partir d'ici http://www.developpez.net/forums/d14...r/#post7821277

    Prenez quelques minutes pour voir comment la génération de rectangles aléatoires a été résolue.

    @+.
    Dernière modification par Invité ; 12/06/2014 à 22h59.

  17. #17
    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
    Ce que je vous ai donné fonctionne. Maintenant si vous voulez créer des pommes a des endroits différents, d'abord, il faudrait le dire puis essayer de penser à comment vous allez faire çà.
    En tout cas, ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        while c<10:
            while a<=50:
                while b<=30:
                    if x!=x1 and x!=x1+a and x!=x2 and x!=x2+a and x!=x3 and
                    x!=x3+a and y!=y1 and y!=y1+b and y!=y2 and y!=y2+b and
                    y!=y3 and y!=y3+b and x5!=x1 and x5!=x1+a and x5!=x2 and
                    x5!=x2+a and x5!=x3 and x5!=x3+a and y5!=y1 and y5!=y1+a
                    and y5!=y2+a and y5!=y3+a and y5!=y2 and y5!=y3: 
                        can1.create_oval(x,y, x5, y5, fill='green')
                        break
    montre que vous avez des soucis non pas côté codage mais sur quoi coder pour faire çà.

    Simplifiez!
    Une pomme sera représentée par un carré de SIZE=20 de côté. A partir de là, le rectangle de dimensions 480x840 peut être découpé en 24x42 cases.
    Savoir si une case est occupée ou pas se traduira par un test sur cases[i, j].
    Ca donnerait un code comme çà:
    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
    import tkinter as tk
    import random
     
    cases = dict()
     
    def create_pommes(canvas, count=5):
        for _ in range(count):
            while True:
                i, j = random.randrange(X_COUNT),  random.randrange(Y_COUNT)
                if not (i, j) in cases:
                    break
            cases[i, j] = True
            x = i * SIZE
            y = j * SIZE
            canvas.create_oval(x, y, x+SIZE, y+SIZE)
     
    Y_COUNT = 24
    X_COUNT = 42
    SIZE = 20
     
    canvas = tk.Canvas(height=SIZE*Y_COUNT, width=SIZE*X_COUNT)
    canvas.pack()
    create_pommes(canvas)
    tk.mainloop()
    Si vous ne voulez pas réduire le problèmes en "cases", il va falloir fabriquer une fonction pour savoir si la pomme qu'on souhaitera créer "chevauche" ou pas une des pommes existantes.
    C'est plus compliqué à coder sauf à utiliser les fonctions magiques du canvas illustrées dans la discussion mentionnée par tarball89.

    A vous de voir.

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

  18. #18
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut presque !
    Bonjour bonjour merci pour toutes vos réponses, avec tout sa j'ai presque fini mon jeux enfin

    mais j'ai un gros soucis, je n'arrive pas à lancer cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def lancer():
        return nouveaujeux()
    def fermer():
        fenetre.quit()
    def rejouer():
        return fermer()
        return lancer()
    j'aimerai fermer mon canvas et relancer mon nouveaujeux avec sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def fin():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini ! :(')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+" petites pommes.").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5)
        Button(fenetre2,text="rejouer",command=rejouer).pack(side=RIGHT,pady=5)
    merci pour votre aide

  19. #19
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par bellabouh Voir le message
    Bonjour bonjour merci pour toutes vos réponses, avec tout sa j'ai presque fini mon jeux enfin

    mais j'ai un gros soucis, je n'arrive pas à lancer cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def lancer():
        return nouveaujeux()
    def fermer():
        fenetre.quit()
    def rejouer():
        return fermer()
        return lancer()
    j'aimerai fermer mon canvas et relancer mon nouveaujeux avec sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def fin():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini ! :(')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+" petites pommes.").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5)
        Button(fenetre2,text="rejouer",command=rejouer).pack(side=RIGHT,pady=5)
    merci pour votre aide
    Déjà une fonction ne peut pas retourner tout en même temps sinon il faut mettre des conditions .Et tu ne peux pas faire appel à une fonction si déjà elle n'est pas déclarer . Aussi , c'est assez bizarre d'utiliser un même bouton pour remplir deux taches , sans oublier le rôle essentiel des commandes .
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

Discussions similaires

  1. créer des formes aléatoires
    Par tawfiknejeh dans le forum MATLAB
    Réponses: 8
    Dernier message: 30/01/2013, 08h31
  2. [Débutant] Créer des positions aléatoires
    Par Invité dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/05/2012, 09h50
  3. Réponses: 12
    Dernier message: 25/05/2007, 16h28
  4. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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