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 :

Les bonnes idées de 2 valent mieux que l'inspiration d'un seul


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2023
    Messages : 33
    Par défaut Les bonnes idées de 2 valent mieux que l'inspiration d'un seul
    Bonjour à tous,

    Petit message un peu "spécial", qui n'est pas un problème à proprement parler de Python mais une proposition de "partage".
    En effet, je me présente, je m'appelle Damien, 43 ans, ingénieur généraliste ayant fait toute sa carrière dans l'industrie et j'attends avec impatiente une reconversion dans les métiers du numérique. En attendant des news de pôle emploi, je m'autoforme à Python et aimerais partager cela avec quelqu'un qui serait dans mon cas car un peu marre d'être seul chez moi devant un écran.
    Pour exemple, je suis entrain d'essayer de créer un programme Python du jeu de mon enfance "hotel" : très interressante car bcp de variables à traiter et j'essaie maintenant la partie graphique avec pygame.
    J'aimerais partager, que cela soit en physique (j'habite un village à l'est de Montpelier) ou via des visio avec partage d'écran, afin de progresser ensemble plus vite via la vision et les idées d'un tiers.
    Je suis ouvert à tout petit projet qui permettra de progresser.

    N'hésitez pas ...

    P.S : J'ai un niveau assez "débutant +", et bien que de travailler avec quelqu'un de beaucoup plus expérimenté sera super pour moi, un autre "débutant +" est bien sûr le bienvenu.

    Damien

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Peut-être la base serait de nous expliquer les règles de ce jeu "hôtel" dont tu parles.

    De mon côté, je peux te proposer un conseil: penser MVC (ce sont les variables dont tu parles qui m'y ont fait penser)
    MVC c'est une méthode de développement qui se base sur la séparation des domaines. Chaque domaine est dévolu à des scripts dédiés. Et les domaines se parlent entre eux via des interfaces. Ainsi, quand un domaine évolue, il suffit de ne faire évoluer que les scripts qui y sont associés.
    Les domaines sont
    • Le M (modèle): ça concerne tout ce qui est stockage/récupération d'informations sur support externe (fichier, bdd)
    • Le V (vue): ça concerne tout ce qui est saisie/affichage des infos (Pygame, lignes de textes, etc)
    • Le C (contrôleur): ça concerne tout ce qui est calcul/vérifications

    Ainsi, chaque participant peut se concentrer sur sa propre partie.
    Et les interfaces c'est à toi de les créer. Si par exemple tu as un objet qui va stocker l'information, l'objet gèrera tout seul les écritures finales (écriture dans un fichier, insert en bdd). Et il possèdera une méthode permettant de lui envoyer l'information à stocker.
    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]

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2023
    Messages : 33
    Par défaut
    Salut Sve@r,

    Le jeu hotel était un exemple de petit programme sur lequel je travaille et qui donne une idée de ce qu'on pourrait faire comme travail collaboratif.
    Le but de la démarche est de créer une synergie et travailler à deux plutôt que seul. C'est comme la salle de sport, parfois la flemme d'y aller seul, à deux, cela "oblige" à y aller et cela motive en plus d'avoir un oeil neuf et des conseils.

    Concernant le jeu hotel, il ressemble, en plus complexe, au monopoly : le but est le même, acheter des terrains et construire des hotels mais ce qui est intéressant ce sont les petits plus qui complexifient le programmes comparé au monoply.
    Quelques exemple :
    - si tu as acheté un terrain et que tu n'as pas encore fait construire, un autre adversaire peut te racheter le terrain moitié prix s'il tombe sur une case spécifique
    - Pour construire, il faut tomber sur une case spécifique. Tu lances alors un dé pour savoir si tu peux construire ou pas et potentiellement si paies deux fois le prix de la construction ou si c'est gratuit. Etant donné que tu peux construire n'importe ou sur le plateau, que chaque construction est différente en terme de prix, le joueur doit choisir avant de lancer le dé et ensuite regarder l'impact du dé.
    - En fonction de l'état d'avancement des constructions, les bâtiments à construire n'ont pas la même valeur
    - pour te faire payer une ou des nuités, il faut que je joueur tombe sur une case adjacente à ton terrain avec dessus une "entrée". Si pas d'entrée, pas de nuit à payer.
    - sachant que chaque case (pour faire simple) est adjacent à deux terrains, on ne peut pas mettre deux entrées sur la même case.
    - pour te faire payer, le joueur doit tomber sur ton entrée et tire le dé qui donnera le nombre de nuit. Il faut donc imaginer une matrice avec l'état d'avancement des constructions (nombre de bâtiment) et le nombre de nuits pour définir combien tu dois payer
    - chaque terrain n'a pas le même nombre de bâtiment à construire, ce qui n'est pas génial dans la gestion de la matrice
    - .... D'autres petites choses telles que des constructions et entrée gratuites, un passage par la case départ qui te donne de l'argent, ...

    Bref, à chaque fois tu dois écrire dans tes listes des informations pour ensuite les lires et vérifier l'info pour te permettre ou pas de construire, être payé, mettre une entrée, ...
    Cela en fait un petit casse tête sympa pour la programmation pour un débutant comme moi et je me régale, même si j'ai plus de cheveux ....
    J'ai voulu, afin de ne pas tout le temps faire de la programmation conditionnelle, me lancer un peu dans pygame mais trop trop trop compliqué. J'ai réussi à peine à faire déplacer graphiquement un pion sur le plateau de jeu mais impossible facilement de gérer la partie "input" sur l'interface graphique.

    Je te fais voir, si tu veux.
    Le code est très très brouillon pour l'instant et encore plein de choses que je n'ai pas traité.
    J'y vais à taton en créant des fonctions que j'essaie d'appeler mais je me retrouve vite bloqué par les variables qui sont locales dans les fonctions et que je n'arrive pas à trimballer d'une fonction à l'autre ... Au début j'ai voulu faire des foncitons qui serviraient pour les deux joueurs mais j'y suis pas arrivé alors suis parti sur des fonctions par joueur. J'ai essayé de définir des variables global mais ... je fais ce que je peux car je ne maitrise pas trop.
    J'ai entendu parler de class pour gérer mieux cela mais je ne connais pas, faut que je m'y mettre.

    C'est en forgeant qu'on devient forgeron.

    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
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    import random
    import time
     
    # Définition des cases avec num, type de case, terrain de droite, terrain de tauche, entrée ?
    # Aucun terrain = 0 Fujiyama =1, Boomerang = 2, étoile = 3, président = 4, royal = 5, waikiki = 6, Taj Mahal = 7, Safari = 8
    case = [[1], 
            [2,"construction",1,0,"non"],
            [3,"achat terrain",1,2,"non"],
            [4,"construction",1,2,"non"],
            [5,"achat terrain",1,2,"non"],
            [6,"construction",1,2,"non"],
            [7,"entrée gratuite",1,0,"non"],
            [8,"construction",0,0,"non"],
            [9,"achat terrain",3,0,"non"],
            [10,"achat terrain",3,4,"non"],
            [11,"construction gratuite",3,4,"non"],
            [12,"achat terrain",5,4,"non"],
            [13,"construction",5,4,"non"],
            [14,"achat terrain",5,4,"non"],
            [15,"construction",5,4,"non"],
            [16,"achat terrain",5,4,"non"],
            [17,"construction",5,6,"non"],
            [18,"achat terrain",5,6,"non"],
            [19,"entrée gratuite",5,6,"non"],
            [20,"construction",5,6,"non"],
            [21,"achat terrain",5,6,"non"],
            [22,"achat terrain",3,7,"non"],
            [23,"construction",3,7,"non"],
            [24,"achat terrain",3,7,"non"],
            [25,"construction gratuite",3,7,"non"],
            [26,"construction",0,7],"non",
            [27,"construction",0,8,"non"],
            [28,"construction",0,8,"non"],
            [29,"achat terrain",3,8,"non"],
            [30,"entrée gratuite",3,8,"non"],
            [31,"construction",0,8,"non"],
            ]
     
    # Définition des terrain avec nom, propriétaire, prix du terrain, rachat à 50% de la valeur si non construit, prix d'une entrée, prix du 1e, 2e, 3e, ... batiment
     
    terrain = [[0,"Pas de terrain","aucun"],
               [1,"Fujiyama","aucun",1000,500,100,2200,1400,1400,500],
               [2,"Bommerang","aucun",500,250,100,1800,250],
               [3,"Etoile","aucun",3000,1500,250,3300,2200,1800,1800,1800,4000],
               [4,"Président","aucun",3500,1750,250,5000,3000,2250,1750,5000],
               [5,"Royal","aucun",2500,1250,200,3600,2600,1800,1800,3000],
               [6,"Waikiki","aucun",2500,1250,200,3500,2500,1750,1750,2500],
               [7,"Taj Mahal","aucun",1500,750,100,2400,1000,500,1000],
               [8,"Safari","aucun",2000,1000,150,2600,1200,1200,2000]]
     
    #print("Le jeu Hotel se joue avec deux joueurs ...")
    #time.sleep(1)
     
     
    nom_joueur_1 = "Damien"
    nom_joueur_2 = "Aurélie"
     
    Position_joueur_1 = 0
    Position_joueur_2 = 0
    Compte_joueur_1 = 25000
    Compte_joueur_2 = 25000
     
    #Fonction pour prendre le premier nombre d'une liste : sera utilisé pour donner le prix de la construction à construire.
    #Lorsque un batiment sera construit, changement de la valeur du bâtiment par le string "construit", cela ne sera donc plus pris en compte par isdigit
     
    def premier_nombre(liste):
        for item in liste:
            if str(item).isdigit():
                print(item)
                break
     
    def lancement_dé_construction():
        liste_dé=["vert","vert","rouge","rouge","gratuit","x2"]
        dé_construction = random.choice(liste_dé)
        if dé_construction == "vert":
            facteur_construction = 1
        elif dé_construction == "rouge":
            facteur_construction = "impossible"
        elif dé_construction == "gratuit":
            facteur_construction = 0
        else:
            facteur_construction = 2
        return facteur_construction
     
    def lancement_dé_avancé_joueur_1(nom_joueur) :
        global Position_joueur_1
        global Compte_joueur_1
        avance = random.randint(1,6)
        Position_joueur_1_avant_dé = Position_joueur_1
        Position_joueur_1 += avance
     
        if Position_joueur_1 > 31 :
            Position_joueur_1 = Position_joueur_1 - 31
        print(f"{nom_joueur}, dé : {avance} => case {Position_joueur_1}")
     
        if Position_joueur_1_avant_dé < 8 and Position_joueur_1 > 7:
            Compte_joueur_1 += 2000
            print(f"vous venez de créditer votre solde de 2000, vous avez maintenant {Compte_joueur_1}")
     
        return Position_joueur_1
     
    def avance_pion_joueur_1 ():
        global Compte_joueur_1
        #Case 1, il n'y a rien à faire
        if case[Position_joueur_1-1][0] == 1:
            print("vous ne pouvez rien faire")
        else :
            #on teste si achat terrain
            if case[Position_joueur_1-1][1] == "achat terrain":
                if case[Position_joueur_1-1][2] == 0 and case[Position_joueur_1-1][3] == 0 :
                    print("il n'y a pas de terrain à acheter")
                elif case[Position_joueur_1-1][2] == 0 :
                    if terrain[case[Position_joueur_1-1][3]][2]  == "aucun":
                        achat_terrain = input (f"souhaitez-vous l'acheter {terrain[case[Position_joueur_1-1][3]][1]}? (O/N)")
                        if achat_terrain == "O":
                            terrain[case[Position_joueur_1-1][3]][2] = nom_joueur_1
                            Compte_joueur_1 -= terrain[case[Position_joueur_1-1][2]][3]
                            print(f"Il vous reste maintenant {Compte_joueur_1} dans votre portefeuille")
                    else:
                        print(f"{terrain[case[Position_joueur_1-1][3]][1]} est déjà la propriété de {terrain[case[Position_joueur_1-1][3]][2]}")
     
                elif case[Position_joueur_1-1][3] == 0 :
                    if terrain[case[Position_joueur_1-1][2]][2]  == "aucun":
                        achat_terrain = input (f"souhaitez-vous acheter {terrain[case[Position_joueur_1-1][2]][1]} ? (O/N)")
                        if achat_terrain == "O":
                            terrain[case[Position_joueur_1-1][2]][2] = nom_joueur_1
                            Compte_joueur_1 -= terrain[case[Position_joueur_1-1][2]][3]
                            print(f"Il vous reste maintenant {Compte_joueur_1} dans votre portefeuille")
                    else:
                        print(f"{terrain[case[Position_joueur_1-1][2]][1]} est déjà la propriété de {terrain[case[Position_joueur_1-1][2]][2]}")
     
                else:
                    print(f"Vous êtes en possibilité théorique d'acheter {terrain[case[Position_joueur_1-1][3]][1]} et {terrain[case[Position_joueur_1-1][2]][1]}")
                    #attention problème car si on ne peut pas acheter un des deux terrains, on ne peut pas acheter l'autre
                    if terrain[case[Position_joueur_1-1][3]][2]  == nom_joueur_2:
                        print(f"vous ne pouvez pas acheter {terrain[case[Position_joueur_1-1][3]][1]} car il appartient à {nom_joueur_2}")
                    elif  terrain[case[Position_joueur_1-1][3]][2]  == nom_joueur_1:
                        print(f"vous ne pouvez pas acheter {terrain[case[Position_joueur_1-1][3]][1]} car il t'appartient")
                    else:
                        achat_terrain = input (f"souhaitez-vous l'acheter {terrain[case[Position_joueur_1-1][3]][1]}? (O/N)")
                        if achat_terrain == "O":
                            terrain[case[Position_joueur_1-1][3]][2] = nom_joueur_1
                            Compte_joueur_1 -= terrain[case[Position_joueur_1-1][3]][3]
                            print(f"Il vous reste maintenant {Compte_joueur_1} dans votre portefeuille")
                        else :
                            if terrain[case[Position_joueur_1-1][2]][2]  == nom_joueur_2:
                                print(f"vous ne pouvez pas acheter {terrain[case[Position_joueur_1-1][2]][1]} car il appartient à {nom_joueur_2}")
                            elif  terrain[case[Position_joueur_1-1][2]][2]  == nom_joueur_1:
                                print(f"vous ne pouvez pas acheter {terrain[case[Position_joueur_1-1][2]][1]} car il t'appartient")
                            else:
                                achat_terrain = input (f"souhaitez-vous l'acheter {terrain[case[Position_joueur_1-1][2]][1]}? (O/N)")
                            if achat_terrain == "O":
                                terrain[case[Position_joueur_1-1][2]][2] = nom_joueur_1
                                Compte_joueur_1 -= terrain[case[Position_joueur_1-1][2]][3]
                                print(f"Il vous reste maintenant {Compte_joueur_1} dans votre portefeuille") 
     
                print(terrain)
     
            #on teste si entrée gratuite
            elif case[Position_joueur_1-1][1] == "entrée gratuite":
                print ("vous avez le droit à une entrée gratuite")
            #on teste si construction gratuite
            elif case[Position_joueur_1-1][1] == "construction gratuite":
                print ("vous avez le droit à une construction gratuite")
            # dernière possibilité : construire, voir fonction possibilité_construction_joueur_1()
            else:
                possibilité_construction_joueur_1()
     
    def possibilité_construction_joueur_1():
        # on teste si le joueur possède un terrain
        if terrain[1][2] != nom_joueur_1 and terrain[2][2] != nom_joueur_1 and \
        terrain[3][2] != nom_joueur_1 and terrain[4][2] != nom_joueur_1 and terrain[5][2] != nom_joueur_1 and \
        terrain[6][2] != nom_joueur_1 and terrain[7][2] != nom_joueur_1 and terrain[8][2] != nom_joueur_1 :
            print("Vous ne pouvez pas construire car aucun terrain.")
        else :
            construction_joueur_1()
        return    
     
     
     
    def possibilité_entrée_joueur_1():
        if terrain[1][2] != nom_joueur_1 and terrain[2][2] != nom_joueur_1 and \
        terrain[3][2] != nom_joueur_1 and terrain[4][2] != nom_joueur_1 and terrain[5][2] != nom_joueur_1 and \
        terrain[6][2] != nom_joueur_1 and terrain[7][2] != nom_joueur_1 and terrain[8][2] != nom_joueur_1 :
            print("Vous ne pouvez pas mettre d'entrée car aucun terrain.")
            return
     
    def données_joueur_1():
        print(f"{nom_joueur_1}, il vous reste sur votre compte : {Compte_joueur_1}")
     
    #def test_construction():
     
    def construction_joueur_1 ():
        print ("vous pouvez construire sur :")
        #print({premier_nombre(terrain[1][6:len(terrain[1])])})
        if terrain[1][2] == nom_joueur_1:
            print(f"1-{terrain[1][1]} : prix {premier_nombre(terrain[1][6:len(terrain[1])])}")
        if terrain[2][2] == nom_joueur_1:
            print(f"2-{terrain[2][1]} : prix {premier_nombre(terrain[2][6:len(terrain[2])])}")
        if terrain[3][2] == nom_joueur_1:
            print(f"3-{terrain[3][1]} : prix {premier_nombre(terrain[3][6:len(terrain[3])])}")
        if terrain[4][2] == nom_joueur_1:
            print(f"4-{terrain[4][1]} : prix {premier_nombre(terrain[4][6:len(terrain[4])])}")
        if terrain[5][2] == nom_joueur_1:
            print(f"5-{terrain[5][1]} : prix {premier_nombre(terrain[5][6:len(terrain[5])])}")
        if terrain[6][2] == nom_joueur_1:
            print(f"6-{terrain[6][1]} : prix {premier_nombre(terrain[6][6:len(terrain[6])])}")
        if terrain[7][2] == nom_joueur_1:
            print(f"7-{terrain[7][1]} : prix {premier_nombre(terrain[7][6:len(terrain[7])])}")
        if terrain[8][2] == nom_joueur_1:
            print(f"8-{terrain[8][1]} : prix {premier_nombre(terrain[8][6:len(terrain[8])])}")
        choix = input("Quel est votre choix ? ")
    Rien de relire le code j'ai mal à la tête lol

    Merci pour MVC, j'ai vu une vidéo qui en parlait mais je ne me sentais pas les capacités à faire donc c'est dans la to do lis pour plus tard.

    Damien

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par damienvialla Voir le message
    Rien de relire le code j'ai mal à la tête lol
    Ben... ya de quoi.
    Tu n'as absolument rien factorisé !!! joueur_1, joueur_2, position_joueur_1, position_joueur_2? Ca sert à quoi les tableaux? Justement à éviter de se prendre la tête. Et en plus un tableau c'est itérable => tu peux le parcourir et appliquer un traitement sur chaque élément (chaque joueur). Après je vois des fonctions "deplace_joueur_1" mais c'est monstrueux !!! On dirait que tu as tout oublié du lycée. Quand ton prof de math vous faisait étudier la fonction "carre", il ne disait pas "on va étudier la fonction f_2() qui donne 4, la fonction f_3() qui donne 9 et la fonction f_4() qui donne 16"!!! Il disait "on va étudier la fonction f(x) qui donne x²" et ensuite, pour la faire tourner vous lui passiez des valeurs à élever.
    Ben en prog c'est la même chose. Une fonction qui doit déplacer un joueur doit déplacer un joueur quelconque. Et toi tu lui passes ensuite le joueur à déplacer.
    Là tout est figé. Et si demain on veut jouer à 3???

    Citation Envoyé par damienvialla Voir le message
    J'ai entendu parler de class pour gérer mieux cela mais je ne connais pas,
    Ben oui, on pourrait créer un objet "joueur" qui contiendrait tout ce qui caractérise un joueur (son cash, son nom, sa position). De là, toute fonction qui récupère cet objet aurait accès à toutes ses caractéristiques.

    Citation Envoyé par damienvialla Voir le message
    Cela en fait un petit casse tête sympa pour la programmation pour un débutant comme moi
    En fait, c'est quand-même un truc hard quand on n'a pas les bases.
    Essayons de dire autrement:
    Tu veux gérer une date, tu vas créer 3 variables jj, mm et aa et ça marchera. Mais maintenant tu veux gérer une date de naissance, une date de mariage, une date de décès. Tu vas te retrouver avec 9 variables "jj_naissance", "mm_naissance", "aa_naissance" et etc. Ce sera lourd, chiant, mais ça marchera.
    Maintenant tu veux gérer 100 bonhommes. Tu vas alors avoir 9 tableaux (tableau jj_naissance pour les 100 jours de la date de naissance, et etc). Plus le tableau des noms, des prénoms et des adresses. Donc 12 tableaux.
    Ce n'est pas infaisable, mais ça va être bien bien chiant.
    Et là arrive l'objet (le class). Dans un objet tu peux y associer autant d'éléments que tu veux. Tu commences donc par créer l'objet "date" qui contient jj, mm et aa. Puis tu crées l'objet "bonhomme" qui contient les éléments nom, prénom, adresse, date de naissance (là c'est un objet date créé juste au dessus), date de mariage et date de décès. Et de 12 variables tu passes à une seule.
    Puis tu veux gérer tes 100 bonhommes, te suffit de créer un tableau de 100 objets "bonhomme" et tu passes de 12 tableaux à un seul.

    Toi tu es parti cash sur les 12 variables (et vu que tu as 2 joueurs qui ne sont pas regroupés en tableau si j'appliquais mon exemple à ce que tu as écrit ça en ferait 24). De là on te dit "ok tu te régales et c'est l'essentiel" mais on ne peut pas s'empêcher de rajouter ensuite "malheureusement il faut tout refaire de façon quand-même plus carrée". Refaire à base d'objets (un objet jeu, un objet joueur qui entre en interface avec le jeu, etc). On peut faire sans, ça reste faisable mais bien chiant à écrire (or le codeur est une grosse faignasse).

    Citation Envoyé par damienvialla Voir le message
    Merci pour MVC, j'ai vu une vidéo qui en parlait mais je ne me sentais pas les capacités à faire donc c'est dans la to do lis pour plus tard.
    Ben un exemple ce serait que la fonction "possibilite_construire" n'affiche aucun message, ce n'est pas son rôle. Son rôle est de dire si c'est possible ou pas, éventuellement avec des nuances dans les possibilités, donc elle se contente de faire son job en retournant un indicateur de ton choix (nombre, chaine, dictionnaire) représentant le résultat du travail (controleur). Et c'est la fonction d'affichage (Vue) qui se charge de l'appeler et interpréter son résultat à l'écran. Pour résumer, plus une fonction est atomique (ne faire qu'une chose mais la faire bien) plus tu peux la réutiliser dans différentes configurations. Accessoirement ce serait bien qu'une fonction ne retourne qu'un type de truc. Tu veux retourner un facteur de construction tu lui fais retourner 0, 1, 2 ok. Mais lui faire retourner la string "impossible" Avec ça impossible justement d'utiliser cette fonction dans un calcul.

    D'ailleurs, vu les règles, ce serait le terrain qui devrait tout gérer, un peu comme une tour de contrôle (le joueur bouge, peut-il construire, on lui demande, etc). Là tu as "avance_joueur" qui appelle "possibilité_construction" qui appelle "construction". Tu comptes t'arrêter un jour dans les profondeurs des appels? Ne manquerait plus que "construction" appelle "avance_joueur" et ce serait le jackpot!!!
    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]

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2023
    Messages : 33
    Par défaut
    oui, je n'ai rien factorisé ... Je débute tout seul chez moi, je fais ce que je peux. J'ai du commencer avec les tables de multiplications dont je ne me souvenais plus ... 1x1=1, 2x1=2, ...
    Au fur et à mesure, j'essaie que cela soit mieux mais ca me demande beaucoup de temps et d'energie et je ne me cache pas derrière mon petit doigt, il y a des choses que je ne saurai pas faire seul.

    Pour les joueurs, comme marqué dans mon précédent message, j'ai voulu faire une fonction global appellant le nom du joueur mais je n'y suis pas arrivé alors je fais une fonction par joueur ... De toute façon pour l'instant on ne peut même pas jouer à un seul joueur donc je ne me projette même pas à 2 ou 3 joueurs malgré le fait que j'ai voulu commencer par cela mais j'ai été rattrapé par la réalité de mes compétences

    Truc hard ? Pour faire quelque chose de très propres, optimisé, sûrement.
    Pour écrire des lignes comme un bourrin comme moi, ça passe très très limite et cela demande beaucoup de temps pour au final, peut être pas marché du tout, l'avenir me le dira.
    Ta comparaison avec les dates est bonne, c'est exactement ce que j'ai fait, chaque fois je crée une varible et je ne me sers pas d'objet ou classe car je ne sais pas faire
    J'ai regardé quelques vidéos dessus et j'ai compris une fraction de ce concept et une fraction de la fraction de la concrétisation pour coder.

    En tout cas, tes analyses sont toujours justes et pertinentes et je rigole devant mon ordi lorsque tu parles de ma "possibilité_construire" car je me suis dit exactement la même chose.
    Etant donné que tu paies soit double, soit le prix, soit gratuit, je me suis dit que je mettrai un coeff multiplicateur 2,1,0 (mathématiquement cela a du sens) et je me suis retrouvé emmerdé quand c'était impossible car aucun coeff ne permet cela et j'ai cédé au string impossible. C'est une bêtise, j'en suis conscient. D'ailleurs cette def n'est pas fini, il faut que je le fasse ...

    Lorsque je lis souvent sur internet qu'un avantage de Python, c'est que c'est "facile", cela me décourage

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par damienvialla Voir le message
    Etant donné que tu paies soit double, soit le prix, soit gratuit, je me suis dit que je mettrai un coeff multiplicateur 2,1,0 (mathématiquement cela a du sens) et je me suis retrouvé emmerdé quand c'était impossible car aucun coeff ne permet cela et j'ai cédé au string impossible. C'est une bêtise, j'en suis conscient.
    Alors 2, 1, 0 c'est parfait. Et effectivement ça a du sens (le prix du terrain est multiplié par le coeff ce qui donne son prix de construction). On peut même faire évoluer en rajoutant "x1.5" ou autres. Pourquoi ne pas mettre "1000" pour impossible? Le prix étant multiplié par 1000, aucun joueur ne pourra le payer.
    C'est pas parfait (en prog pro on se sent un peu mal à l'aise quand on inclus ce genre de "valeur bidon" car on sent qu'on a raté un truc plus simple) mais déjà ça permet au-moins de rester numérique.

    Citation Envoyé par damienvialla Voir le message
    Lorsque je lis souvent sur internet qu'un avantage de Python, c'est que c'est "facile", cela me décourage
    Peut-être commencer moins grand. Pourquoi ne pas aller voir notre page d'exercices? Il y a même un jeu contre l'ordinateur (plus petit/plus grand chapitre 8)

    Autre chose: je te vois souvent parler de "vidéo" pour ton apprentissage. Désolé, la vidéo n'est pas considérée comme un support efficace pour l'apprentissage. On reste passif (on subit la vidéo sans pouvoir intéragir), généralement c'est ultra long (j'en ai regardé une une fois, le type il a mis 24 minutes pour arriver aux variables !!!) et généralement on perd en concentration
    Pour apprendre un langage, la meilleurs façon reste le tutoriel. On peut le lire en prenant son temps, copier/coller les exemples, revenir en arrière sur des notions mal comprises au début et qui s'éclairent ensuite.
    Ce n'est pas parce qu'une méthode est nouvelle qu'elle est meilleure ou parce qu'elle est ancienne qu'elle est périmée.
    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]

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Citation Envoyé par damienvialla Voir le message
    oui, je n'ai rien factorisé ... Je débute tout seul chez moi, je fais ce que je peux.
    Si les jeux vous intéressent allez lire les sources de jeux (que vous trouvez sympas histoire d'être motivé) et essayer de les comprendre).
    Evitez de persévérer dans votre démarche actuelles: vous allez juste prendre de mauvaises habitudes dont il sera difficile de vous défaire. Choisissez plutôt un club d'informaticiens (un truc encadré par des qui savent un peu quelque chose...) que les bonnes volontés.

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

Discussions similaires

  1. (Bonne idée?) stage juste après les classes prépa
    Par Neo-Neo dans le forum Emploi
    Réponses: 10
    Dernier message: 26/04/2015, 19h25
  2. Réponses: 2
    Dernier message: 27/01/2009, 22h45
  3. Remplacer les erreur 404 par 200 OK : bonne idée?
    Par haltabush dans le forum Référencement
    Réponses: 5
    Dernier message: 04/04/2007, 09h30
  4. [Ftp] Tous les fichiers valent mieux qu'un !
    Par ebaynaud dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 07/12/2006, 14h03

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