Paste Search Dynamic
def rectangle
  1. from turtle import *
  2. from random import *
  3. from math import *
  4.  
  5. screen = Screen()
  6.  
  7.  
  8. # on utilise différentes fonctions rectangle afin de les faire dans deux sens d'écriture différents
  9. def rectangle1(x, y):
  10.     i = 0
  11.     while i <= 1:
  12.         forward(x)
  13.         left(90)
  14.         forward(y)
  15.         left(90)
  16.         i += 1
  17.  
  18.  
  19. def rectangle2(x, y):
  20.     i = 0
  21.     while i <= 1:
  22.         forward(x)
  23.         right(90)
  24.         forward(y)
  25.         right(90)
  26.         i += 1
  27.  
  28.  
  29. # Cette fonction trace des triangles isocèles bien précis, en fonction de la taille de sa base qui est z et des angles qui nous intéresse
  30. def triangle(z):
  31.     begin_fill()
  32.     forward(z)
  33.     left(110)
  34.     forward(sqrt(2) * z)
  35.     left(180 - 40)
  36.     forward(sqrt(2) * z)
  37.     end_fill()
  38.  
  39.  
  40. # le rectangle vert qui sert de pelouse est tracé avec cette procédure en se basant sur la taille en largeur et en hauteur de la fenêtre ainsi que d'un valeur arbitraire que l'on a définie à partir de notre croquis.
  41. def pelouse():
  42.     setheading(0)
  43.     penup()
  44.     goto(-(window_width() / 2), 160)
  45.     pendown()
  46.     fillcolor("#22B14C")
  47.     begin_fill()
  48.     right(90)
  49.     forward(window_height() / 2 + 160)
  50.     left(90)
  51.     forward(window_width())
  52.     left(90)
  53.     forward(window_height() / 2 + 160)
  54.     left(90)
  55.     forward(window_width())
  56.     end_fill()
  57.     left(180)
  58.  
  59.  
  60. # Cette fonctione qui prend en entrée x,y qui sont les point en bas à gauche de la flamme rouge et z qui est la taille de la basse de se triangle
  61. def brasero(x, y, z):
  62.     setheading(0)
  63.     pu()
  64.     goto(x, y)
  65.     pd()
  66.     color('red')
  67.     triangle(z)
  68.     setheading(0)
  69.     forward(0.15 * z)
  70.     color('orange')
  71.     triangle(0.70 * z)
  72.     setheading(0)
  73.     forward(0.15 * z)
  74.     color('yellow')
  75.     triangle(0.4 * z)
  76.     pu()
  77.     goto(x, y)
  78.     pd()
  79.     color('black')
  80.     setheading(0)
  81.     begin_fill()
  82.     rectangle2(z, 0.25 * z)
  83.     end_fill()
  84.     setheading(0)
  85.     pu()
  86.     goto(x + z, y - 0.25 * z)
  87.     pd()
  88.     color('brown')
  89.     setheading(180)
  90.     triangle(z)
  91.     end_fill()
  92.     left(110 + 70)
  93.     forward(0.75 * z)
  94.     right(70)
  95.     begin_fill()
  96.     rectangle1(3/4/sqrt(2) * z-2.9, 4 * z)
  97.     end_fill()
  98.     left(180)
  99.  
  100.  
  101. # création d'une fonction pour dessiner le modèle de sapin d'arrière-plan
  102. def sapin(x, a, b):
  103.     setheading(0)
  104.     up()
  105.     goto(a, b)
  106.     down()
  107.     # on va commencer à faire le tronc du sapin en marron avec un carré
  108.     pencolor("black")
  109.     fillcolor("brown")
  110.     begin_fill()
  111.     for i in range(4):
  112.         forward(x / 2)
  113.         right(90)
  114.     end_fill()
  115.     # on finit de remplir la couleur du tronc
  116.     up()
  117.     goto(a - x / 4, b)
  118.     down()
  119.     pencolor("black")
  120.     fillcolor("green")
  121.     # on va ajouter le triangle pour faire le sapin en vert
  122.     begin_fill()
  123.     forward(x)
  124.     left(180 - 75.5)
  125.     # les angles ont été calculé grâce à une équation sur le cosinus entre les rapport de taille
  126.     forward(x * 2)
  127.     left(180 - 29)
  128.     forward(x * 2)
  129.     setheading(0)
  130.     end_fill()
  131.     # on finit de remplir le vert du sapin
  132.  
  133.  
  134. # l'appel répété du motif en fond avec quelques valeurs arbitraires pour le placement du premier arbre de chaque rangée
  135. def foret(debutx, debuty, tailleBaseTriangle):
  136.     for i in range(0, 6):
  137.         sapin(tailleBaseTriangle, debutx, debuty)
  138.         debutx += tailleBaseTriangle
  139.     debutx = debutx - 6 * tailleBaseTriangle + tailleBaseTriangle / 2
  140.     debuty -= tailleBaseTriangle / 2
  141.     for i in range(0, 5):
  142.         sapin(tailleBaseTriangle, debutx, debuty)
  143.         debutx += tailleBaseTriangle
  144.  
  145.  
  146. # Trace une étoile à partir de la coordonnée du point de la branche la plus à gauche et de la
  147. def etoile(x, y, longueur):
  148.     penup()
  149.     goto(x, y)
  150.     pendown()
  151.     color("yellow")
  152.     right(36)
  153.     begin_fill()
  154.     for i in range(5):
  155.         forward(longueur)
  156.         left(144)
  157.     end_fill()
  158.     setheading(0)
  159.  
  160. #génère des coordonnées aléatoire dans une zone définie pour ensuite appeler la fonction étoile et les trcar aux sites coordonnées.
  161. def generationEtoile(widthMin, widthMax, heightMin, heightMax, nbEtoile, tailleEtoile):
  162.     coordEtoile = []
  163.     temporaire = []
  164.     while len(coordEtoile) != nbEtoile+1:
  165.         temporaire.append([randint(widthMin, widthMax), randint(heightMin, heightMax)])
  166.         if len(coordEtoile) != 0:
  167.             verification = 1
  168.             i=0
  169.             while i < len(coordEtoile)-1:
  170.                 if abs(coordEtoile[i][0] - temporaire[0][0]) <= tailleEtoile or abs(
  171.                         coordEtoile[i][1] - temporaire[0][1]) <= tailleEtoile:
  172.                     verification = 0
  173.                 i+=1
  174.             if verification == 1:
  175.                 coordEtoile.append(temporaire[0])
  176.                 del temporaire[0]
  177.             else:
  178.                 del temporaire[0]
  179.         else:
  180.             coordEtoile.append(temporaire[0])
  181.     del coordEtoile[0]
  182.     i=0
  183.     while i<len(coordEtoile)-1:
  184.         etoile(coordEtoile[i][0],coordEtoile[i][1],tailleEtoile)
  185.         i+=1
  186.  
  187. # la fonction qui sert à écrire le fusil qui sert au décor
  188. def fusil(x, y, z):
  189.     up()
  190.     goto(x, y)
  191.     left(50)
  192.     # couleur grise du corps du fusil
  193.     color("#666666")
  194.     begin_fill()
  195.     # on dessine d'abord la poignée
  196.     rectangle1(z, z * 0.7)
  197.     end_fill()
  198.     # vu qu'on est dirigé à 50 degré on utilise les fonctions sin et cos pour se déplacer
  199.     goto(x + z * 0.8 * cos(radians(50)), y + z * 0.8 * sin(radians(50)))
  200.     begin_fill()
  201.     # cette portion de code sert à faire la crosse de l'arme pour qu'elle soit stylisé (pas droite et carré)
  202.     right(90)
  203.     forward(z)
  204.     left(90)
  205.     forward(z * 0.6)
  206.     left(100)
  207.     forward(z * 1.2)
  208.     left(260)
  209.     end_fill()
  210.     goto(x + z * 0.8 * cos(radians(50)), y + z * 0.8 * sin(radians(50)))
  211.     begin_fill()
  212.     # le premier sert à faire le haut de l'arme puis le deuxième repasse dessus afin de faire le canon qui est plus long
  213.     rectangle1(z * 0.7, z * 3.5)
  214.     rectangle1(z * 0.4, z * 3.7)
  215.     end_fill()
  216.     goto(x + z * 0.8 * cos(radians(50)) + z * 0.7 * cos(radians(140)),
  217.          y + z * 0.8 * sin(radians(50)) + z * 0.7 * sin(radians(140)))
  218.     left(180)
  219.     pd()
  220.     # on dessine la gachette avec un arc de cercle
  221.     circle(-(z * 0.2), 90)
  222.     pu()
  223.     left(180 + 90)
  224.     goto(x + z * 0.8 * cos(radians(50)) + z * 0.7 * cos(radians(140)) + z * 0.3 * cos(radians(140)),
  225.          y + z * 0.8 * sin(radians(50)) + z * 0.7 * sin(radians(140)) + z * 0.3 * sin(radians(140)))
  226.     left(180)
  227.     pd()
  228.     # on dessine le socle qui contient la gachette
  229.     circle(z * 0.3, 95)
  230.     pu()
  231.     left(85)
  232.     goto(x + z * 0.7 * cos(radians(50)) + z * 3.3 * cos(radians(140)),
  233.          y + z * 0.7 * sin(radians(50)) + z * 3.3 * sin(radians(140)))
  234.     # on met une couleur bois pour le rechargement de l'arme
  235.     color("#E47833")
  236.     begin_fill()
  237.     # on dessine le rechargelent de l'arme
  238.     rectangle2(z * 0.3, z * 2.2)
  239.     end_fill()
  240.     right(50)
  241.  
  242. #cette fonction sert à faire une croix pleine pour les yeux du cadavre zombie
  243. def croix(x):
  244.     begin_fill()
  245.     left(45)
  246.     for i in range (1,5):
  247.         fd(x*0.1)
  248.         left(90)
  249.         fd(x*0.1)
  250.         right(90)
  251.         fd(x*0.1)
  252.         right(90)
  253.     end_fill()
  254.     right(45)
  255.  
  256. #cette fonction écrit le cadavre du zombie dans le décor
  257. def cadavre(x,y,z):
  258.     pu()
  259.     goto(x,y)
  260.     pd()
  261.     color("#CDCDCD")
  262. #on dessine d'abord les chaussures
  263.     begin_fill()
  264.     rectangle2(z*2,z)
  265.     end_fill()
  266.     fd(z*2)
  267.     color("#9F9F5F")
  268.     begin_fill()
  269. #puis le pantalon
  270.     rectangle2(z*5,z)
  271.     end_fill()
  272.     fd(z*5)
  273.     color("#FFFF00")
  274.     begin_fill()
  275. #puis le corps
  276.     rectangle2(z*7,z)
  277.     end_fill()
  278.     fd(z*6)
  279.     color("#8FBC8F")
  280. #puis le bras visible
  281.     begin_fill()
  282.     rectangle2(z,z*2.5)
  283.     end_fill()
  284. #les trois lignes de codes suivantes servent à se replacer pour dessiner la tête
  285.     fd(z)
  286.     left(90)
  287.     fd(z*0.3)
  288.     right(90)
  289.     begin_fill()
  290.     rectangle2(z*3,z*1.6)
  291.     end_fill()
  292. #puis on se place pour dessiner la bouche du zombie
  293.     fd(z*0.7)
  294.     right(90)
  295.     fd(z*0.3)
  296.     color("#000000")
  297.     pensize(z*0.1)
  298.     pd()
  299.     left(90)
  300.     fd(z*0.1)
  301.     right(90)
  302.     fd(z)
  303.     pu()
  304.     left(90)
  305. #et enfin on dessine les yeux en forme de croix du zombie
  306.     fd(z*1.1)
  307.     croix(z)
  308.     left(90)
  309.     fd(z*0.9)
  310.     right(90)
  311.     croix(z)
  312.  
  313. #Trace les cratères de la lune qui sont formé d'un cercle contenant un cerle de couleur différente.
  314. def cratere(x1,y1,taille):
  315.     pu()
  316.     goto(x1,y1)
  317.     pd()
  318.     color('#cccccc')
  319.     begin_fill()
  320.     circle(taille)
  321.     end_fill()
  322.     pu()
  323.     goto(xcor(), ycor()+2)
  324.     pd()
  325.     color('#d8d8d8')
  326.     begin_fill()
  327.     circle(taille - 2)
  328.     end_fill()
  329.  
  330. #Trace la lune avec ses cratères et un drapeau américain
  331. def lune(x,y,rayon):
  332.     pu()
  333.     goto(x,y)
  334.     pd()
  335.     color('#e5e5e5')
  336.     begin_fill()
  337.     circle(rayon)
  338.     end_fill()
  339.     cratere(x-rayon/4,y+rayon-2*rayon/8,rayon/8)
  340.     cratere(x-2*rayon/3,y+rayon,rayon/6)
  341.     cratere(x-rayon/5,y+rayon/10,rayon/6)
  342.     cratere(x+rayon-2*rayon/4,y+rayon/2,rayon/7)
  343.     cratere(x+rayon/2,y+rayon+rayon/4,rayon/4)
  344.     drapeau(x-rayon/4,y+3*rayon/2)
  345.  
  346. #Trace un drapeau minitature d'une taille déjà définie car dur à proportionner aux coordonnées x,y
  347. def drapeau(x,y):
  348.     pu()
  349.     goto(x,y)
  350.     pd()
  351.     color('black')
  352.     pensize(1)
  353.     setheading(90)
  354.     forward(14)
  355.     right(90)
  356.     forward(14.6)
  357.     right(90)
  358.     fd(6.5)
  359.     right(90)
  360.     fd(14.6)
  361.     pu()
  362.     goto(xcor()+0.9,ycor()+40/50)
  363.     pd()
  364.     pensize(1)
  365.     color('red')
  366.     setheading(0)
  367.     fd(13+1)
  368.     pu()
  369.     goto(xcor()-13-1,ycor()+40/50)
  370.     pd()
  371.     color('white')
  372.     fd(13+1)
  373.     pu()
  374.     goto(xcor()-13-1,ycor()+40/50)
  375.     pd()
  376.     color('red')
  377.     fd(13+1)
  378.     pu()
  379.     goto(xcor()-13-1,ycor()+40/50)
  380.     pd()
  381.     color('white')
  382.     fd(13+1)
  383.     pu()
  384.     goto(xcor()-13-1,ycor()+40/50)
  385.     pd()
  386.     for i in range(0,3):
  387.         color('yellow')
  388.         fd(13/12)
  389.         color('blue')
  390.         fd(13/ 12)
  391.     color('red')
  392.     fd(6*13/12+1)
  393.     pu()
  394.     goto(xcor()-13-1,ycor()+40/50)
  395.     pd()
  396.     for i in range(0,3):
  397.         color('blue')
  398.         fd(13/12)
  399.         color('yellow')
  400.         fd(13/ 12)
  401.     color('white')
  402.     fd(6*13/12+1)
  403.     pu()
  404.     goto(xcor()-13-1,ycor()+40/50)
  405.     pd()
  406.     for i in range(0,3):
  407.         color('yellow')
  408.         fd(13/12)
  409.         color('blue')
  410.         fd(13/12)
  411.     color('red')
  412.     fd(6*13/12+1)
  413.  
  414. # fonction qui appelle les fonctions qui trace tous le décors
  415. def arrierePlan():
  416.     pelouse()
  417.     foret(200, 160, 80)
  418.     fusil(window_width() / 2 - 270, 140 - window_height() / 2, 30)
  419.     brasero(window_width() / 2 - 80, 250 - window_height() / 2, 40)
  420.     brasero(-window_width() / 2 + 80, 250 - window_height() / 2, 40)
  421.     lune(-window_width()/2+100, window_height()/2-150, 70)
  422.     cadavre(-window_width()/10,-180,window_width()/100)
  423.     generationEtoile(-window_width()/2+100+70,200-80/2,160,window_height()/2,9,40)
  424.  
  425. def corps(x):
  426.     # On utilise une fonction du module random pour choisir une couleur au hasard parmis la liste spécifiée
  427.     color(choices(["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF"], weights=none, cum_weights=none,k=1))
  428.     begin_fill()
  429.     # On fait un rectangle pour le corps du zombie
  430.     for i in range(1, 3):
  431.         forward(x)
  432.         left(90)
  433.         forward(x * 1.15)
  434.         left(90)
  435.     end_fill()
  436.  
  437.  
  438. def pantalon(x):
  439.     # On dessine la forme des jambes du zombie
  440.     color("#9F9F5F")
  441.     begin_fill()
  442.     forward(x)
  443.     right(90)
  444.     forward(x * 2)
  445.     right(90)
  446.     forward(x * 0.45)
  447.     right(90)
  448.     forward(x * 1.7)
  449.     left(90)
  450.     forward(x * 0.1)
  451.     left(90)
  452.     forward(x * 1.7)
  453.     right(90)
  454.     forward(x * 0.45)
  455.     right(90)
  456.     forward(x * 2)
  457.     right(90)
  458.     end_fill()
  459.  
  460.  
  461. def chaussure(x):
  462.     # On dessine des rectangles pour les chaussures
  463.     color("#CDCDCD")
  464.     begin_fill()
  465.     for i in range(1, 3):
  466.         forward(x * 0.45)
  467.         right(90)
  468.         forward(x * 0.3)
  469.         right(90)
  470.     end_fill()
  471.  
  472.  
  473. def bras(x):
  474.     # On dessine des carrés pour les bras du zombie comme si ils étaient tendus vers l'avant
  475.     color("#8FBC8F")
  476.     begin_fill()
  477.     for i in range(1, 5):
  478.         forward(x * 0.5)
  479.         right(90)
  480.     end_fill()
  481.  
  482.  
  483. def tete(x):
  484.     # On dessine un carré pour la tête
  485.     color("#8FBC8F")
  486.     begin_fill()
  487.     for i in range(1, 5):
  488.         forward(x)
  489.         left(90)
  490.     end_fill()
  491.  
  492.  
  493. def teteMort(x):
  494.     # On remplace la tête du zombie tué par la couleur du fond
  495.     color("#22B14C")
  496.     begin_fill()
  497.     for i in range(1, 5):
  498.         forward(x)
  499.         left(90)
  500.     end_fill()
  501.  
  502.  
  503. def visage(x, y, z):
  504.     # On dessine les traits du visage, c'est-à-dire yeux, sourcils, et bouches
  505.     goto(x + z * 0.3, y + z * 1.15 + z * 0.3)
  506.     color("#000000")
  507.     down()
  508.     goto(xcor()+0.4*z,ycor())  # bouche
  509.     up()
  510.     goto(x + z * 0.2, y + z * 1.15 + z * 0.6)
  511.     dot(size=z * 0.1)
  512.     goto(x + z * 0.15, y + z * 1.15 + z * 0.7)
  513.     down()
  514.     goto(xcor() + 0.1 * z, ycor()) #sourcil gauche
  515.     up()
  516.     goto(x + z * 0.8, y + z * 1.15 + z * 0.6)
  517.     dot(size=z * 0.1)
  518.     goto(x + z * 0.75, y + z * 1.15 + z * 0.7)
  519.     down()
  520.     goto(xcor() + 0.1 * z, ycor())  #sourcil droit
  521.     up()
  522.  
  523.  
  524. def os(x):
  525. #On dessine un os à la place de la tête du zombie (influence du jeu Among Us)
  526.     color("#FFFFFF")
  527.     pd()
  528.     begin_fill()
  529.     left(90)
  530.     forward(x*0.4)
  531.     left(90)
  532.     circle(-(x*0.15),270)
  533.     left(180)
  534.     circle(-(x*0.15),270)
  535.     left(90)
  536.     forward(x*0.4)
  537.     end_fill()
  538.     setheading(0)
  539.  
  540. def zombie(x, y, z):
  541.     # On met en forme le zombie en utilisant les fonctions créées au préalable et en les plaçant où il doivent être
  542.     up()
  543.     goto(x, y)
  544.     corps(z)
  545.     pantalon(z)
  546.     goto(x, y - z * 2)
  547.     chaussure(z)
  548.     goto(x + z * 0.55, y - z * 2)
  549.     chaussure(z)
  550.     goto(x - z * 0.25, y + z * 1.15)
  551.     bras(z)
  552.     goto(x + z * 0.75, y + z * 1.15)
  553.     bras(z)
  554.     goto(x, y + z * 1.15)
  555.     tete(z)
  556.     visage(x, y, z)
  557.  
  558.  
  559. def zombieMort(x,y,z) :
  560. #On remplace la tête du zombie mort par le fond puis l'os pour montrer qu'il a été éliminé
  561.     goto(x,y+z*1.15)
  562.     teteMort(z)
  563.     goto(x+z*0.35,y+z*1.15)
  564.     os(z)
  565.  
  566.  
  567. def testQuille(x, y, nbZombies):
  568.     for i in range(0, nbZombies):
  569.         zombie(x, y, window_width()/40)
  570.         zombieMort(x,y,window_width()/40)
  571.         x += window_width()/20
  572.  
  573.  
  574. # pour supprimer les animations de turtle
  575.  
  576. tracer(0)
  577. # setup taille et nom de la fenêtre turtle on a voulu approximer un fullscreen mais pas moyen mais le carré en haut à droite fonctionne quand même
  578. screen.title("projet Axel Delille et Joachim Véran")
  579. screen.setup(1.0, 1.0)
  580. # couleur de fond pour ne pas faire un tracé de plus
  581. bgcolor("black")
  582. # appel de la fonction qui appelle les fonctions qui trace tous le décors
  583. arrierePlan()
  584. testQuille(-window_width() / 2 + 200, -30, 15)
  585. pu()
  586. goto(-20, -window_height()/2+100)
  587. pd()
  588. color('#850606')
  589. write("Ceci est un texte qui sera remplacé par les messages du jeu", move=false, align='center', font=('Algerian', 15))
  590. hideturtle()
  591. update()
  592. done()
  593.  
Parsed in 0.128 seconds