{"id":1654,"date":"2022-10-13T21:00:29","date_gmt":"2022-10-13T19:00:29","guid":{"rendered":"http:\/\/cmi-2i2a.univ-avignon.fr\/?p=1654"},"modified":"2022-10-19T17:52:40","modified_gmt":"2022-10-19T15:52:40","slug":"hacker-un-jeu-video","status":"publish","type":"post","link":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/2022\/10\/13\/hacker-un-jeu-video\/","title":{"rendered":"\u00ab\u00a0Hacker\u00a0\u00bb un jeu vid\u00e9o"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><em>Un atelier pour la F\u00eate de la Science 2022<\/em><\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Derri\u00e8re ce titre volontairement accrocheur, se cache une initiation ludique \u00e0 la programmation en Python, qui s&rsquo;adresse \u00e0 des \u00e9l\u00e8ves de coll\u00e8ge et lyc\u00e9e. Il s&rsquo;agira de faire fonctionner et de modifier une version \u00e9crite en Python, d&rsquo;un des premiers jeux vid\u00e9o dits \u00ab\u00a0d&rsquo;arcade\u00a0\u00bb (Blockade, 1976, voir photo).<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Date : vendredi 14 octobre 2022<\/li><li>Lieu : CERI, salle stat 9<\/li><li>Horaires : 9h15 &#8211; 16h<\/li><li>Animateurs : Pierre Jourlin &amp; Jarod Duret<\/li><\/ul>\n\n\n\n<p>Proc\u00e9dure :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Se connecter sur l&rsquo;ordinateur avec l&rsquo;identifiant et mot de passe donn\u00e9 sur papier par vos animateurs<\/li><li>Ouvrir un \u00ab\u00a0terminal\u00a0\u00bb (CTRL+ALT+T)<\/li><li>tapez \u00ab\u00a0<code>python3 -m pip install -U pygame --user<\/code>\u00a0\u00bb et appuyez sur <code>&lt;entr\u00e9e&gt;<\/code><\/li><li>tapez \u00ab\u00a0geany &amp;\u00a0\u00bb appuyez sur <code>&lt;entr\u00e9e&gt;<\/code><\/li><li>copiez le code source suivant dans la fen\u00eatre de l&rsquo;\u00e9diteur :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\nimport time\nimport random\n \npygame.init()\n \n# D\u00e9finition des couleurs en composante (Rouge, Vert, Bleu) \nblanc = (255, 255, 255)\njaune = (255, 255, 102)\nnoir = (0, 0, 0)\nrouge = (213, 50, 80)\nvert = (0, 255, 0)\nbleu = (50, 153, 213)\n \nlargeur_plateau = 600\nhauteur_plateau = 400\n \nplateau = pygame.display.set_mode( ( largeur_plateau, hauteur_plateau ) )\npygame.display.set_caption(\"Le Serpent Num\u00e9rique du LIA\")\n \nhorloge = pygame.time.Clock()\n \ntaille_bloc = 20\nvitesse_serpent = 5\n \nstyle_caract\u00e8res = pygame.font.SysFont(\"bahnschrift\", 25)\nstyle_scores = pygame.font.SysFont(\"comicsansms\", 35)\n \n \ndef votre_score(score):\n    valeur = style_scores.render(\"Votre Score: \" + str(score), True, jaune)\n    plateau.blit(valeur, &#091;0, 0])\n \ndef notre_serpent(taille_bloc, corps_serpent):\n    for x in corps_serpent:\n        pygame.draw.rect(plateau, noir, &#091;x&#091;0], x&#091;1], taille_bloc, taille_bloc])\n \ndef message(msg, color, d\u00e9calage=0):\n    mesg = style_caract\u00e8res.render(msg, True, color)\n    plateau.blit(mesg, &#091;largeur_plateau \/ 6, hauteur_plateau \/ 3+d\u00e9calage])\n \ndef boucle_jeu():\n    fin_jeu = False\n    ferme_jeu = False\n \n    x1 = largeur_plateau \/ 2\n    y1 = hauteur_plateau \/ 2\n \n    x1_change = 0\n    y1_change = 0\n \n    corps_serpent = &#091;]\n    longueur_serpent = 1\n \n    repas_x = round(random.randrange(0, largeur_plateau - taille_bloc) \/ taille_bloc) * taille_bloc\n    repas_y = round(random.randrange(0, hauteur_plateau - taille_bloc) \/ taille_bloc) * taille_bloc\n \n    while not fin_jeu:\n \n        while ferme_jeu == True:\n            plateau.fill(bleu)\n            message(\"Zut ! Vous avez perdu !\", rouge)\n            message(\"Appuyez sur J pour jouer encore\", jaune, 20)\n            message(\"ou sur Q pour quitter le jeu.\", jaune, 40)\n            votre_score(longueur_serpent - 1)\n            pygame.display.update()\n \n            for \u00e9v\u00e8nement in pygame.event.get():\n                if \u00e9v\u00e8nement.type == pygame.KEYDOWN:\n                    if \u00e9v\u00e8nement.key == pygame.K_q:\n                        fin_jeu = True\n                        ferme_jeu = False\n                    if \u00e9v\u00e8nement.key == pygame.K_j:\n                        boucle_jeu()\n \n        for \u00e9v\u00e8nement in pygame.event.get():\n            if \u00e9v\u00e8nement.type == pygame.QUIT:\n                fin_jeu = True\n            if \u00e9v\u00e8nement.type == pygame.KEYDOWN:\n                if \u00e9v\u00e8nement.key == pygame.K_LEFT:\n                    x1_change = -taille_bloc\n                    y1_change = 0\n                elif \u00e9v\u00e8nement.key == pygame.K_RIGHT:\n                    x1_change = taille_bloc\n                    y1_change = 0\n                elif \u00e9v\u00e8nement.key == pygame.K_UP:\n                    y1_change = -taille_bloc\n                    x1_change = 0\n                elif \u00e9v\u00e8nement.key == pygame.K_DOWN:\n                    y1_change = taille_bloc\n                    x1_change = 0\n \n        if x1 &gt;= largeur_plateau or x1 &lt; 0 or y1 &gt;= hauteur_plateau or y1 &lt; 0:\n            ferme_jeu = True\n        x1 += x1_change\n        y1 += y1_change\n        plateau.fill(bleu)\n        pygame.draw.rect(plateau, vert, &#091;repas_x, repas_y, taille_bloc, taille_bloc])\n        t\u00eate_serpent = &#091;]\n        t\u00eate_serpent.append(x1)\n        t\u00eate_serpent.append(y1)\n        corps_serpent.append(t\u00eate_serpent)\n        if len(corps_serpent) &gt; longueur_serpent:\n            del corps_serpent&#091;0]\n \n        for x in corps_serpent&#091;:-1]:\n            if x == t\u00eate_serpent:\n                ferme_jeu = True\n \n        notre_serpent(taille_bloc, corps_serpent)\n        votre_score(longueur_serpent - 1)\n \n        pygame.display.update()\n \n        if x1 == repas_x and y1 == repas_y:\n            repas_x = round(random.randrange(0, largeur_plateau - taille_bloc) \/ taille_bloc) * taille_bloc\n            repas_y = round(random.randrange(0, hauteur_plateau - taille_bloc) \/ taille_bloc) * taille_bloc\n            longueur_serpent += 1\n        horloge.tick(vitesse_serpent)\n    pygame.quit()\n    quit()<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Les animateurs vont vous expliquer rapidement ce <strong>code source<\/strong><\/li><li>Enregistrez le fichier sous le nom \u00ab\u00a0<code>serpent.py<\/code>\u00a0\u00bb et revenez au terminal<\/li><li>Dans le terminal, tapez \u00ab\u00a0<code>python3 serpent.py<\/code>\u00ab\u00a0<\/li><li>Jouez 2 ou 3 parties \ud83d\ude42<\/li><li>Modifiez quelques param\u00e8tres \u00e9l\u00e9mentaires du jeu :<ul><li>Les couleurs<\/li><li>Taille du plateau<\/li><li>Textes<\/li><li>Taille Serpent<\/li><li>Vitesse serpent<\/li><li>Style des caract\u00e8res<\/li><\/ul><\/li><li>Ajoutez quelques fonctions  :<ul><li>Changer longueur initale du serpent<\/li><li>Repas vert -&gt; allongement de 1<\/li><li>Repas jaune -&gt; allongement de 2<\/li><li>Repas rouge -&gt; allongement de 3<\/li><li>allongement -&gt; augmentation\/r\u00e9duction vitesse<\/li><li>Cr\u00e9ation d&rsquo;un hall of Fame<\/li><li>2 joueurs (difficile)<\/li><\/ul><\/li><li>A tout moment, n&rsquo;h\u00e9sitez pas \u00e0 demander de l&rsquo;aide aux animateurs<\/li><li>A vous de jouer et \u00e0 vous de cr\u00e9er !<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Un atelier pour la F\u00eate de la Science 2022 Derri\u00e8re ce titre volontairement accrocheur, se cache une initiation ludique \u00e0 la programmation en Python, qui s&rsquo;adresse \u00e0 des \u00e9l\u00e8ves de coll\u00e8ge et lyc\u00e9e. Il s&rsquo;agira de faire fonctionner et de modifier une version \u00e9crite en Python, d&rsquo;un des premiers jeux vid\u00e9o dits \u00ab\u00a0d&rsquo;arcade\u00a0\u00bb (Blockade, 1976, voir photo). Date : vendredi 14 octobre 2022 Lieu : CERI, salle stat 9 Horaires : 9h15 &#8211; 16h Animateurs : Pierre Jourlin &amp; Jarod&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/2022\/10\/13\/hacker-un-jeu-video\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p>\n","protected":false},"author":52,"featured_media":1666,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"coauthors":[114],"class_list":["post-1654","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-conference-decouverte"],"_links":{"self":[{"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/posts\/1654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1654"}],"version-history":[{"count":10,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/posts\/1654\/revisions"}],"predecessor-version":[{"id":1671,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/posts\/1654\/revisions\/1671"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/media\/1666"}],"wp:attachment":[{"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/categories?post=1654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/tags?post=1654"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cmi-2i2a.univ-avignon.fr\/index.php\/wp-json\/wp\/v2\/coauthors?post=1654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}