Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Atelier] Fond animé Space Invaders

Venez vous entraîner avec le langage de votre choix :)

    1 mai 2013 à 10:15:28

    Je vais creer un jeu Space Invaders spécial site du zéro lorsqu'on cliquera sur le Space il changera de couleur et perdra de la vie.préparez vous a être battus :D
    • Partager sur Facebook
    • Partager sur Twitter
    Hugo Duval,18 ans,Programmateur,Admirateur de Pommes de Terres :)
      1 mai 2013 à 14:21:36

      J'ai fait une version rainmeter.
      Pour ceux qui ne connaissent pas, Rainmeter est un outil permettant de customiser son bureau Windows, ajouter des liens ou changer la barre des taches.

      [Rainmeter]
      Update=3000
      DynamicWindowSize
      LeftMouseDownAction= ["http://www.siteduzero.com/forum/sujet/atelier-fond-anime-space-invaders"]
      
      [Metadata]
      Author=nico69
      Description=Space invader.
      Version=1.0.0
      ;------------------------------------
      
      ; calcul des variables
      [CalcX]
      Measure=Calc
      Formula=random
      UpdateRandom=1
      LowBound=1
      HighBound=(#SCREENAREAWIDTH#-117)
      
      [CalcY]
      Measure=Calc
      Formula=random
      UpdateRandom=1
      LowBound=1
      HighBound=(#SCREENAREAHEIGHT#-102)
      
      [CalcEye1]
      Measure=Calc
      Formula=17*random
      UpdateRandom=1
      LowBound=0
      HighBound=1
      
      [CalcEye2]
      Measure=Calc
      Formula=17*random
      UpdateRandom=1
      LowBound=0
      HighBound=1
      
      [CalcRed]
      Measure=Calc
      Formula=random
      UpdateRandom=1
      LowBound=0
      HighBound=255
      
      [CalcGreen]
      Measure=Calc
      Formula=random
      UpdateRandom=1
      LowBound=0
      HighBound=255
      
      [CalcBlue]
      Measure=Calc
      Formula=random
      UpdateRandom=1
      LowBound=0
      HighBound=255
      ; ----------------------------------
      
      ; Blocks
      
      ; ligne 1
      [MeterBlock1]
      Meter=Button
      X=(34+[CalcX])
      Y=(0+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock2]
      Meter=Button
      X=(68+[CalcX])
      Y=(0+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; ligne 2
      [MeterBlock3]
      Meter=Button
      X=(17+[CalcX])
      Y=(17+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock4]
      Meter=Button
      X=(34+[CalcX])
      Y=(17+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock5]
      Meter=Button
      X=(51+[CalcX])
      Y=(17+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock6]
      Meter=Button
      X=(68+[CalcX])
      Y=(17+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock7]
      Meter=Button
      X=(85+[CalcX])
      Y=(17+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; ligne 3
      [MeterBlock8]
      Meter=Button
      X=(17+[CalcX])
      Y=(34+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock9]
      Meter=Button
      X=(51+[CalcX])
      Y=(34+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock10]
      Meter=Button
      X=(85+[CalcX])
      Y=(34+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; ligne 4
      [MeterBlock11]
      Meter=Button
      X=(17+[CalcX])
      Y=(51+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock12]
      Meter=Button
      X=(51+[CalcX])
      Y=(51+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock13]
      Meter=Button
      X=(85+[CalcX])
      Y=(51+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; ligne 5
      [MeterBlock14]
      Meter=Button
      X=(0+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock15]
      Meter=Button
      X=(17+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock16]
      Meter=Button
      X=(34+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock17]
      Meter=Button
      X=(51+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock18]
      Meter=Button
      X=(68+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock19]
      Meter=Button
      X=(85+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock20]
      Meter=Button
      X=(102+[CalcX])
      Y=(68+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; ligne 6
      [MeterBlock21]
      Meter=Button
      X=(0+[CalcX])
      Y=(85+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock22]
      Meter=Button
      X=(34+[CalcX])
      Y=(85+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock23]
      Meter=Button
      X=(68+[CalcX])
      Y=(85+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      [MeterBlock24]
      Meter=Button
      X=(102+[CalcX])
      Y=(85+[CalcY])
      W=16
      H=16
      SolidColor=[CalcRed],[CalcBlue],[CalcGreen]
      DynamicVariables=1
      
      ; yeux
      [Eye1]
      Meter=Button
      X=(34+[CalcX])
      Y=(34+[CalcEye1]+[CalcY])
      W=16
      H=16
      SolidColor=0,0,0
      DynamicVariables=1
      
      [Eye2]
      Meter=Button
      X=(68+[CalcX])
      Y=(34+[CalcEye2]+[CalcY])
      W=16
      H=16
      SolidColor=0,0,0
      DynamicVariables=1

       Le skin fait exactement la même chose que l'exemple, sur le bureau, avec un lien sur ce forum lorsque l'on clique sur la bestiole.

      Un lien de téléchargement : https://dl.dropboxusercontent.com/u/77857161/space%20invader%20sdz.rmskin

      -
      Edité par n!co69 1 mai 2013 à 14:22:41

      • Partager sur Facebook
      • Partager sur Twitter
      "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
        1 mai 2013 à 15:10:12

        Dans la catégorie inutilement compliqué, je me suis amusé à le faire en ascii avec Applescript, soit un langage de contrôle pour mac os. Comme il n'y a pas de moyen de faire de sortie texte, le script simule un appui au clavier. Il faut donc ouvrir un éditeur de texte quelconque et ça se met à taper tout seul.

        set pattern to {{{"     ##          ##"}, {"       ##      ##"}, {"     ##############"}, {"   #### o######o ####"}, {" ######  ######  ######"}, {" ##  ##############  ##"}, {" ##  ##          ##  ##"}, {"       ####  ####"}}, {{"     ##          ##"}, {"       ##      ##"}, {"     ##############"}, {"   ####  ######  ####"}, {" ###### o######o ######"}, {" ##  ##############  ##"}, {" ##  ##          ##  ##"}, {"       ####  ####"}}, {{"     ##          ##"}, {"       ##      ##"}, {"     ##############"}, {"   #### o######  ####"}, {" ######  ######o ######"}, {" ##  ##############  ##"}, {" ##  ##          ##  ##"}, {"       ####  ####"}}, {{"     ##          ##"}, {"       ##      ##"}, {"     ##############"}, {"   ####  ######o ####"}, {" ###### o######  ######"}, {" ##  ##############  ##"}, {" ##  ##          ##  ##"}, {"       ####  ####"}}}
        set xmax to 15
        set ymax to 15
        set frame to {}
        repeat
        	set n to random number from 1 to 3
        	set x to random number from 1 to xmax
        	set y to random number from 1 to ymax
        	repeat with i from 1 to length of item n of pattern
        		set frame to frame & {""}
        		repeat y times
        			set item i of frame to item i of frame & "	"
        		end repeat
        		set item i of frame to item i of frame & item i of item n of pattern
        	end repeat	
        	tell application "System Events"
        		keystroke "a" using command down
        		keystroke return
        		repeat x times
        			keystroke return
        		end repeat
        		repeat with i from 1 to length of frame
        			keystroke item i of frame
        			keystroke return
        		end repeat
        	end tell
        	set frame to {}
        	delay 3
        end repeat
        

        C'est certes, un peu dégueulasse.

        -
        Edité par Desare 1 mai 2013 à 15:11:36

        • Partager sur Facebook
        • Partager sur Twitter
        Graphiste/Développeur/Bidouilleur
          1 mai 2013 à 15:44:29

          Un bon code bien compact (326 octets) en pur JS, sans canvas. Une console (textarea) affiche la ptite bête. http://jsfiddle.net/LP62M/5/embedded/result/ Enjoy :)

          -
          Edité par GauBen 16 mai 2013 à 19:36:55

          • Partager sur Facebook
          • Partager sur Twitter
            1 mai 2013 à 15:54:03

            Tiens en voyant l'avatar de geexs ca me fait penser : Personne à essayé de faire un script minecraft ?
            • Partager sur Facebook
            • Partager sur Twitter

            Retrouvez moi sur mon blog et ma chaine Youtube !

            Anonyme
              1 mai 2013 à 15:55:10

              SPAAAAAAAAAAAAAAAAAAAAAAAAAACE!

              #include <stdlib.h>
              #include <time.h>
              #include <SDL/SDL.h>
              #define space (
              #define SPACE )
              #define SPace {
              #define spaCE }
              #define SPaCE ,
              #define SpAcE ;
              #define spAce =
              #define spAcE ==
              #define sPace 0
              #define spaCe 1
              
              char pattern[1*2*3][(10*10/2-1)/7] spAce SPace
              SPace sPace SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE sPace spaCE SPaCE
              SPace sPace SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE sPace spaCE SPaCE
              SPace sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace spaCE SPaCE
              SPace sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace spaCE SPaCE
              SPace spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe SPaCE spaCe spaCE SPaCE
              SPace spaCe SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE spaCe SPaCE sPace SPaCE spaCe spaCE spaCE
              SpAcE void draw space SDL_Surface * Space SPACE SPace SDL_FillRect space Space SPaCE NULL SPaCE
              SDL_MapRGB space Space->format SPaCE 2*2*2*2*2*2*2*2-1 SPaCE 2*2*2*2*2*2*2*2-1 SPaCE 2*2*2*2*2*
              2*2*2-1 SPACE SPACE SpAcE int x spAce rand space SPACE % space  10*10*10/2+10*2+2*3 SPACE SPaCE
              y spAce rand space SPACE % space  10*10*10/2+10*2*2*2 SPACE SPaCE  i SPaCE j SpAcE Uint32 color
              spAce SDL_MapRGB space Space ->format SPaCE rand space SPACE % 2*2*2*2*2*2*2*2 SPaCE rand space
              SPACE % 2*2*2*2*2*2*2*2 SPaCE rand space SPACE % 2*2*2*2*2*2*2*2 SPACE SpAcE SDL_Rect pos SpAcE
              pos.w spAce 10*10/2 SpAcE pos.h spAce 10*10/2 SpAcE for space i spAce sPace SpAcE i<1*2*3 SpAcE
              i ++ SPACE for  space j spAce sPace SpAcE j  <  (10*10/2-1)/7 SpAcE j ++  SPACE SPace  if space
              !pattern[i][j] SPACE continue SpAcE pos.x spAce x+j * 2*3*3*3 SPaCE pos.y spAce y + i * 2*3*3*3
              SpAcE SDL_FillRect space Space SPaCE &pos SPaCE color SPACE SpAcE spaCE pos.x spAce x + 10*10+2
              *2*2 SpAcE pos.y spAce y + 10*10+2*2*2 + space rand space SPACE % 2 SPACE * 2 * 3 * 3 * 3 SpAcE
              SDL_FillRect space Space SPaCE  & pos SPaCE SDL_MapRGB space Space  -> format SPaCE sPace SPaCE
              sPace SPaCE sPace SPACE SPACE SpAcE pos.x spAce x + 10*10*2+2*2*2*2 SpAcE pos.y spAce y + 10*10
              +2*2*2 + space rand space SPACE %  2 SPACE * 2*3*3*3 SpAcE SDL_FillRect space Space SPaCE & pos
              SPaCE SDL_MapRGB space Space  ->   format SPaCE sPace SPaCE sPace SPaCE sPace SPACE SPACE SpAcE
              SDL_Flip space  Space SPACE SpAcE spaCE int main space int argc SPaCE char **  argv SPACE SPace
              srand space time space NULL SPACE SPACE SpAcE  SDL_Init space SDL_INIT_VIDEO SPACE SpAcE atexit
              space SDL_Quit SPACE SpAcE SDL_Surface * Space spAce SDL_SetVideoMode space 3*3*10*10 SPaCE 3*3
              *10*10  SPaCE 2*2*2*2*2  SPaCE SDL_HWSURFACE SPACE  SpAcE SDL_Event event SpAcE int  prev spAce
              sPace SpAcE while space spaCe SPACE SPace SDL_PollEvent space &event SPACE SpAcE if space event
              .type spAcE SDL_QUIT SPACE break SpAcE if space SDL_GetTicks space SPACE - prev > 3*10*10*10 ||
              ! prev SPACE SPace draw space Space SPACE SpAcE prev spAce SDL_GetTicks space SPACE SpAcE spaCE
              spaCE  SPace spaCE SPace spaCE SPace  spaCE SPace spaCE SPace  spaCE return  sPace SpAcE  spaCE

              C'est du C (si si), avec la SDL.

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                1 mai 2013 à 16:00:14

                Oui, c'est ce que je me disais :p .
                • Partager sur Facebook
                • Partager sur Twitter
                  1 mai 2013 à 16:02:35

                  @Eskimon : j'y ai pensé, mais c'est très complexe pour le faire dans minecraft avec la redstone (et encore sans parler de couleurs)

                  ou alors via plugin bukkit, mais la c'est plutôt du java

                  naim42 tu rendre le code encore plus illisible, il reste des 1 et des formes de "space" (tu peut en avoir 32 en tout) :p

                  -
                  Edité par n!co69 1 mai 2013 à 16:05:30

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
                    1 mai 2013 à 16:16:46

                    Hey, mais le préprocesseur, c'est l'obfuscation du pauvre. Soyez inventifs, un peu ! :D

                    IOCCC, our likes and dislikes

                    Doing masses of #defines to obscure the source has become 'old'. We tend to 'see thru' masses of #defines due to our pre-processor tests that we apply. Simply abusing #defines or -Dfoo=bar won't go as far as a program that is more well rounded in confusion.

                    -
                    Edité par Lucas-84 1 mai 2013 à 16:19:22

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Staff désormais retraité.
                      1 mai 2013 à 16:24:14

                      J'approuve les propos de Lucas-84 .... (Même si j'ai moi même largement abuser de -D)

                      De plus 2 = space spaCe + spaCe SPACE
                      • Partager sur Facebook
                      • Partager sur Twitter

                      🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                      Anonyme
                        1 mai 2013 à 16:30:46

                        n!co69: oui mais je trouve ça pas mal de laisser des bouts de code lisible au milieu :D .

                        + J'adore ta version Rainmeter \o/ !

                        @che: j'avais pensé à 2*2*2/2-2 sinon :-° .

                        -
                        Edité par Anonyme 1 mai 2013 à 16:33:09

                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 mai 2013 à 16:47:43

                          Ou alors il faut le faire bien, de façon à ce que tout le programme ne soit plus constitué que de "space" :)

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            1 mai 2013 à 16:52:37

                            Bon, je le ferai à l'occasion.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 mai 2013 à 18:04:13

                              Allez, hop! Une petite 2eme version uniquement en HTML+CSS... Je sais que ca a déjà été fait, mais la, via des @keyframes, j'arrive à un resultat assez proche du script de base... sans, malheureusement, tout l'aspet random...

                              Ca se passe ici (Ma premiere participation avec un server sous NodeJS se trouve ici)

                              Notez aussi le fait que j'utilise aucune class, aucun ID, et que j'ai essayé de simplifier au maximum la partie HTML

                              Sandhose

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Interdiction de lire cette signature | OCr Notificateur | Retrouvez moi sur Zeste de Savoir !
                                1 mai 2013 à 20:29:25

                                @Eskimon, n!co69 : Si j'ai un peu de temps et un pc avec 'craft, j'essaierai avec un ptit peu de redstone, mais ne vous attendez pas au truc du siècle :)

                                (Et au passage, j'aurai le code le plus concis : 0 octet)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 mai 2013 à 20:57:17

                                  Version en Common Lisp

                                  Salut tout le monde !

                                  EDIT : nouvelle version du code ici (scrollez un peu). FIN EDIT

                                  Étant donné que je débute en Common Lisp, je vous propose un petit code pour cet atelier. Je voulais intialement concourir dans la catégorie « code le plus court », mais je n'arrive pas à battre les codes déjà posté. Je me suis donc rabattu sur la catégorie « code le plus tordu », où j'ai, je pense, de bonnes chances... Du moins, si on mesure en « bizarreries / ligne de code ». Bref, venons-en au fait !

                                  (ql:quickload :lispbuilder-sdl)
                                  
                                  (defun draw-tile (x y col)
                                    (sdl:draw-box-* (* 20 x) (* 20 y) 18 18 :color col))
                                   
                                  (defparameter *space-invader*
                                    '((░ ░ █ ░ █ ░ ░)
                                      (░ █ █ █ █ █ ░)                            
                                      (░ █ ◕ █ ◉ █ ░)
                                      (░ █ ░ █ ░ █ ░)
                                      (█ █ █ █ █ █ █)
                                      (█ ░ █ ░ █ ░ █)))
                                  
                                  (defun ░ (i j) ())
                                  (defun █ (i j) (draw-tile (+ *x* i) (+ *y* j) *col*))
                                  (defun ◉ (i j) (draw-tile (+ *x* i) (+ *y* j *eye1*) sdl:*black*))
                                  (defun ◕ (i j) (draw-tile (+ *x* i) (+ *y* j *eye2*) sdl:*black*))
                                  
                                  (rand-inv (defun rand-inv (f)
                                    (setf *x* (random 20))
                                    (setf *y* (random 20))
                                    (setf *eye1* (random 2))
                                    (setf *eye2* (random 2))
                                    (setf *col* (sdl:color :r (random 255) :g (random 255) :b (random 255)))))
                                   
                                  (defun draw-invader ()
                                    (loop for l in *space-invader*
                                          for j from 0 do
                                          (loop for e in l
                                                for i from 0 do (funcall e i j))))
                                  
                                  (sdl:with-init ()
                                    (sdl:window 600 600)
                                    (rand-inv nil)
                                    (sdl:with-events ()
                                      (:quit-event () T)
                                      (:idle () (sdl:clear-display sdl:*white*)
                                                (draw-invader)
                                                (sdl:update-display))))

                                  Ne vous arrêtez pas aux tonnes de parenthèses, même pour du Lisp, ce code est vraiment bizarre.

                                  La première ligne importe la SDL en utilisant un sympathique script nommé QuickLisp — si vous l'avez, il ira télécharger, installer et charger la SDL pour vous. Les deux lignes suivantes définissent une fonction « draw-tile », qui est un wrapper pour la fonction « draw-box » (qui dessine un carré à l'écran). Jusque là, rien d'exceptionnel.

                                  Ensuite, je définis une variable appelée « *space-invader* » (les étoiles sont une convention pour désigner les variables globales), qui contient une liste de symboles. Si vous ne connaissez ni Lisp, ni Erlang, vous pouvez penser les symboles comme des chaînes de caractères... Mais en vérité, il s'agit plutôt de noms de variables, ou de fonctions. Vous pouvez les penser un peu comme « true » et « false » dans votre langage favori : « true », est juste « true », rien de plus. Les symboles fonctionnent un peu pareil. En outre, les symboles (ou atomes, comme je devrais les appeler) contenus dans ma liste sont assez bizarres : ce sont en fait des caractères unicode prévus normalement pour dessiner dans la console.

                                  Je définis ensuite quatre fonctions, dont les noms sont précisément ces caractères unicode bizarres. Oui, on a le droit de donner un nom pareil à une fonction en Lisp. :p Chacune de ces fonctions prend deux arguments (i et j), qui désignent des coordonnées, et font référence à un certain nombre de variables globales, *x*, *y*, *col*, *eye1* et *eye2* qui ne sont pas encore déclarées. Ces variables contiendront, comme leur nom l'indique, respectivement la position, la couleur, et la position des yeux du space invader à afficher.

                                  Vient ensuite la fonction rand-inv, qui tire un invader au hasard, en assignant des valeurs aléatoires aux variables *x*, *y*, etc. La première fois que cette fonction est appelée, ces variables n'existent pas ; elles sont donc déclarées sur le coup (c'est une mauvaise pratique ; j'aurais normalement dû les déclarer en début de fichier avec (defvar *x* 0), etc.). En outre, cette fonction prend un paramètre, f, qui ne sert à rien, il n'est jamais utilisé nulle part. Toutefois, comme vous pouvez le voir en observant attentivement le code, la fonction « rand-inv » est appelée sur sa propre définition ! Le « defun » qui se charge de la déclarer est passé en paramètre à la fonction elle-même... Ainsi, on appelle une fonction qui est déclarée immédiatement après. Comme les arguments d'une fonction sont évalués avant l'appel, la déclaration de la fonction est prise en compte avant l'appel. Mais le code est surprenant au premier coup d'œil. Notez que cette astuce n'était absolument pas nécessaire pour le programme ; tout cela sert simplement à le rendre encore plus tordu. ;) 

                                  La fonction « draw-invader », pour sa part, parcourt la liste *space-invader* dont nous avons parlé plus tôt (avec les symboles), mais en considérant chaque symbole comme la fonction qu'il nomme. Ainsi, chaque fois que l'on rencontre le symbole ░ dans la liste, la fonction ░ est appelée. Les indices i et j donnent les « coordonnées » de l'élément de la liste que nous sommes en train de regarder ; le ░ en haut à gauche sera appelé avec i=0, j=0, et ainsi de suite. Chacune des fonctions ░, █, etc. se charge de dessiner un carré de couleur aux coordonnées qui lui sont passées en paramètre (auxquelles elles rajoutent *x* et *y*, les coordonnées globales de l'invader). Notez au passage l'utilisation de la curieuse instruction « loop », qui permet d'itérer sur plusieurs choses en même temps (ici, les éléments d'une liste et les nombres entiers). Ma liste étant une « liste à deux dimensions » (liste de listes, si vous préférez), j'utilise donc deux loops imbriquées.

                                  Enfin, le bout de code final s'occupe d'initialiser la SDL (la construction « with » assure qu'elle sera bien libérée, quoi qu'il arrive à la fin du programme), d'ouvrir une fenêtre, de tirer un nouvel invader au hasard, puis de l'afficher en boucle jusqu'à ce que la fenêtre soit fermée.

                                  Ouf ! Je n'ai pas encore fait de version animée (où l'invader change au bout de X secondes), mais ça ne saurait tarder. L'explication est déjà assez dense pour le code actuel, vous ne trouvez pas ? :p Une autre possibilité que j'avais envisagée, avant de l'abandonner, était de dessiner le space-invader dans la docstring d'une fonction, puis de faire en sorte que la fonction parcoure sa propre doc-string pour dessiner. Peut-être dans une future version du code, je n'ai pas fini de travailler dessus !

                                  Pour conclure, j'aimerais insister de nouveau sur un point : même pour du lisp, ce code est franchement bizarre. Ne vous arrêtez pas au fait qu'il s'agit d'un langage inhabituel ! ;) 

                                  -
                                  Edité par GuilOooo 5 mai 2013 à 22:16:32

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                                    1 mai 2013 à 21:03:50

                                    Ce langage doit être génial avec un ide qui ne colore pas les couples de parenthèses...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Retrouvez-moi aussi sur Zeste de SavoirTutoriel WAMP • Nouvelle F.A.Q. PHP
                                      1 mai 2013 à 21:30:06

                                      Je m'inscrit pour le fun vous avez réussi a m'occuper 2 heures aujourd'hui :p , j'ai utilisé le VB.NET :

                                      j'ai utilisé un timer , une picturebox et un userform ( Qui s'adapte a la taille de l'ecran )

                                      voici mon code : 

                                      Const TAILLE As Integer = 50
                                      Const ESPACE As Integer = 4
                                      
                                          Private Sub affichage_Tick(sender As Object, e As EventArgs) Handles affichage.Tick
                                      
                                              PCTBOX.Refresh()
                                              Dim Graphics As Graphics = PCTBOX.CreateGraphics(),
                                              Rnd = New Random(),
                                              couleur As Color = Color.FromArgb(255, Rnd.Next(0, 256), Rnd.Next(0, 256), Rnd.Next(0, 256)),
                                              monstre(,) = {{0, 0, 1, 0, 1, 0, 0},
                                                            {0, 1, 1, 1, 1, 1, 0},
                                                            {0, 1, 3, 1, 3, 1, 0},
                                                            {0, 1, 0, 1, 0, 1, 0},
                                                            {1, 1, 1, 1, 1, 1, 1},
                                                            {1, 0, 1, 0, 1, 0, 1}}
                                      
                                              Select Case Rnd.Next(1, 5)
                                                  Case 1
                                                      monstre(2, 2) = 3
                                                      monstre(2, 4) = 3
                                                      monstre(3, 2) = 0
                                                      monstre(3, 4) = 0
                                                  Case 2
                                                      monstre(3, 2) = 3
                                                      monstre(3, 4) = 3
                                                      monstre(2, 2) = 0
                                                      monstre(2, 4) = 0
                                                  Case 3
                                                      monstre(2, 2) = 3
                                                      monstre(2, 4) = 0
                                                      monstre(3, 2) = 0
                                                      monstre(3, 4) = 3
                                                  Case 4
                                                      monstre(2, 2) = 0
                                                      monstre(2, 4) = 3
                                                      monstre(3, 2) = 3
                                                      monstre(3, 4) = 0
                                              End Select
                                      
                                              Dim xx = Rnd.Next(0, PCTBOX.Size.Width - 1 + (-TAILLE - ESPACE) * (UBound(monstre, 2) + 1))
                                              Dim yy = Rnd.Next(0, PCTBOX.Size.Height - 1 + (-TAILLE - ESPACE) * (UBound(monstre, 1) + 1))
                                      
                                              For i = 0 To UBound(monstre, 1)
                                                  For j = 0 To UBound(monstre, 2)
                                                      If monstre(i, j) = 3 Then Graphics.FillRectangle(New SolidBrush(Color.Black), New Rectangle(xx + (ESPACE * j + TAILLE * j), yy + ESPACE + (ESPACE * i + TAILLE * i), TAILLE, TAILLE))
                                                      If monstre(i, j) = 1 Then Graphics.FillRectangle(New SolidBrush(couleur), New Rectangle((xx + ESPACE * j + TAILLE * j), yy + ESPACE + (ESPACE * i + TAILLE * i), TAILLE, TAILLE))
                                                  Next
                                              Next
                                      
                                          End Sub
                                       


                                      et un apercu et le fichier compilé pour ce qu'ils veulent voir : 

                                      Télécharger le fichier : https://mega.co.nz/#!KR9wUThJ

                                      -
                                      Edité par albandu51 2 mai 2013 à 19:56:48

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 mai 2013 à 21:37:58

                                        @albandu51 Sympa! :) en Virtual Basic pas mal tiens.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Hugo Duval,18 ans,Programmateur,Admirateur de Pommes de Terres :)
                                          1 mai 2013 à 22:15:48

                                          elyppire933 a écrit:

                                          Ce langage doit être génial avec un ide qui ne colore pas les couples de parenthèses..

                                          Je n'utilise pas d'IDE, juste Vim et une bonne vieille REPL. Il ne colore pas les parenthèses (enfin, elles sont toutes de la même couleur) ; par contre, chaque fois que j'écris un “(”, le “)” correspondant est automatiquement inséré. De même, je ne peux supprimer les parenthèses que par deux (autrement dit, si j'efface juste un “(”, il ne se passe rien, je dois effacer tout le contenu de la parenthèse). Ainsi, mon code est toujours valide en ce qui concerne les parenthèses. La version encore plus gore, avec animations et un screenshot est à venir.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                                            1 mai 2013 à 23:01:48

                                            Salut GuilOooo,

                                            Content de voir un code lisp, ça va me permettre de poser quelques question ;)

                                            Quel est le sens de defparameter, par rapport à un setf ou autre setq ? (j'ai testé vite fait l'effet de la macro avec macroexpand, mais je comprends rien)

                                            Pourquoi as tu séparé les fonctions pour chaque oeil, alors qu'elles semblent faire pareil toutes les deux ? Suffit de mettre le random dans la fonction direct.

                                            J'ai pas compris l'histoire du with. Sinon, la syntaxe avec ':', c'est une histoire de packages, c'est ça ?

                                            Sinon, perso, j'ai des sérieux problèmes avec loop, la page de l'hyperspec est carrément imbuvable, c'est sympa de voir que ça peut s'utiliser aussi simplement :)

                                            J'ai bien aimé l'histoire des symboles que tu appelles comme des fonction.

                                            -
                                            Edité par yoch 1 mai 2013 à 23:31:55

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 mai 2013 à 11:26:43

                                              Je vais essayer de bricoler quelque chose en Processing.js après le boulot :)

                                              Très sympa comme projet !

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 mai 2013 à 11:55:01


                                                Voici un invader fractal, réalisé à partir d'un logiciel perso de tracé d'IFS :
                                                 

                                                -
                                                Edité par yoch 2 mai 2013 à 12:01:12

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  2 mai 2013 à 12:01:05

                                                  @yoch : Le but c'est de présenter son code aussi
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  J'ai tous les badges d'OpenClassrooms.
                                                    2 mai 2013 à 12:28:27

                                                    Le code original est ici : http://www.siteduzero.com/forum/sujet/atelier-cod-art-76508?page=17#message-4343428

                                                    Ca m'a semblé inutile de montrer le code, puisque c'est du vieux code pas spécialement réalisé pour l'occasion. Si tu considère le programme comme un compilateur spécifique d'IFS, alors ma réalisation est le code ci-dessous (contenu du fichier .ifs réalisé graphiquement avec le logiciel en question) :

                                                    Base	{{0.001,0.005},{0.003,0.990},{0.993,0.992}}
                                                    	{{0.589,0.581},{0.588,0.454},{0.702,0.452}}
                                                    	{{0.305,0.559},{0.305,0.448},{0.418,0.452}}
                                                    	{{0.149,0.176},{0.148,0.333},{0.285,0.336}}
                                                    	{{0.292,0.011},{0.292,0.165},{0.425,0.170}}
                                                    	{{0.574,0.013},{0.574,0.170},{0.707,0.171}}
                                                    	{{0.289,0.176},{0.290,0.334},{0.427,0.334}}
                                                    	{{0.433,0.176},{0.432,0.334},{0.568,0.334}}
                                                    	{{0.571,0.174},{0.573,0.333},{0.710,0.333}}
                                                    	{{0.714,0.176},{0.715,0.333},{0.849,0.333}}
                                                    	{{0.149,0.339},{0.148,0.496},{0.286,0.498}}
                                                    	{{0.149,0.506},{0.149,0.662},{0.285,0.661}}
                                                    	{{0.433,0.341},{0.433,0.499},{0.568,0.499}}
                                                    	{{0.433,0.504},{0.432,0.661},{0.567,0.661}}
                                                    	{{0.714,0.341},{0.715,0.499},{0.851,0.499}}
                                                    	{{0.715,0.506},{0.714,0.661},{0.849,0.661}}
                                                    	{{0.008,0.669},{0.008,0.826},{0.144,0.826}}
                                                    	{{0.149,0.669},{0.148,0.826},{0.285,0.826}}
                                                    	{{0.290,0.669},{0.290,0.826},{0.425,0.826}}
                                                    	{{0.432,0.670},{0.432,0.827},{0.567,0.826}}
                                                    	{{0.571,0.667},{0.573,0.827},{0.708,0.826}}
                                                    	{{0.712,0.669},{0.714,0.826},{0.848,0.826}}
                                                    	{{0.855,0.670},{0.856,0.826},{0.989,0.827}}
                                                    	{{0.008,0.832},{0.008,0.989},{0.144,0.990}}
                                                    	{{0.290,0.834},{0.290,0.990},{0.426,0.990}}
                                                    	{{0.573,0.834},{0.573,0.992},{0.708,0.992}}
                                                    	{{0.855,0.834},{0.856,0.990},{0.990,0.992}}
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      2 mai 2013 à 13:08:23

                                                      Bonjour ! J'ai fais un code de 517 caractères (include/define compris). C'est pas du tout lisible mais bon ^^

                                                      #include<stdio.h>#include<stdlib.h>#include<unistd.h> 
                                                      #define r(x) rand()%x
                                                      int main(){for(;;){char m[80],*a="o ",*b=" o",c=r(19),h=r(2),d=r(2),e=r(66),f=r(2),g;system("clear");for(g=0;g<e;g++)m[g]=' ';m[e]=0;for(g=0;g<c;g++)puts("");printf("%s    ██  ██\n%s  █████████""█\n%s  ██%c%c██%c%c██\n%s  ""██%c%c██%c%c██\n%s██████████████\n%s██  ██  ██  ██\n",m,m,m,a[d],a[d],b[h],b[h],m,b[d],b[d],a[h],a[h],m,m);sleep(3);}}



                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      http://pixelcodeteam.fr/ (@PixelCodeTeam) - L'intelligence c'est comme la programmation, quand t'en as pas tu segfault.
                                                        2 mai 2013 à 14:15:59

                                                        En fait dans ce genre d'atelier, il devrait y avoir une catégorie "code le plus propre, le mieux conçu et le mieux commenté" :-)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          2 mai 2013 à 14:27:46

                                                          SpaceFox a écrit:

                                                          En fait dans ce genre d'atelier, il devrait y avoir une catégorie "code le plus propre, le mieux conçu et le mieux commenté" :-)


                                                          Comme mon code Arduino tu veux dire :D ?
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Retrouvez moi sur mon blog et ma chaine Youtube !

                                                          Anonyme
                                                            2 mai 2013 à 14:45:53

                                                            Salut a tous ! :)

                                                            Je reviens vous presentez quelque chose de totalement nouveau, pour ceux qui le savent j'ai creer un traducteur pseudo-code -> c il y a peu, et aujourd'hui j'ai decide de re-particper au concours mais en utilisant mon traducteur comme langage de programmation !

                                                            Voici le code source :

                                                            Debut
                                                            	Tableau invader[6] <- "    @@  @@    ", "  @@@@@@@@@@  ", 	"  @@()@@  @@  ", 	"  @@  @@()@@  ", "@@@@@@@@@@@@@@", "@@  @@  @@  @@"
                                                            	
                                                            	x <- 0
                                                            	y <- 0
                                                            	tmp <- 0
                                                            	i <- 0
                                                            	
                                                            	Init Aleatoire
                                                            	
                                                            	Pour , , 
                                                            	
                                                            		Effacer
                                                            		
                                                            		x = Aleatoire % 66
                                                            		y = Aleatoire % 66
                                                            		tmp = y
                                                            		
                                                            		Tant Que (x-- > 0)
                                                            			Afficher "\n"
                                                            		Fin Boucle
                                                            		
                                                            		Pour i = 0, i < 6, i++
                                                            		
                                                            			Tant Que (tmp-- > 0)
                                                            				Afficher " "
                                                            			Fin Boucle
                                                            			
                                                            			Afficher chaine invader[i]
                                                            			Afficher "\n"
                                                            			
                                                            			tmp = y
                                                            		Fin Boucle
                                                            		
                                                            		Pause 3
                                                            		
                                                            	Fin Boucle
                                                            Fin




                                                            Pour l'executer je vous renvoie vers le post du pseudo-c ;) (http://www.siteduzero.com/forum/sujet/programme-en-c-le-pseudo-c) vous devez telecharger le dossier, puis executez le fichier sortie.c (car le code est deja compile). 

                                                            Les nouvelles options du Pseudo-c sont desormais : l'aleatoire, une fonction effacer, une fonction attendre, les tableaux

                                                            Bien sur j'ai developpe ca assez rapidement donc le code n'est pas opti etc.

                                                            Bonne journee ! :) 

                                                            -
                                                            Edité par Anonyme 2 mai 2013 à 15:39:25

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Atelier] Fond animé Space Invaders

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown