Session du 10 août 2023 à 20h00
Veille & Discussions
Frontend & UI
DevOps & Environnement
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Découvrir Pygame en créant un Snake
Initiation pratique à Pygame en Python en construisant un mini-jeu type Snake et en comprenant la boucle principale d'événements.
00:00:00 :Je vais vous présenter quelques exemples d'exemples d'exemples de language Python et d'exemples de langages de développement web.Je vais vous présenter quelques exemples d'exemples d'exemples de langages de développement web.
00:00:45 :Oui, je suis content.Salut, ça marche.Ah ok, on va nickel.Du coup, j'ai lancé l'enregistrement.Oui d'accord.Du coup, on est qu'à deux, profitons-en.
00:01:29 :J'ai vu que tu étais intéressé par le projet de la semaine dernière.Oui, le projet du mois, j'ai commencé, il est quasiment fini.Oui.Et là justement, j'allais travailler un petit peu la partie design.
00:01:46 :Tu t'es vu faire mettre un markdown pour changer le style de certaines choses.Oui.Et j'allais regarder ça un petit peu.Ok.J'allais dire, je ne sais pas, tu as des questions là-dessus ou tu veux, j'ai prévu un autre petit truc pour aujourd'hui.
00:02:07 :Oui, on peut faire aussi le pile game comme c'était prévu, ça me va aussi.Ok.Parce que je ne connais pas du tout en plus.
00:02:14 :Tu vas voir, c'est assez simple en fait.Ce qui est bien, c'est que tu peux facilement faire des trucs.Attends, je vais vérifier que c'est le bon écran.
00:02:31 :Tu vois l'écran là ?Oui, carrément.Ok.Alors, en fait, pile game, c'est assez simple.C'est une bibliothèque qui permet de créer des interfaces graphiques assez facilement.
00:02:45 :Ça marche un peu comme, en gros, le principe c'est que tu as une boucle, tu lances un espèce de live.Et en fait, il te crée automatiquement une fenêtre, etc.
00:02:56 :Et il va venir choper tous les événements que tu vas faire au clavier ou à la souris.Et du coup, par exemple, si tu presses une touche du clavier, il va reconnaître quelle est la touche.
00:03:09 :Et puis, tu peux associer des actions aux touches que tu associes.D'accord.Moi, ce que je te propose, j'ai fait le projet juste avant, on va le refaire.
00:03:18 :Juste pour que tu aies en tête le truc.Ce que je te propose, c'est ça comme petit projet.Où, en fait, on imagine une espèce de bête qu'on peut déplacer.
00:03:33 :Et en fait, quand la bête, elle mange, elle grossit jusqu'à un certain point.Elle termine la bête.C'est une grosse bête.Voilà, donc je te propose qu'on fasse ça.
00:03:47 :Après, tu verras, il y a plein de choses qu'on peut faire avec Pygame.C'était juste pour te hyper sur le truc.Du coup, ce qu'on fait, on importe Pygame.
00:03:59 :Je vais avoir besoin aussi de Random.Pygame, tu l'as installé déjà ?Ouais, Pygame, j'ai installé. J'ai fait un pip install Pygame dans l'environnement virtuel.
00:04:10 :T'es familier avec les environnements virtuels ?Ouais, ouais, je commence. Du coup, c'est pour ça que je l'ai bien chapitré la vidéo précédente.C'était pour bien voir toutes les étapes et le faire systématiquement.
00:04:22 :Ouais, faut bien prendre l'habitude de faire ça.Je pense que ce que je vais faire... Attends, je vais le splitter sur la droite, le truc qui existe.
00:04:30 :Il y a pas un truc pour afficher sur la droite, normalement ?Ouais, il faut fonctionner à droite.Ok, on va essayer de ne pas trop regarder.
00:04:46 :On va y aller étape par étape, on ne va pas tout faire.En gros, comme je te l'ai dit, il faut toujours avoir une boucle principalequi gère tous les événements de clavier.
00:04:57 :On définit la boucle comme ça.On va définir une variable qu'on va initialiser à True.Et on va dire While Run.Et là, ce qu'on va juste mettre, c'est qu'on va gérer quand on ferme l'événement.
00:05:20 :Enfin, quand on ferme la fenêtre.En gros, c'est ici.Tant que la boucle tourne, on va dire que il va aller récupérer tous les événements.
00:05:32 :Et s'il récupère un événement de Quit, il va quitter.C'est un peu chiant, parce que comme il me met...Ouais, il te met la solution.
00:05:45 :Là, normalement, on a juste besoin de ça.Et ici, on met le fameux...Est-ce que t'es familier avec ce truc-là ?Ouais, je l'ai vu pas mal de fois, mais pas familier.
00:06:00 :En fait, ça, il faut que tu le mettes...J'ai le problème de le mettre tout le temps,si tu fais un import de module.Parce qu'en fait, si t'écris un autre...
00:06:11 :Tu vois ici, par exemple, j'ai une bêtise,mais si j'écris Print Hello,et que dans un autre script, je vais importer ce script-là,il va tout m'afficher.
00:06:29 :Alors qu'en fait, si tu fais If Name,tout ce que tu vas écrire ici, Print Hello,il l'effectuera uniquement si t'es au sein de ce script,quand tu fais un run.
00:06:43 :Donc ça te permet de protéger, en fait,quand tu fais des imports de module,de ne pas tout exécuter et d'exécuter que ce que tu veux.
00:06:49 :Ah oui, OK.Je vais peut-être le rajouter, du coup,parce que moi, j'étais en train de faire ça,justement, sur le projet du mois,et j'ai pas mis le If Name Main, là.
00:06:58 :Ouais.Et du coup, comme j'avais la fonction dans le module,et ensuite, une fois importé, je l'ai rappelé de nouveau,et du coup, il y a eu une sorte de conflit,il y avait des erreurs.
00:07:09 :Ça peut être ça, ouais.En fait, si tu fais pas ça,au moins, t'es sûr que quand t'es dans...Tout ce que tu vas mettre après If Name Main,ça va rester cloisonné dans ce script.
00:07:21 :Et après, si par exemple, tu veux importer çadans un autre script,tu pourras, il va juste venir t'importer ça,et tout ce qu'il y aura là, il va pas l'exécuter.
00:07:30 :Donc ça, c'est important.Donc voilà, on est là.Si je lance...Donc là, tu vois, j'ai juste...Il dit que j'ai un truc qui est pas initialisé.
00:07:41 :Je pense que...Ouais, ici, il faut que tu définisses tes premières...tes tailles de fenêtres.Donc on va le faire.Je vais les définir.Width...
00:07:53 :et Height.Donc là, en gros, on dit qu'on veut une imagede 800 par 800, le truc de base.Et ici, on veut afficher...Donc ça, un peu, c'est l'initialisation, tu vois.
00:08:03 :Si je relance...Là, tu vois, j'ai ma fenêtre qui est quelque part...Je sais pas où est-ce qu'il m'a foutu.Et après...Je crois qu'en fait, je vais virer le truc à côtéparce qu'en fait, ça perturbeet c'est mieux de garder ça.
00:08:35 :Pourquoi il cliquait tout de suite ?Donc là, tu vois, il me l'affiche sur l'autre écran,mais il me dessine juste ma fenêtrecomme je lui ai demandé.
00:09:20 :Là, maintenant, ce qu'on aimerait bien,c'est qu'en fait, la fenêtre, elle soit blancheparce que si on veut définir le background,ce que tu peux faire, c'est que tu définis une couleur.
00:09:33 :Donc tu dis white,tu lui donnes le code couleur RGB,donc trois fois 255parce que c'est RGB ou RBG, je sais plus.Donc en fait, c'est red, blue, green.
00:09:48 :Et quand tu lui mets tout,tu mets tous les curseurs à 255,et en gros, ça veut dire que tu mets toutes les couleurs.Tu vois, si je mettais juste, tu en fais ça.
00:09:58 :Et ici, si on veut l'afficher,white, qu'est-ce qu'on va faire ?On va remplir avec du white.Donc on va dire...On veut du white, et donc si je fais ça,tu vois qu'en fait, il ne me l'a pas mis à jour.
00:10:20 :Pourquoi ? Parce qu'en fait, il ne faut pas oublierqu'à chaque fois, tu dois avoir une mise à jourde ta fenêtre.Oui, c'est ça.
00:10:34 :Donc tu fais, je crois que c'est display,en fait, parce qu'il me l'a créé une première fois,et après, c'est tout, tu vois, il n'a rien fait.
00:10:42 :Donc si tu ne mets pas le update ici,il ne va pas te la mettre à jour.Et donc là, maintenant, j'ai bien ma fenêtrequi est...
00:10:50 :Pourquoi elle est comme ça ?En fait, c'est parce que, je ne sais pas,quand je change d'écran, il me la remet en noir,mais en fait, elle est bien blanche,je ne sais pas pourquoi.
00:11:04 :Ah oui, pardon, parce qu'en fait,il faut que je la mette à chaque...Il y a un truc avec Pygame qu'il ne faut pas oublier,c'est que quand tu dis while run,c'est un peu comme s'il faisait une boucle.
00:11:16 :En fait, il va boucler.Donc, nous, le moment où il va boucler,c'est quand il va faire une boucle.Donc, il va faire une boucle,il va faire une boucle,il va faire une boucle,il va faire une boucle,il va faire une boucle,et nous, le feel right,
00:11:36 :il faut le mettre à chaque pas de temps de la boucle,sinon, il ne va le faire qu'une seule fois.D'accord.Donc là, tu vois, j'ai bien ma fenêtre qui est blanche.
00:11:46 :Ok, ok.Ok, donc là, on est content.Qu'est-ce qu'on fait ensuite ?On va peut-être...On va aller afficher...Attends, je réfléchis à ce qu'on peut faireétape par étape.
00:12:01 :On va définir une fonction, en fait,plutôt que de mettre tout çaun peu à l'arrache comme ça,on va définir une fonction qui va s'appeler drawWindow.
00:12:11 :Def. DrawWindow.Et là, on va mettre un peu tout...On va faire le...le feel rightet le update.Comme ça, on sait qu'à chaque fois qu'on viendraappeler notre fonction,il va le mettre en blanc.
00:12:27 :Donc ça, il n'y aura pas de soucis.Et il va mettre à jour.Donc on peut virer ça.Et à chaque pas de temps, on dittu fais drawWindow.
00:12:37 :Et donc vérifier à chaque fois.Ok, donc là, j'ai bienma fenêtre, tout se passe bien.Maintenant, ce qu'on va faire, c'est que je pensequ'on va pouvoir commencer à dessinernotre image.
00:12:53 :Donc on va lui dire...On va définir une taillepour notre image.On va dire...Ici...Ça ne sert à rien, je n'ai peur qu'on perde trop de temps.
00:13:07 :Et ici...Voilà, donc on va dire...Je l'ai appeléBlitzFun, parce que bon...Donc en gros, tu vas juste faire un loadde ton image. Donc là, tu vois, j'ai mis
00:13:19 :dans un dossier assets. C'est un peu commequand tu fais du webdev,je l'appelle assets, c'est une image statique.Et ici, je dis juste que je veuxfaire un rescale.
00:13:29 :Parce que si je ne fais pas le scale, il va memettre la tailleinitiale.Et moi, je ne sais pas ce que je veux. Donc en gros,
00:13:37 :tu as une fonction. Tu vois, tout ça, c'est duPygame qui existe déjà. Je ne sais pas situ as déjà fait du TKinter ou du Pyside.
00:13:43 :Tout ça, c'est hyper...C'est un peu chiant à définir, tu vois.Pygame, il te facilite pas malla tâche où il te dit, voilà, je prendsune image, je la load, et ici, je la transforme,je la scale.
00:13:57 :J'applique un facteur d'échelleà l'image initiale, etje lui dis quelletaille je veux pour mon image.Ok. Et ensuite,maintenant, ce qu'on veut, c'est...
00:14:09 :On ne veut pas oublier.Nous, ce qu'on veut, c'est la...On veut l'afficher.Donc, on vaici venir modifier.Attends, je vérifie à chaque foisce que j'avais fait.
00:14:23 :Ouais, normalement...Déjà, là, ça peut fonctionner.ProWindow...Et du coup, si on veutafficher une image, il suffitd'appeler une fonctionqui s'appelle blit.Donc, c'est une image de...
00:14:45 :Je vais la mettre ici en 0,0, et après ça,on le changera.C'est une image...C'est juste pour afficher une image.C'est une fonction qui existe.
00:14:59 :Donc là, ça veut dire que quand je vaisà chaque pas de temps de ma bouclewild, je vais appeler DrawWindow,et DrawWindow, il va faire quoi ? Il va remplir
00:15:07 :de blanc, et il va afficher mon image,et il va update. D'accord.Donc, je lance...Et donc là, tu vois, j'ai bienmon image, et elle est en 0,0.
00:15:17 :Parce qu'ici, j'aidéfini 0,0. Tu vois, si je mettais100,100,et que je réaffiche,il me l'a mise ici.Et ce qu'il faut savoir, dans Pygame,c'est qu'en fait, l'origine du repère, elle est là,0,0, et après, t'as tonX qui est en horizontal, et tonY qui est en vertical, mais descendant.
00:15:39 :Tu vois, là, j'ai mis 100, 100,mais si je mettais 100, 200,en fait, elle serait plus bassede 100 en Y, etjuste décaler. Bon, je sais pas si tu veux avoir la diff,
00:15:49 :mais en gros, elle est toujours à 100 à droite,mais elle est à 200 en bas. Donc, ça,faut bien avoir en tête que c'est droitepositive, comme ça, en gros, tu dessinesdans ta tête un axe X comme ça, et un axeY par là.
00:16:01 :Et là, ce qu'on peut fairedéjà, en fait, c'est, on va déjà définir,on va essayer de faire bougerl'image. Tu vois,donc, pour ça, en fait...
00:16:11 :Ouais, avec les flèches, par exemple,ou avec ce que tu veux, et tu vas voir, en fait, on peut définirce qu'on veut pour définir le mouvement.
00:16:17 :Donc, pour ça, il suffit dedéfinirles clésdu clavier qui sont appuyées.Donc, Pygame, en fait, il te fait çaà chaque pas de temps, on va direkeys pressed,on va dire récupère-moitoutes les...
00:16:35 :Tu vois, si tu pouvais appuyer avectous tes doigts sur tous les boutons, bah, il les récupérerait.Et donc là, on va dire seulement if...
00:16:41 :Donc ça, ça va être un espèce dedictionnaire, tu vois, je peux te faireun print du keyspressed.Comme ça, tu vas voir exactementla tronche que ça a.
00:16:53 :Donc là, si je lance...Donc là, je mets la petite...Tu vois, en fait, c'est un dictionnairedynamique, et dès que je...Bon, là, je sais pas si tu vas le voir.
00:17:03 :On voit que des false, là.Tu vois que des false, mais déjà, ce qu'on peut faire,c'est, on va régler...Parce que le while,comme je te l'ai dit, c'est une boucle infinie,tu l'arrêtes pas.
00:17:15 :À aucun moment, je lui ai dit, bah...Tu sais, je sais pas si tu as vul'autre vidéo, t'as les frames...Framerate.Là, en fait, le while, ça va êtrecelui de mon ordinateur.
00:17:27 :Si toi, tu lançais ça sur tonPC à toi, je sais pasquel serait le taux de rafraîchissement.Ça serait celui de ton processeur,tu vois. Donc si tu veux que le jeu
00:17:37 :que tu développes, il tourne de la même façonchez ton voisin, il faut quetu fixes le framerate.Donc ce qu'on peut dire, c'est qu'on va définirun FPS,on va dire 20.
00:17:49 :Ça va pas être très rapide,mais en gros,on va dire que,voilà, on veut que...On veut pas que ça soit tropimportant pour pas que ça rafraîchisse trop vite.
00:18:01 :Et ici, il faut définirune horloge de jeu.Donc on définit une horloge.Un peu comme si on l'initialisait.Attends, je vérifie qu'il faut bien la mettre là-dedans.
00:18:11 :C'est dans le main. Ouais, ok.Et après, à chaque boucle,à chaque pattern,on veut juste lui dire, bah attention,tu te mets au taux de rafraîchissementdu FPS. Donc là,
00:18:23 :maintenant, si je relance,tu vois que...Bon, c'est toujours très rapide, 20 framespar seconde pour un humain,ça reste rapide.Mais voilà.Donc en gros, t'as un dictionnaire avec un false.
00:18:37 :Comme si...Comme je presse pas de touche,elle reste toute à false.D'accord.Donc là, print. Bon, je vais pas le printer.Et là, on va dire que sila...
00:18:51 :Elle me remplit parce que j'ai déjà rempli tout à l'heure.Si la toucheleft,donc ça va être du...Ah, left, ça s'écrit comme ça.
00:19:05 :Ok.On va dire...En fait, on va venir...Biste...Je vais définir...Comment on pourrait faire...Je vais d'abord définir un rectangle.Je vais définir un truc et puis après je t'explique.
00:19:25 :Donc on fait ça.Je vais définir ici.Je vais définir la bête.On va dire que c'est un rectangle.Un rectangle qui fait...Le rectangle qu'on veut.
00:19:43 :Ouais, c'est ça.Il est initialisé en 0,0.Donc là, normalement c'est bon.Et après, ce que je vais lui dire...Y...Ok.Et donc, on va dire plutôtright. On va définir que celui-là pour l'instant.
00:20:11 :Donc si c'est...J'écris, on va dire...Donc en gros...Je vais juste tester pour voir si ça marche bien.Donc là, j'ai mon...Tu ne vas pas voir, mais en gros, je pressema flèche de droite.
00:20:51 :Donc tu vois, il se déplace bien.En gros, juste pour t'expliquer ce qu'on a fait.Ici, j'ai définiun rectangle. Et pourquoi j'ai définiun rectangle ? Parce que dans Pygame,
00:21:01 :ça c'est un objetde la classe rectangle.Là, j'instancie un objetde la classe rectangle.Je lui dis que ses coordonnées, c'est 0,0et sa largeur et sa hauteurc'est celle que je veux,que j'ai définie ici. Et pourquoi
00:21:17 :je fais un rectangle et pourquoi on n'utilise pasl'image directement, tu peux te dire.Parce qu'en fait,ici, l'image, c'est justecomme si je définissais un objet rectanglePygame, et par dessus,j'attache une image.
00:21:31 :C'est juste un peu de la décoration.Tu sais, l'image de notre bête,de notre grosse bête, c'est juste de la décoration.Parce qu'en fait, l'image,c'est pas un objet qu'on peut manipuleravec Pygame.
00:21:43 :En gros, tu vas voir qu'après, je vais utiliserune méthode de collision.Mais en fait, c'est uniquement une méthodequi appartient au rectangle. On peut pas définir
00:21:51 :une collision avec une image. Donc c'est pour çaqu'on fait un espèce de petite triche.Comme si on fait un rectangle et par dessus,on colle une image pour que ça soit plus sympa.
00:21:59 :Mais en gros, derrière, ce qu'il y a,c'est juste un rectangle. Il faut justeêtre sûr. Mais vu quenotre image, quandon l'a importée, on lui a ditce qu'elle, avecla largeur et la hauteur qu'on veut pour notrerectangle, on est sûr quenotre image aura toujours la taille de notre rectangle.
00:22:17 :Et comme ça, quand on fera nos checks de collision,on est sûr qu'on va pas se tromper.D'accord.Mais il apparaît pas le rectangle visuellement.
00:22:25 :Non, visuellement, il apparaît pas.Tant que tu le dessines pas, il apparaît pas.Donc c'est vraiment juste un objet pour Pygame.Et après,ce qu'on lui a dit ici,à la ligne36, on a ditque si parmi toutes les cléspressées que tu récupères à chaquepas de temps,
00:22:45 :à chaque itération de boucle,si c'esten gros,vu que c'est un dictionnaire,tu vas récupérer la flèchede droite. Donc là,ça va être true parce qu'on vaappuyer dessus. On va dire que
00:23:01 :tu vas ajouter une coordonnéesur l'app 6x, tu vas lui rajouterplus 10. Donc en gros, il va se déplacerpar la droite. Et après,
00:23:09 :ce que je fais, c'est quej'ai mis en argument dansDrawWindow la bête.Et en fait, ici,au lieu de faire un DrawWindow avecun x et un y fixe,je lui mets le x et le yupdatéde mon mouvement.
00:23:27 :D'accord.C'est un peu le cheminementclassique dans Pygame.Là, c'est vraimentle... En gros, ce qu'on fait,c'est un peu pour moi le plus dur,c'est comprendre les événements qu'on gère,etc. Une fois que tu as fait ça,
00:23:43 :je trouve que c'est un peude l'amusement.Donc,ce qu'on a fait, on est làet tu vas voir qu'on va déjàrencontrer un problème, c'est que là, je vais à droite,je vais à droite, mais je lui ai jamais dittu vois là, il a disparude mon écran.
00:24:01 :Il ne connait pas les limites de la...Exact. Il ne connait pas les limites.Donc en fait, il faut qu'on lui dise que situ as atteint la limite à droite,tu arrêtes de te déplacer, tu arrêtes de faire un pluségal.
00:24:13 :Pour ça, ce qu'on peut faire,c'est qu'on va rajouteren plus une condition,on va dire if beast,voilà tu vois il me l'écrit déjà parce quej'ai mis.
00:24:25 :Il va seulement déplacer à droitesi et seulement sison X est plus petit quela largeur totale,donc c'est la largeur de ma fenêtre,moins la largeur del'objet lui-même, parce qu'en fait, je veuxquand même continuer à le voir.
00:24:41 :Ici,je vais changer un peu le FPSet je vais mettre 60 quand même,c'est pas propre.Et donc, si je relanceet que maintenant je me déplace à droite,tu vois, donc déjà il est un peu plus fluide.
00:24:55 :Après, toi, tu as le taux de rafraîchissementqui n'est pas terrible parce queje suis en partage d'écran.Non, ça va, ça va bien.Ça ne va pas trop.
00:25:05 :Donc là, tu vois, je continued'appuyer sur ma touche à droiteet il s'arrête parce que du coup,je suis dans cette condition,je ne suis plus dans cette condition là,il sort.
00:25:17 :Voilà.Et doncmaintenant, ce qu'on va faire, c'est qu'on va faire toutes les touches,donc droite, gauche, en bas, en haut.Et là,normalement, tu vois, il va tout me les faireavec l'IA.
00:25:31 :Tu utilises quoi du coup pour faire ça d'ailleurs ?Pour que l'IA s'appuie automatiquement.C'est ici la Codium.Je ne sais pas si tu vois.
00:25:39 :Oui, tu en avais parlé en plus.Et c'est gratuit et franchement, je le trouvehyper performant.Je vais copier celui que j'avaisdéjà écrit.Tu sais qu'il y en a qui utilisentTab9 ou il y en a même qui utilisentGithub Copilot,mais je crois que c'est payant.
00:26:09 :C'est payant Github Copilot.Ok.Donc là maintenant, où est-ce qu'on en est si je relance ?Donc là, j'ai ma fenêtre.Je me déplace.Ah oui.
00:26:35 :D'ailleurs, il n'y a pas un trucquand on fait un copier-coller, tu sais,avec tous les tifs comme ça,de garder l'indentation originalede l'endroit où on l'a copié ?
00:26:47 :Ouais.Là, a priori,a priori, il a galéré.Ouais.Si en fait, normalement, quand tu copie-collecomme ça,tu vas garder le niveau d'indentationet après, ce que tu peux faire, je crois,c'est après, je ne sais pas, en fonction detu peux sélectionnertu sais, par colonneje ne sais plus ici
00:27:11 :t'es quoi ? T'es sur Mac ou surSur Mac, ouais.Attends, sur Macouais, sur Mac, si tu faisShift-OptionShift-Option, ok.En fait, il te sélectionneça s'appelle une sélection par colonneen fait, il va justetu vois, il te met un multicurseur en plusOuais.
00:27:33 :Tu vois, si je tape comme ça,il me change tout.Ouais, donc si tu fais Shift-Option,il te sélectionne par colonne.Et donc ça, c'est pas malsi par exemple, tu vois, en plusgenre là, si tu te metslà en 35, si tu maintiensça c'est un autre truc,
00:27:51 :Control-Shiftet que tu descends avec taavec ta flècheil te fait un multicurseurOuais, c'est pas mal.Ouais, c'est pas mal.Et comme ça, par exemple, tu vois, si jamais je voulaissi j'avais plusieurs trucsPrintPrint ADéjà ça, je sais pas situ connais, mais t'as
00:28:15 :humhumC'est Command-Shift-Dil reproduit la ligneAh, c'est top.C'est un Print A, c'est pas fou, mais effectivementsi t'as un...Mais après, ce que tu peux faire, imaginetu reproduis, donc c'estCommand-Shift-D et aprèsce que tu peux faire, tu te mets là et tu disdonc Control-Shift et tu descends
00:28:39 :avec ton curseuret après tu peux dire Print AB, C, D, tu voist'as plein de trucs comme ça et tu peux effaceret ce que tu peux même faireje sais pas si tu connais aussi celui-làdonc là j'ai fait Atu sélectionnes une fois, comme ça
00:28:55 :et après tu fais Command-Det donc là il va aller te sélectionnerla même chose, tu voissi par exemple, là, Beasten fait, je veux le renommerje fais Command-Det là il va aller me sélectionnerAh il va aller chercher tous comme ça, ah ouais topça c'est Command-D t'as dit ?
00:29:13 :C'est Command-D, ouais, tu sélectionnes ton tructon texte, sélectionne le premieret tu fais Command-D, il va aller tous te les chercheret tu vois après tu peuxte déplacer et tu peux direBig Beast, tu voisil va pas être content mais c'est Big BeastOui, okOuais
00:29:31 :Mais je croisque j'ai fait quand mêmepour ça il faut une extension, moi j'ai l'extensionKeybindingsSublime Texts, parce qu'en fait avantd'utiliser VS Code, j'utilisais Sublime TextsAh ouiEt ça je crois que c'est desKeybindings de Sublime Texts, ouaisTu fais juste, donc tu vasinstaller Sublime Texts Keymap
00:29:53 :Et t'auras tous lesrapports-ci que je viens de te dire, il y en aplein d'autresOkDonc là où est-ce qu'on en était, on était làDonc là on a toutes nosOn a toutes nos flèches qui sontdéfinies, donc là je vais à droiteil s'arrête, je descends
00:30:15 :il a bien toutes les limites, tu voisil a bien pris en compte la largeur de mon imageOkDonc làon commence à être pas mal, maintenant qu'est-ce qu'on peutfaire, bah on peut peut-être définirce quej'ai appelé Fooden fait c'est le logo pitonqu'on va faire apparaître et qu'on va aller essayer
00:30:35 :de choper pour grossirAh ouais okDonc on va le définir un peu de la mêmemanière que ça, donc je vaisle copierOn va direça va êtreFood et icic'est justeFoodScaledonc là on va aller chercher directementFoodet làc'est un peule même truc
00:31:05 :et là on va direFoodOk et làon va définir ça, on pourrait le définirpeut-être dans un fichier de configmais pour l'exerciceon le diraitEn faitmoi ce que je conseillec'est de jamais, tu vois tout ça c'est vraimentdes inputsde config, la taille de ma fenêtre
00:31:35 :la taille de mon objet etcc'est vraiment des trucs de config que tuc'est des trucs statiquesmais t'aimerais pouvoir les changerfacilement, tu vois ça peut être, c'est vraimentune configuration, t'imaginestu définis ton jeu etcet tu dis bah, en fait mon imagela taille dede la bête, attends ici je vais juste
00:31:55 :définir un truc différent mais tu voisla taille de la bête là je l'ai mis à 100mais si je la veux à 200et que jele mets là, donc là je le redéfinisdonc là tu voismon image elle est plus grosseça marche toujours maisc'est très embêtant de devoir aller dans le
00:32:13 :code pour aller modifier çadonc moi ce que j'aime bien fairec'est, j'appelle ça config.jsonet je définiset après tu importesvoilà c'est çadonc moi je ferais plutôt un truc comme ça où je diraisje définislistet puis làon va définir un dictionnairedonc ça va être
00:32:39 :on va mettre donc làc'est 100800j'aime biensi je pense que c'estbon là, FPSFPS c'est plutôtun truc général tu voisdoncon va mettre globalet donc là on va direFPS60et donc là tu vois en fait ça veut dire queici au lieu de
00:33:17 :d'être en duret puis global on va direle global widthest-ce que je ne me suis pas trompé là dessusoui c'est plutôt comme çadonc dans le globalah pardon il ne faut pas mettrelà dessusje n'aime pas çail faut absolument afficher jsonou ça peut être un dictionnaire classique
00:33:47 :ça peut être un dictionnaireouais on peut, ça pourrait être un dictionnairepython directementou tiens si tu veuxje peux le mettre en dictionnaire python comme çaen plus on va moins se galérer avec le jsonmais c'est toujours bien en fait, attends je vais quand même essayer de le faire
00:34:01 :comme çaça me permet de voir aussic'est toujours bien de séparer, tu vois par exemplesi ton jeu il est destiné à êtreutilisé par quelqu'un qui ne connait pasdu tout python, tu lui dist'as juste toi à aller modifier le fichierjson, tu sais c'est un fichier texte que n'importe
00:34:17 :qui peut liredonc voilà, attends j'ai justepourquoi il me le met comme ça, il n'aime pasje vais demander à notre amije vais demander à notre amide me direje vais demander à mon amide me direpourquoijsonpourquoipourquoipourquoipourquoipourquoipourquoipourquoi
00:35:03 :pourquoipourquoipourquoipourquoipourquoic'était ce que tu avais mis au débutvoilà c'est ce que je l'avais misok bah c'est bondonc là en gros tu vois je dois avoirmettre la taille de la fenêtre aussiouais je vais mettre la taille de la fenêtre exactementdonc on va dire width
00:35:39 :on a dit 800et height on va regarder 800ouais donc là c'est bonet donc là en faiton va direque ça s'appelait configon va dire widthopendonc là c'estmon fichier configjson as fdonc en faittoute ma config ça va être un dictionnaire
00:36:09 :configégalf.c'est json.loadfconfigégal json.loadfil faut que j'emportejsonje vais justele débuguerje sais pas si tu connais le débugmaisjarrive pas trop bien à l'utiliser en vraije vais pas le regarder à cette vidéoen fait ça fait peurquand on parle de débug
00:36:41 :mais tu vois là typiquementsi je bourrinais un peuje mettraiset puis c'est ce que beaucoup de gens fontmoi le premier je mettrais un print configet puis je lanceraisc'est pas hyper proprej'avoue que ça dépanneje fais pas de cachet que je fais ça de temps en temps
00:36:59 :mais en gros ce que tu peux fairec'est surtout avec bscodetu mets dans la gouttièretu mets un pointdonc là ça veut dire qu'il va exécuter ton code jusqu'à ce point d'arrêt làet t'as juste à faire icidans le débug, tu fais exécuteret débuguer, donc là tu dis c'est un fichier python
00:37:15 :donc là il lancedonc là il faut attendre un peuet donc làt'es dans ton scriptvu que c'est un langage interprété pythonil va aller lire ligne par ligneil va s'arrêter là à ton point d'arrêtet il va te donner accès à toutes lesdatas qu'il a rencontré jusqu'à maintenant
00:37:33 :donc là tu vois si tuattends ça on a pas besoinsi je vais voir làen fait là tu vois il a déjà configet t'as accès ici à une console de débugageet là t'as une consoleinteractive avec les datasdisponibles jusqu'à maintenant, donc là si je fais
00:37:49 :config, bah ça a bien marchétu vois j'ai bien un dictionnaire pythonet je peux faire comme sij'étais dans un terminal, je peux direva me chercher toutes lestrucs, je peux direc'est vraiment un dictionnaireje peux faire comme sidonc là je suis bien, j'ai bien
00:38:07 :mon dictionnaire, donc je vais pouvoirdonc après tu arrêtes le débuget puis tu t'oublies pas de re-cliquer icipour diredonc là maintenant ce qu'on peut fairec'est on peut direbah c'est justeconfigc'estglobalet là c'estweedset pareilvoilà et du coup tu vois
00:38:41 :là je rentre plus du tout en durdans mon code et tout ce qui est configet ça après du coup c'est beaucoup plusfacile à maintenir et à géreret c'est beaucoup plus propre tu voislà je pourrais définir aussi mes couleursje peux le faire ici, donc global
00:38:55 :on va définirle rôle làon va définir les couleurscouleurslà on va direça va être encore un autre dictionnaireet on va dire que whitewhite c'est1255là par contreil commence à, parce que comme je suis dans un fichierde json, bon je vais pas le faire là
00:39:41 :parce que je vais perdre du temps pour rien mais en gros comme c'est un fichierde jsonvoilà exactementil fauttravailler un petit peu le truc mais en grostu comprends le conceptdonc là j'ai mon weeds, mon whiteje crois que mon fps aussi je l'avais défini
00:39:57 :comme ça, configc'est du global, fpsvoilà et puis icila bisteon va définirje vais le laisser trouverouaiset puis là on va faire pareilavec lafoodfoodlà par contre la food on va la faireplus petite je pense, on va direj'avais mis combien là
00:40:37 :5050 et50etle faitd'utiliser le dictionnaire ça me permet detu vois ici je peux utiliser weedsune seule fois parce qu'en fait si je fais pas çaje suis obligé de dire biste weedsfood weeds etcc'est un peu chiant donc ça rend les choses un peu plus
00:41:17 :propres quand même d'utiliser des environnementsdes trucs de configcomme ça, donc là où est-ce qu'on étaiton a défini notrela taille defood, on a définil'image, donc là normalementje vais juste testervoir si il me l'affiche bienpoint blitzet donc là on va aller faire le
00:41:39 :food scale, donc là il me l'a déjà misdésolé il l'a spoiléparce que je voulais le faire en randommais en gros là je vais direje le mets en 0 0 tout en haut à gauchepour être sûrqu'il nous l'affiche bienouais donc là tu vois
00:41:55 :il nous l'a bien affiché en haut à droitepour l'instantc'est construit comme çail y a tout qui fonctionne bienet nous ce qu'on aimerait maintenant c'est qu'à chaque débutde partie la premièrela première foodelle apparaisse aléatoirementsur lesur le rectangled'accord ouidonc c'est tout simple ce qu'on peut faire
00:42:19 :c'est d'enleverdonc c'est tout simple ce qu'on peut fairec'estje pourraisen fait on va fairetu vas voir ce qui va se passersi on fait randombon là il me le metdirectement, en gros tu vois il va me le mettreje pense que tu as compris le truc
00:42:39 :il faut définir les limitespar contre pourquoi icij'ai toujours en 0après t'as retiréla taille de l'objetenfin de l'image foodouais c'est çaattendce qui serait passéil serait sorti de duouais en fait il serait des fois apparutrès proche de la limite mais
00:43:09 :on l'aurait pas vu tu voisokrandomva me manquer peut êtreouais ça va me manquer çaokdonc là on aet en fait ce qu'il va fairelà tu voisvu queici draw window je l'appelle àchaque itérationlà tu vois ce serait une erreur de mettre
00:43:37 :randomparce que ça veut dire qu'à chaque itérationil va me le remettre à une nouvelle positiontu vas voir je te le mets juste pour quetu te rendes compteet en plus il va me le mettre à un frame ratedonc tu voisen fait à chaque boucle il me le fait
00:43:53 :apparaître à une nouvellenous c'est pas ce qu'on veutce qu'on veut c'est que l'initialiserà une position particulièredonc ce qu'on va faire c'est qu'on vadéfinir une première foodun peu comme on a défini comme tout à l'heuretu sais le rectangleon va coller l'imagede food dessus
00:44:13 :randomouaiscomme on a fait tout à l'heureen faitça c'était quoi ?ça c'est le XYet après on va définir lefoodalors pourquoi il ne met pasfood8okdonc là en fait ça veut dire que quand on va lancernotre fonction comme on n'est plus dans la boucle
00:44:45 :wildles premières coordonnées vont être randommais après c'est tout tu vois il ne va pas la mettre à jourd'accord ouaiset donc ce qu'on fait c'est que maintenantcomme le beaston dit food et iciça devientplus simplefood.x
00:45:09 :et food.yet ici il faut le mettre en argumentet donc lànormalement il va être fixéà une positionrandom qu'on définit au toutdébut quandon n'a pas lancé le trucdonc là je relanceet donc là tu vois il me l'a bien misici et donc ça ne bouge plus
00:45:31 :lui je peux le faire bougeret si je relanceune autrefenêtre tu vois j'ai un nouveau randomexcellentdonc maintenant ce qu'on veut faire c'est queune fois que la bêteaura rencontré la foodbah en fait on voudrait que la fooddisparaisse et qu'elle apparaisse à un autre endroit
00:45:51 :okdonc pour l'instant on va faire çadonc ça veut dire que c'est là où en faiton va utiliserles méthodes built-inde Pygameet tu vas voir que c'est très simpleon va dire que ifEastCollideDirectFoodet bah on va justeon va remettre à jourles coordonnées
00:46:17 :de notre food donc on va direon va redéfinir ça tu voismais uniquement si on a euune collisionattends je vérifieque c'est bien ce qu'on avait ditouais c'est bien çaon varedéfinirça devrait fonctionner déjàla méthodeque tu utilises collision c'est un truc
00:46:47 :où il détecte les deux objetsouaisexactement en faittu vois là j'ai mon objetc'est le premier objet Beastici j'ai mon objet foodet donc tu vois ici hop il va avoirune collision et du coup il l'a bougéet en fait moila toute première fois où j'ai voulu
00:47:07 :faire un jeubah ici tu voisc'est en faitc'est simpleil va juste comparer les X et les Yet puis il va dire bah si ils sont égaux bah voilàmais en fait le CollideDirect il le fait automatiquementet ce qui est pas mal c'est queil sait quelle est la largeur
00:47:25 :et la hauteur de Beastquelle est la largeur et la hauteur de foodet du coup t'as pas à t'emmerdertu sais c'est pas seulementX1 égale X2c'est aussiX1 moins la largeur du machindu premier rectangle tu vois c'est un bordel en faità écrire ça à la main
00:47:43 :ah ouaisdonc là c'est beaucoup mieuxil te le fait pour toiet donc làparce que t'imaginesdéfinir cette fonction là c'est possibletu vois y'a rien de complexe mais c'est un peu chiantet donc maintenant la seule chosequi nous reste à faire c'estque à chaque fois que la bête
00:48:03 :elle rencontre la foodelle grossitdonc là pareil on va utiliserune fonction built-inde Pygameet donc on va direqu'on va initialiseren fait on va appliquer un ratioon va faire un scaleun ratio de notre objetBeast à chaque fois qu'il va rencontrerdonc on va initialiser le Beast
00:48:27 :scaleon va dire que c'est 1donc on va multiplier par 1 tant qu'il n'y a pas eude problème et dès queil va rencontrerune collision on va direque le Beastscaleégaleon va faire plus égale 0.1
00:48:49 :en fait on va lui faire gagner 10%de la taille à chaque fois qu'il va rencontrerune fooddonc on va dire plus 0.1ça veut dire qu'à chaque fois qu'il va rencontrer Beast scaleil commence à 1ça va faire 1.1
00:49:03 :etc tu vois, là ça va peut-être être un peuexponentiel parce qu'en fait je vais multiplierl'objet qui aura été multipliéà chaque fois tu voisdonc ça peut aller viteet on peut tout simplementfaire Beast.scaleBile
00:49:19 :et donc là tu disBeast scaledonc là il va grossir et il ne faut pas oublierquand on fait çade faire aussi un scalede l'image parce que là je fais un scale de monrectanglemais il ne faut pas que j'oublie de faire le scalede mon image donc ici
00:49:39 :pourtant tu ne les avais pas liés au débutbah en fait je l'ai lié au débuttu vois je lui ai juste ditque le food, le Beastscalec'est, donc je load mon imageet je le transformemais tu vois je le scale que une foisaprès si je peut-être
00:49:59 :il faudrait que je fasse une fonctionqui est liée à chaque fois tu vois pour que ça soit plus propremais effectivementje pense que tu as bien capté le trucil faudrait qu'il soit lié plusintimementmais là comment je peux te faireici je peux direouais en fait le Beast
00:50:17 :unscaleon va direpar contre ce que je peux fairec'est que je peux utiliserle Beast width et le Beast heightqui sont en fait des attributsde Beast et tu vois je te disaisc'est pour ça qu'on utilise le rectangle dede Pygamepour pouvoir avoir accès aux attributs
00:50:37 :de sa classe parce que commeicije le scale, je scale mon rectangledonc ça veut dire que son widthet son height ils vont augmenteret donc ici dans mondans la représentation graphiquede mon imagesi ici j'utilise lescale que je lui ai mis bah il va
00:50:57 :prendre en compte l'update quej'ai faitdonc icije suis là et donc là normalementquand je vais rencontrerpourquoi il grossit pasil y a un problèmeje vais regarder comment je t'avais écritah oui j'ai fait la mêmej'ai fait la même connerie tout à l'heureparce que j'ai pas updaté en fait
00:51:27 :je lui ai juste ditje lui ai pas dit que j'ai créé une nouvelle bêteen fait pour lui ouaisnormalement c'est un nouveau rectanglenon pardonsi je vais làvoilà là tu voisil grossitdonc voilàdonc voilàaprès je peux mettre une limiteou mettre la fin du jeu
00:51:53 :voilà c'est ça si il prendtrop de placeet après ce qu'on pourrait faire aussic'estd'ailleurs là par exemple tu sais ton imageelle prend beaucoup de placeet est-ce quele food il peut apparaîtresous la bêteouais il pourrait donc il faudraitce cas là parce que s'il apparaît directement
00:52:17 :il va le bouffer directementdonc en fait ici ce seraitdansle collide direct ou mêmedéjàje pense qu'il faudrait le gérerdans les événementsquand tu fais ton duoen fait ouais ici quand tucréesdéjà sur lapremière apparitionil faudrait déjà faire un collide direct
00:52:45 :si on mettrait un if collidedirectégal bah il faudrait le mettre directementouais okbon en fait tu voisc'est ce que je te disais le plus chiantà gérer c'est la création de tes objetsetc et après tu te retrouvesà faire du code pitonclassique comme tu as l'habitude
00:53:05 :gérer, faire des bouclespenser un petit peu à tout ce qui peut arriverdonc là tu vois tu y as pensé directementon pourrait se dire aussiquetu voistu pourrais imaginer définir un espèce detimerà chaque boucle etau lieu defaire grossir la bêteen fait elle pourrait rétrécir
00:53:29 :et puis tu pourrais direle jeu il est perdu si elle atteintune trop petite tailleen fait tu vois il faudraitdéfinir un timer tu dis ouais si monsi mon timeril est échoué bahla foudre elle apparaît à un autreendroit tu voistant que toi si t'es pas
00:53:49 :assez rapide bah elle disparaît elle va ailleurset on pourrait faire rapetisser l'imageet puis voilà il a perdus'il est trop petit et puis voilàle but du jeu c'est d'aller mangermanger le plus possibleouaismais donc tu vois ce que je te dis c'est queune fois que t'as fait ta structure
00:54:07 :t'as plus qu'à faire du code pythonà bien organiser ton codeà faire des fonctions etcdonc c'est pour ça que faire des jeux avec pygamec'est très formateur en pythontu vois typiquement ce qu'on a fait làeuhdéfinitah oui non ça part de mon style ancien
00:54:25 :çale fait de définir dans des variablesde configen fait quand tu fais du pygame tu vois beaucoup de chosestu vois les bouclestu vois des fonctionsmoi j'aurais pu faire on peut tout définir en classeon pourrait dire la bêtec'est une classe en fait tu pourrais dire
00:54:43 :en fait last beastqu'on viendrait icisurcharger avec la méthoderectde pygameet donc on pourrait direbah tu pourrais définirses niveaux de vie après tu pourrais diredef tu l'initialisesavec un niveau de vieenfin tu voisle timer du débutque tu parlais par exemple
00:55:09 :après moi ce que je fais souventc'est que je commence avec un code un peu brutalcomme ça et petit à petit je le structureavec des classes, des méthodes etcah oui okça c'est un trucje sais pas si on pourrait le voir un jour dans un monterey
00:55:23 :c'était la manière dont tu t'organiseseuhouais on en a déjàparlé c'est vrai quenon nonje te dis pas, va voir ce qu'on a déjà faitce que je veux dire c'est quec'est ce que j'essaye de fairependant les mentoras c'est à direau début je pars d'un code un peu brutal
00:55:45 :tu vois et j'essaye de l'organisermais faudraiten fait que je fasse un exempleun vrai exempleje trouve que ça marche bien dans la programmationun peu scientifiqueoù tu commences un peu à coder ligne par ligneet puis petit à petit tu fais des fonctionsmais ouais
00:56:03 :faudrait qu'onje pourrais prévoir un mentora rien que sur çamême si c'est un petit exercicecomme ça on parle plus de l'organisationplutôt que peut-être de Pythonlui-mêmeet surtout il y a un trucon voit pas beaucoupj'ai pas beaucoup regardé non plus les sessions j'avouemais ça serait l'utilisation
00:56:23 :de gitde comment tupourrais le faire en liveen même tempsl'enregistrer, créer les branchesou revient sur un codec'est une bonne idéej'ai dû en parler une ou deux foisen mentora des gits et des branchesmais je peux en refaireparce que c'est importantet puis c'est bien de le voir en live
00:56:47 :vraiment comme situ étais vraiment en prodet que je sais pas situ fais tout le temps des gitsil faut tout le temps faire les commitsj'arrive pas à évaluerje sais pasfranchement moi je fais tout le tempsdès que je fais un nouveau projetgithub
00:57:07 :moi j'utilise le github desktopparce queje trouve que c'esten fait il faut démystifier un peugit et githubmoi de ce que j'en faisc'est hyper simpleil y en a je pense qui vont beaucoup plus loindans git et githubmais moi je me sers des branches
00:57:27 :et je fais des gitsdes gits pullet puis je fais des gits commit et des gits pushet des pull requestmoi ce que j'aime bienc'est utiliser github desktopet d'ailleursj'utilise github desktopet puis dès que je fais un nouveau projetje fais create new repository
00:57:51 :et puis comme ça il me crée un dossiersur mon localet après je peux décider ou nonde le faire un push sur mon githubmais honnêtementsi je vais voir sur mon githubj'ai des repos qui sontpublics mais j'en ai pleinqui sont privés, j'en ai 40
00:58:09 :j'en ai pleinet il y en a plein qui sont pas montrablesmais c'est juste quemoi je prends toujours cette habitude là de le faireet puis si jamais un jour je me faisje perds mon pc ou quoitu récupèresok okje suis en train de prendre l'habitude dès que je fais un petit projet
00:58:27 :même si c'est un tout petit trucje fais les gits pour essayer d'apprendre les commandeset puisà part faire githubet gits commit et gits pushje fais rien d'autreje gère les branchespour revenir sur un code que j'aimeraisje sais pas par exemple sije suis en train de finir le projet du mois
00:58:47 :mais je l'ai fait avec des fonctionset je voulais le fairemaintenant une version avec des classeset du coupest-ce que je crée une branchepour garder une version de ces fonctionset je crée ensuite une brancheoù je retravaillela version avec les classeset ensuite je remets sur la branche principale
00:59:07 :la version qui me plaîtje sais pas comment on gèretu vois je peux fairedonc là je faisun nouveau repodonc je vais dire repodemodonc là pour l'instant il est que dans mon localj'initialise avec un readmetoujoursje faistu rajoutes les gits ignore
00:59:35 :en fait il te fait un gits ignore automatiqueje mets toujours une licencegnu gpl3mais ça c'est au choixdonc je fais createaprès j'ouvre dans visual codedonc là j'ai mon nouveau repoc'est toujours le truc classiqueje fais tout le temps çaaprès j'ouvre un terminal
00:59:59 :je crée directement mon environnement virtuelcomme ça je suis sûrje le crée toujoursje créeen même temps je regarde le messaget'as vu ce que metpas de soucis pour le traint'as deux repos différentspour montrer via consoleet l'autre avec ihmc'est à dire je comprends pas exactement
01:00:33 :ce que tu veux diret'as toujours deux repospour le même projetje te laisse répondremoi ce que je faisje crée mon environnement virtuelje l'activeet je fais directementpar exemple si je fais un pip installpandaj'ai arrêté de le prendreun paquet j'ai un peu plus petit
01:01:03 :je vais créer en même tempsun nouveauje connaissais pas la versionde desktopj'ai vu les gens faire avec le terminaldu coup je fais avec le terminalfranchement faut pas s'en priverdesktop il est supertu vas te créer tout ce qu'il fautlà je suis là
01:01:35 :j'ai créé monj'ai installé une première librairiepriserequirementscomme ça il vatout mettre dans un requirementsdonc là tu vois j'ai un pip panda etcet voilà donc là j'ai un peu initialisémon repo et ce que tu faisaprès quand tu retournes dans github desktopil voit directement que t'as créé
01:01:57 :mon script.py qui est requirementsah oui j'ai pas fait le publishlà pour l'instant il est que dans mon localtu fais publishil te propose est-ce que tu veux le garderprivé ou pas donc moi je faiskeep this code private pour l'instantpublish repodonc voilà il le publie
01:02:17 :je pense que quand tu vas installergithub desktop il va te demanderde te connecter une première fois mais après il aura tout faitdonc làje mets first commitok et donclà je fais commitet tu push tu vois donc tout ce que tu faisavec la ligne de commande tu peux le faire ici avec
01:02:41 :github desktop donc là on est comme çadonc imagine que t'as défini tesattends je regarde les messagesouaissi je crois qu'il est souslinuxle github desktopdonc là imagineque tu définis tu fais ton scriptdonc tu dis defje sais pasaddon va pas écrire addition sinon il va peut-être pas aimer
01:03:09 :customaddAB retourne ABdonc là tu définis ta fonction etc t'es contenttu retournes dans github desktopil voit la différence et tu vois ce qui est pas malc'est que directement t'as les modificationsdonc là tu diset puis update mon scriptdonc tu commit tu push
01:03:31 :et là imaginons que maintenantce que tu disais c'est que tu veuilles transformerton code en class maistu veux pas faire de bêtisesdonc ce que tu fais c'est que tu retournes dans github desktoptu vas ici t'as dans les branchestu dis new branchdonc là tu dis
01:03:49 :class modetu veux tout transformer en class tu fais create branchil la publieparce qu'il faut qu'elle soit publiéedonc là t'es là tu la publiedonc là maintenant si tu commences à faire des modificationsdans tondonc là tu vas venir modifiertu dis en fait ça va être une classe
01:04:17 :donc tu dis classaddclassclass edfje fais n'importe quoic'est juste pour la démoc'est juste pour la démoeuhcinit selfnoneeuhaetself.
01:04:49 :avoilà enfinc'est un truc pourri et donc ça tu le dégagestu dis que tu fais tes modifsmachin donc euhvoilàtu vois que mon vscodeil s'est mis déjà dans la branche automatiquementvoilàattendez je bouge ma fenêtreparce que je viens de perdre un de mes écrans
01:05:17 :euhlà où est-ce quequ'est-ce que vous voyezeuhmon script il est oùouais pardonlà c'est bon vous voyez bien mon scriptdonc là t'es làtu retournes dans github desktopdonc là tu vois qu'il a vu euhdans ta branche class modetu vois il me dit commit to class
01:05:41 :donc làil me dit commit to classdans ta branche class mode tu vois il me ditcommit to class mode donc ok tu fais toncommit tu pushet donc là ça va être le moment oùtu fais tous tes modifs etc et tu disbon bah faudrait peut-être maintenant que
01:05:57 :en fait maintenant je suisbondonc là si tu vas voir déjà surton githubje retourne làtu vois dans mon github j'aideux branches donc j'ai bien ma branchemachin et ce que tu peuxfaire maintenant c'estmerde pardon je retournelà tu vois il te dit
01:06:19 :ah t'as une branchet'as deux branches qui sontdifférentesil te dit compare and pull requestdonc là en gros il va aller vérifier la différenceentre les deux branches etdonc tu peux dire là il dit able to mergetu peux dire create pull requestet donc en fait il va comparer
01:06:37 :et il va dire merge pulldonc tu peux faire confirme mergeet du coup ça veut dire quetu peux même effacer la premièrebranche et donc maintenantsi tu retournes ici là la brancheclasse mode elle existe plusen branche locale normalementicitu dispatch origindonc là il me propose
01:07:01 :de reswitcher mais en fait vu quet'as fait un pull request ici donc làsi je retourne dans le mainmaintenant tu vois ma classemain elle est devenuecelle que j'avais dans montruc donc tant que t'as pas fait tonmerge pull request t'as pas touché à ta classe main
01:07:17 :t'as rienabîméce qui est important de pas oublier c'est que quand tu crées une nouvellebranche tant que t'as pas fait un commitde tes nouvelles modificationstu vas trouver que c'est bizarreen fait ta branche mainelle va voir les modifs aussic'est un truc que j'avais remarqué faut pas oublier
01:07:35 :de faire un premier commit de faire une première modificationdans ta branche pour quetes deux branches elles divergent bien sinontu vas te dire bah tiens c'est bizarreles modifications elles s'effectuent aussisur la branche maingenre par exemple quand tu crées la branchefaut que tu te fasses un commit genre
01:07:51 :une nouvelle branchevoilà c'est ça tu fais first commit nouvelle brancheet tu modifies un petit truc je sais pas un commentaireou un truc dans ton code comme ça t'es sûrque tes deux branches elles vont bien divergerokok ok parfaithumbah voilà justebah The Crow vu que t'es arrivé en retard pour te
01:08:11 :montrer pour te donner envie d'aller voir larediff c'est ce qu'on a faitaujourd'huien gros on a fait un Pygamehumoui c'est pas le bon trucavec Pygame on s'est amusé à faire unjeudonc il est làen grosle jeu c'estd'avoir une grosse bête
01:08:39 :qui va aller se nourrirde nourritureet qui va grossir à chaque fois donc là tu voisen fait je peux bougerla bête avec mes flècheset à chaque fois qu'elle va rencontrer de lanourriture elle va grossir la bête jusqu'à unpoint où on va lui dire t'arrête
01:08:55 :de grossir et voilà donc c'était justepour l'exemple tu vois là à partir dece moment là elle grossit plushumc'étaitvoilà on a fait ça avec Pygameon pourrait imaginer ouais c'est un grosune grosse bêtehumon pourrait imaginer plein de choses à partir du moment où
01:09:15 :elle devient assez grosse on arrête de la faire grossiron pourrait lui dire qu'elle diminue petit àpetit tant qu'elle mange pas etc et qu'elle perdque le jeu est perdu sijamais on a dépasséune certaine taille de meatdonc humc'était top moi je t'ai remerciépour cette session
01:09:33 :bah ouais bah je t'en prieavec plaisir c'était coolc'était une petite session privée du coupje crois que t'arriveras à la fin maishumpareil je sais pas si ça vousintéresse je pourrais mettre cepetit code làsur Github pour quevous puissiez le revoir maismoi j'aimerais bien re-regarder
01:09:55 :donc si jamais même si c'est pasaprès tu pourrais aller faire çaplus tard mais j'aimerais bien re-regarder le codeouais bah je le mettrais j'enlèveraisjuste je pense la tronche deThibaut dans le truc parce que je vais le mettreen public mais hummais ouais je le mettrais pas de soucis
01:10:11 :ok bah je te remerciehumah oui t'avais fait un snack avecPygame aussi je croisok coolhumbon bah voilàje sais pas si vous avez suivi maismoi là je vais pas faire de sessionde mentorat pendantau moins 3 semainesah ok tu pars en vacances ?
01:10:37 :ouaisdonc voilà je pense les 3prochaines semaines ce serace sera peut-êtreThibaut qui en fera de temps en tempsou voilà à l'imaged'aujourd'hui où il y avait que toiLudo et puis à la fin TheCrowje pense qu'en août il y aura peut-être moins de monde
Aucune occurrence trouvée pour « ».