Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Atelier] Fond animé Space Invaders

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

    30 avril 2013 à 10:37:35

    :waw: Ascii art code.... Respect !
    • Partager sur Facebook
    • Partager sur Twitter
    Dans le Mouton, tout est bon!
      30 avril 2013 à 11:15:28

      Je vais tenter le coup avec le langage LUA et le moteur de jeu web Shiva 3D!

      Si Shiva 3D est autorisé...

      • Partager sur Facebook
      • Partager sur Twitter
        30 avril 2013 à 11:19:32

        Si Shiva 3D est autorisé...

        Evidemment ! Le but de cet atelier est de se faire plaisir et de partager nos codes. Il n'y a rien a gagner, chacun fait comme il le veut. Tu remarquera que certains ont déjà prit quelques libertés en changeant la forme des Space Invader. Ou même moi qui ne génère meme pas des images mais utilise des fenetre de programmes.

        Donc oui vas y, utilise ce qui te fais plaisir :)

        • Partager sur Facebook
        • Partager sur Twitter
          30 avril 2013 à 11:44:00

          D'ailleurs pour ceux qui utilisent des trucs un peu exotiques, une capture d'écran / gif animée / vidéo est bienvenu (afin d'éviter que l'on s'amuse à installer des nouveaux softs jute pour une animation :p )
          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            30 avril 2013 à 11:57:15

            SpaceFox a écrit:

            corto_maltese a écrit:

            Aucun fou n'a essayé en assembleur? :D

            On a déjà eu cette discussion pas plus tard que la page précédente...

            Et bien je suis désolé j'ai bien tout survolé, et je n'en vois aucune trace ...

            -
            Edité par corto_maltese 30 avril 2013 à 11:57:30

            • Partager sur Facebook
            • Partager sur Twitter
              30 avril 2013 à 12:05:33

              SpaceFox a écrit:

              corto_maltese a écrit:

              Et bien je suis désolé j'ai bien tout survolé, et je n'en vois aucune trace ...

              http://www.siteduzero.com/forum/sujet/atelier-fond-anime-space-invaders?page=4#message-84286334

              Merci, je n'avais pas vu le diminutif ;)

              • Partager sur Facebook
              • Partager sur Twitter
                30 avril 2013 à 12:55:51

                Je sur-kiffe la version de BlackFart :waw: On as le droit à une screen aussi ? Parce que j'ai un peu la flemme de tester... ^^

                En tout cas, depuis que j'ai mon serveur lancé, j'ai eu ~140 visiteurs uniques... Ca fait plaisir ! :p (Eh ouais, j'ai tracé toutes les IP, localisé, et je vais les vendre à des hackers... Mouahahahah :pirate:)

                • Partager sur Facebook
                • Partager sur Twitter
                Interdiction de lire cette signature | OCr Notificateur | Retrouvez moi sur Zeste de Savoir !
                  30 avril 2013 à 13:26:10

                  Sandhose a écrit:

                  En tout cas, depuis que j'ai mon serveur lancé, j'ai eu ~140 visiteurs uniques... Ca fait plaisir ! :p (Eh ouais, j'ai tracé toutes les IP, localisé, et je vais les vendre à des hackers... Mouahahahah :pirate:)


                  Pas mieux, j'en suis qu'à 113 sur la vidéo Arduino :D
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    30 avril 2013 à 13:43:55

                    Bonjour à tous! J'aime bien ce petit atelier, assez rigolo. Je me suis un petit moment tâté à trouver la plateforme que j'utiliserais ainsi que la méthode de programmation pour utiliser le moins de ressources possible et obtenir un fichier souple, éditable et léger. Alors, je suis parti sur une plateforme web simple : HTML 5 et CSS 3. Le système n'est pas très différent de celui de Szczork. J'ai essayé de minimiser un maximum le code.

                    Un gros souci de réflexion s'est posé. Sur la version « originale », le space invader se déplace image par image, et non pas par une animation linéaire. En CSS 3, c'est pas très simple d'obtenir ce résultat. J'ai trouvé une solution mais le nombre d'images par seconde est encore trop élevé pour qu'il paraisse saccadé à l’œil humain. Bref. Mon fichier pèse 2,27ko (je n'ai pas encore réussi à faire en dessous pour le moment). Ce système a été spécialement étudié pour Google Chrome (oui, le fichier est un peu plus lourd sinon... Quoi qu'il le serait peut-être moins pour Firefox compte-tenu des normes ?).

                    Voici le code source :

                    <!DOCTYPE html>
                    <html>
                    <head>
                    	<title>Space Invaders</title>
                    	
                    	<style type="text/css">
                    		* { padding : 0; margin : 0; }
                    		body { overflow : hidden; color : #C2C2C2; }
                    		
                    		#w {
                    			position 			: absolute;
                    			-webkit-animation 	: m 20s linear 0 infinite;
                    		}
                    		
                    		hr { clear : both; border : 0;}
                    		
                    		.b {
                    			height 	: 50px;
                    			width 	: 50px;
                    			display : inline-block;
                    		}
                    		
                    		.c  { -webkit-animation : co 60s linear 0 infinite alternate; }
                    		.e1 { -webkit-animation : a1 5s linear 0 infinite; }
                    		.e2 { -webkit-animation : a2 5s linear 0 infinite; }
                    		
                    		@-webkit-keyframes co {
                    			0%  { background : blue }
                    			25% { background : red }
                    			50% { background : green }
                    			75% { background : orange }
                    			100%{ background : blue }
                    		}
                    		
                    		@-webkit-keyframes m {
                    			0%  { left  : 0; top : 0; }
                    			25% { left  : 30%; }
                    			50% { left  : 70%; top : 50%; }
                    			75% { left  : 60%; top : 10%; }
                    			100%{ left  : 0; top : 0; }
                    		}
                    		
                    		@-webkit-keyframes a1 {
                    			0%   { background : white }
                    			49%  { background : white }
                    			50%  { background : black }
                    			100% { background : black }
                    		}
                    		
                    		@-webkit-keyframes a2 {
                    			0%   { background : black }
                    			49%  { background : black }
                    			50%  { background : white }
                    			100% { background : white }
                    		}
                    	</style>
                    </head>
                    <body>
                    
                    <div id="w">
                    	<div class="b"></div>
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b e1"></div>
                    	<div class="b c"></div>
                    	<div class="b e2"></div>
                    	<div class="b c"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b e2"></div>
                    	<div class="b c"></div>
                    	<div class="b e1"></div>
                    	<div class="b c"></div>
                    	
                    	<hr />
                    	
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	<div class="b c"></div>
                    	
                    	<hr />
                    	
                    	<div class="b c"></div>
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	<div class="b"></div>
                    	<div class="b c"></div>
                    	
                    	<hr />
                    	
                    	<p>Developed for Chrome</p>
                    	
                    </div>
                    
                    </body>
                    </html>
                    

                    Vous pouvez tester!

                    J'ai retouché le code pour intégrer du jQuery. Pour 2,88ko, voici le code ainsi que le résultat.

                    <!DOCTYPE html>
                    <html>
                    <head>
                    	<title>Space Invaders</title>
                    	
                    	<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
                    	<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
                    	<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
                    	
                    	<script type="text/javascript">
                    		$(document).ready(function(){
                    			$("#w1 .b").css({  
                    				"border-radius" : "10px", 
                    				"display": "inline-block", 
                    			});
                    			$("#w1 .b").height((window.innerHeight / 6) - 5).width(window.innerHeight / 6 - 5);
                    		
                    			setInterval(function(){
                    				var nb = Math.floor(Math.random() * 5000);
                    				
                    				$(".eye_1").animate({ backgroundColor: "#FFF" }, "slow").delay(nb * 2).animate({ backgroundColor: "#000" }, "slow");
                    				$(".eye_2").animate({ backgroundColor: "#FFF" }, "slow").delay(nb * 4).animate({ backgroundColor: "#000" }, "slow");
                    				$(".eye_3").animate({ backgroundColor: "#FFF" }, "slow").delay(nb * 1).animate({ backgroundColor: "#000" }, "slow");
                    				$(".eye_4").animate({ backgroundColor: "#FFF" }, "slow").delay(nb * 3).animate({ backgroundColor: "#000" }, "slow");
                    			}, 5000);
                    			
                    			setInterval(function(){
                    				var i = Math.floor(Math.random() * 28);
                    
                    				var blue = Math.floor(Math.random() * 256); 
                    				var red = Math.floor(Math.random() * 256); 
                    				var green = Math.floor(Math.random() * 256); 
                    				
                    				$("#w1 ._" + i)
                    					.animate({ backgroundColor: "rgb(" + red + ", " + green + ", " + blue + ")" }, "slow")
                    					.delay(500)
                    					.animate({ backgroundColor: "rgb(" + blue + ", " + red + ", " + green + ")" }, "slow");				
                    			}, 100);
                    			
                    		});
                    	</script>
                    
                    	<style type="text/css">
                    		* { padding : 0; margin : 0; }
                    		body { overflow : hidden; color : #C2C2C2; }
                    
                    		hr { clear : both; border : 0;}
                    	</style>
                    </head>
                    <body>
                    
                    <div id="w1">
                    	<div class="b"></div>
                    	<div class="b"></div>
                    	<div class="b c _1"></div>
                    	<div class="b"></div>
                    	<div class="b c _2"></div>
                    	<div class="b"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c _3"></div>
                    	<div class="b c _4"></div>
                    	<div class="b c _5"></div>
                    	<div class="b c _6"></div>
                    	<div class="b c _7"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c _8"></div>
                    	<div class="b eye_1"  ></div>
                    	<div class="b c _9"></div>
                    	<div class="b eye_2"></div>
                    	<div class="b c _10"></div>
                    	
                    	<hr />
                    	
                    	<div class="b"></div>
                    	<div class="b c _11"></div>
                    	<div class="b eye_3"></div>
                    	<div class="b c _12"></div>
                    	<div class="b eye_4"></div>
                    	<div class="b c _13"></div>
                    	
                    	<hr />
                    	
                    	<div class="b c _14"></div>
                    	<div class="b c _15"></div>
                    	<div class="b c _16"></div>
                    	<div class="b c _17"></div>
                    	<div class="b c _18"></div>
                    	<div class="b c _19"></div>
                    	<div class="b c _20"></div>
                    	
                    	<hr />
                    	
                    	<div class="b c _21"></div>
                    	<div class="b"></div>
                    	<div class="b c _22"></div>
                    	<div class="b"></div>
                    	<div class="b c _23"></div>
                    	<div class="b"></div>
                    	<div class="b c _24"></div>
                    	
                    	<hr />
                    </div>
                    
                    </body>
                    </html>
                    

                    Space Invaders JS

                    -
                    Edité par cmizzi 30 avril 2013 à 18:18:23

                    • Partager sur Facebook
                    • Partager sur Twitter

                    #geek

                      30 avril 2013 à 13:50:19

                      Pur a écrit:

                      Vous pouvez tester!


                      T'as oublié le «s» sur le invaders, ça marche pas sinon.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 avril 2013 à 13:57:47

                        me voila de retour avec la version graph du Ti basic ... 

                        j'ai utilisé des lignes pour faire le dessin .. et j'ai même fais des yeux  qui clignote ( comme ça on voit la différence avec le reste du corps ).

                         Le programme fais  que 600 octets ( tout est dessiner  à la volée ... ) :p

                        @mogolecho  des simili sprite ... why not, mais tout déssiner a la volée avec des ligne et des pixels ...  ca reste plus "fun"  ;)

                        :Effdessin
                        :AxesNaff
                        :0-> Xmin:94->Xmax
                        :-62->Ymin:0-<Ymax
                        :AffGraph
                        :While 1
                        :entAléat(0,80->X
                        :entAléat(-62,-12->Y
                        :Ligne(X,Y+3,X,Y
                        :Ligne(X+1,Y+3,X+1,Y
                        :Ligne(X+2,Y+9,x+2,Y+2
                        :Ligne(X+3,Y+9,x+3,Y+2
                        :Ligne(X+4,Y,X+4,Y+3
                        :Ligne(X+4,Y+8,X+4,Y+11
                        :Ligne(X+5,Y+8,X+4,Y+11
                        :Ligne(X+5,Y,X+5,Y+3
                        :Ligne(X+6,Y+2,X+6,Y+9
                        :Ligne(X+7,Y+2,X+7,Y+9
                        :Ligne(X+8,Y,X+8,Y+3
                        :Ligne(X+8,Y+8,X+8,Y+11
                        :Ligne(X+9,Y,X+9,Y+3
                        :Ligne(X+9,Y+8,X+9,Y+11
                        :Ligne(X+10,Y+2,X+10,Y+9
                        :Ligne(X+11,Y+2,X+11,Y+9
                        :Ligne(X+12,Y,X+12,Y+3
                        :Ligne(X+13,Y,X+13,Y+3
                        :entAléat(0,1->G
                        :entAléat(0,1->D
                        :For(U,1,100
                        :If G
                        :Then
                        :Pt-Change(X+4,Y+7
                        :Pt-Change(X+5,Y+7
                        :Pt-Change(X+4,Y+6
                        :Pt-Change(X+5,Y+6
                        :Else
                        :Pt-Change(X+4,Y+5
                        :Pt-Change(X+5,Y+5
                        :Pt-Change(X+4,Y+4
                        :Pt-Change(X+5,Y+4
                        :End
                        :If D
                        :Then
                        :Pt-Change(X+8,Y+7
                        :Pt-Change(X+9,Y+7
                        :Pt-Change(X+8,Y+6
                        :Pt-Change(X+9,Y+6
                        :Else
                        :Pt-Change(X+8,Y+5
                        :Pt-Change(X+9,Y+5
                        :Pt-Change(X+8,Y+4
                        :Pt-Change(X+9,Y+4
                        :End
                        :End
                        :For(X,X,X+14
                        :Ligne(X,Y,X,Y+12,0
                        :End
                        :End


                        et comme c'est jamais parfait , je travais sur des tailles de monstre avec un carrée de 3*3 pixel , séparer avec des liges ( peut eter avec des sprites qui sais ...;))



                        • Partager sur Facebook
                        • Partager sur Twitter
                        l´experience est une longue suite de connerie
                          30 avril 2013 à 15:11:59

                          883 octets de Javascript, sans canvas

                          Voilà un code compliqué et plein de compromis pour que sa version minifié soit la plus petite possible.

                          .:: Aperçu ::.

                          Note: Il faut attendre 2sec pour que le script démare. Attention: Bug sur IE < 10.
                          c=0;
                          setInterval(function() {
                          
                              var d = document, w = window, 
                                  box=d.getElementById("b"), mr=Math.random, 
                                  mro=Math.round,
                                  id=function(n){return d.getElementById(n)}, 
                                  sty=function(k,v,id) { if(id) this.id=id; this.id.style[k]=v; return sty},
                                  rand=function(n) { return mr() * n}, 
                                  squPos=[
                                      [0,0,1,0,1,0,0],
                                      [0,1,1,1,1,1,0],
                                      [0,1,0,1,0,1,0],
                                      [0,1,0,1,0,1,0],
                                      [1,1,1,1,1,1,1],
                                      [1,0,1,0,1,0,1]
                                  ],
                                  Cwidth='width',
                                  Cheight='height',
                                  Cbackground='background',
                                  Ctop='top',
                                  Cleft='left',
                                  Cposition='position',
                                  Cblack='#000',
                                  Co=["108108", "108162", "216108", "216162"],
                                  color='#'+Math.floor(mr()*16777215).toString(16),
                                  squ,left,top,i,j;
                              
                              box.innterHTML='';
                              sty(Cwidth,'374px',box)(Cheight,'324px')(Cposition,'relative')
                              (Ctop,(54*5) * rand(mro(w.innerHeight / (54*5))-1))
                              (Cleft,(54*6) * rand(mro(w.innerWidth / (54*6))-1));
                              
                              for(i in squPos) {
                                  for(j in squPos[i]) {
                                      left = 54*j; top = 54*i;
                                      squ = d.createElement("div");
                                      squ.id=''+left+''+top+''+c;
                                      box.appendChild(squ);
                                      sty(Cwidth,'50px',squ)
                                      (Cheight,'50px')
                                      (Cposition,'absolute')           
                                      (Cleft,left)
                                      (Ctop,top)
                                      (Cbackground,squPos[i][j] ? color:'#fff');    
                                  }
                              }
                          
                              sty(Cbackground,Cblack,id((mro(rand(2)) ? Co[0]: Co[1])+c));
                              sty(Cbackground,Cblack,id((mro(rand(2)) ? Co[2]: Co[3])+c));
                              
                              c++;
                          }, 2000);
                          
                          c=0;setInterval(function(){var A=document,l=window,k=A.getElementById("b"),t=Math.random,x=Math.round,s=function(d){return A.getElementById(d)},n=function(i,d,j){if(j){this.id=j}this.id.style[i]=d;return n},B=function(d){return t()*d},z=[[0,0,1,0,1,0,0],[0,1,1,1,1,1,0],[0,1,0,1,0,1,0],[0,1,0,1,0,1,0],[1,1,1,1,1,1,1],[1,0,1,0,1,0,1]],e="width",g="height",m="background",p="top",o="left",f="position",a="#000",h=["108108","108162","216108","216162"],u="#"+Math.floor(t()*16777215).toString(16),r,b,q,y,v;k.innterHTML="";n(e,"374px",k)(g,"324px")(f,"relative")(p,(54*5)*B(x(l.innerHeight/(54*5))-1))(o,(54*6)*B(x(l.innerWidth/(54*6))-1));for(y in z){for(v in z[y]){b=54*v;q=54*y;r=A.createElement("div");r.id=""+b+""+q+""+c;k.appendChild(r);n(e,"50px",r)(g,"50px")(f,"absolute")(o,b)(p,q)(m,z[y][v]?u:"#fff")}}n(m,a,s((x(B(2))?h[0]:h[1])+c));n(m,a,s((x(B(2))?h[2]:h[3])+c));c++},2000);
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 avril 2013 à 15:27:16

                            Tiens, le premier coup, j'ai eu que des yeux et pas de corps. Ça a pas recommencé en relançant.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Small is Beautiful — E.F. Schumacher | Blog (fr)
                              30 avril 2013 à 15:52:07

                              Bonjour,

                              Voici une version en bash. Ayant été devancé quant à l'usage du bash, je l'ais fait avec dialog et gdialog.

                              N'ayant que peu de temps, il n'y a pas beaucoup de formes et couleurs mais il est assez facile d'y remédier !

                              Toujours a cause du temps, l'aléatoire (et de nombreuses autres choses) est fait à la bourrin.

                              Le script prend en paramètre le type de fenêtre que l'on veut ( dans le terminal avec dialog par défaut, dans une fenêtre avec gdialog).

                              Avec gdialog, je n'ais pas réussi à fixer la taille de la fenêtre, ce qui fait que le space invader est toujours collé à droite :D.

                              Voila le code :

                              #!/bin/bash
                              if [[ $1 == "gdialog" ]]
                              then
                              	DIALOG=${DIALOG=$1}
                              else
                              	DIALOG=${DIALOG=dialog}
                              fi
                              ######################initialisation du space invader#########################################
                              hauth="  xx   xx  "
                              hautb=" xxxxxxxxx "
                              
                              
                              milh1=" x...x...x "
                              milb1=" x 0 x 0 x "
                              
                              milh2=" x...x...x "
                              milb2=" x..0x0..x "
                              
                              milh3=" x.0.x.0.x "
                              milb3=" x...x...x "
                              
                              milh4=" x..0x0..x "
                              milb4=" x...x...x "
                              
                              milh=([0]=$milh1 [1]=$milh2 [2]=$milh3 [3]=$milh4)
                              milb=([0]=$milb1 [1]=$milb2 [2]=$milb3 [3]=$milb4)
                              
                              bash=" xxxxxxxxx "
                              basb="xxx xxx xxx"
                              
                              ################################initialisation des nombre aléatoires############################
                              x=$[$RANDOM%$[50-0]+1]
                              y=$[$RANDOM%$[14-0]+1]
                              i=$[$RANDOM%$[4-0]]
                              col=$[$RANDOM%$[4-0]]
                              
                              for j in `seq 1 $x`
                              do
                              	xl="${xl}"' '
                              done
                              
                              for k in `seq 1 $y`
                              do
                              	yl+="\n"
                              done
                              
                              if [[ $DIALOG == "gdialog" ]]
                              then
                              	case $col in
                              		0) col="\"red\"";;
                              		1) col="\"blue\"";;
                              		2) col="\"green\"";;
                              		3) col="\"black\"";;
                              	esac
                              	$DIALOG --title 'space bitton' --clear \
                              		    --width=100 --height=100 --yesno "<span color=$col><span font-family=\"mono\">${yl}${xl}${hauth}\n${xl}${hautb}\n${xl}${milh[$i]}\n${xl}${milb[$i]}\n${xl}${bash}\n${xl}${basb}</span></span>"
                              else
                              	col="\Z"$col
                              	$DIALOG --title 'space bitton' --clear \
                              		    --colors --yesno "${yl}${col}${xl}${hauth}\n${xl}${hautb}\n${xl}${milh[$i]}\n${xl}${milb[$i]}\n${xl}${bash}\n${xl}${basb}" 100 100
                              fi
                              case $? in
                              	0)	bash truc.sh $DIALOG;;
                              	1) ;;
                              	255) ;;
                              esac
                              clear

                              Je pense que mon code concours dans la partie "inutilement compliqué" :p.

                              -
                              Edité par nefas 30 avril 2013 à 15:53:58

                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 avril 2013 à 16:21:15

                                lethom a écrit:

                                Tiens, le premier coup, j'ai eu que des yeux et pas de corps. Ça a pas recommencé en relançant.

                                Il est possible que tu soit tombé sur la couleur aléatoire blanche.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 avril 2013 à 18:30:39

                                  Woo... Faut qu'on m'explique les 463 connexions depuis la même IP o_O J'ai des fans au Québec ? :p
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Interdiction de lire cette signature | OCr Notificateur | Retrouvez moi sur Zeste de Savoir !
                                    30 avril 2013 à 18:32:10

                                    Haha sympa je vais m'y mettre en faisant une création plus Fun avec l'âne du SIte du Zéro version Space Invaders.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Hugo Duval,18 ans,Programmateur,Admirateur de Pommes de Terres :)
                                      30 avril 2013 à 19:01:21

                                      Bon, comme hobi1 m'a battu pour le plus concis, je fai une nouvelle version :)

                                      :" 8 8 8"->Chaîne1
                                      :While 1
                                      :EffEcr
                                      :entAléat(1,9)->X
                                      :entAléat(1,3)->Y
                                      :Ouput(Y,X,"  8 8
                                      :Output(Y+1,X," 88888
                                      :Output(Y+2,X,Chaîne1
                                      :Output(Y+3,X,Chaîne1
                                      :Output(Y+4,X,8888888
                                      :Output(Y+5,X,"8 "+Chaîne1
                                      :Output(Y+2+entAléat(0,1),X+2,0
                                      :Output(Y+2+entAléat(0,1),X+4,0
                                      :For(I,0,200:End
                                      :End
                                      Totalisant au total... 169 octets !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 avril 2013 à 21:03:41

                                        Une version en C en peu plus longue que celle de @che mais qui gère la position aléatoire des yeux. La taille de la console ce passe en paramètre (./prog $LINES $COLUMNS)

                                        #define S(n);printf("%*s",r%C,"");P(n);
                                        P(n){printf("#######\n\0# # # #\n\0#0#\n\0 # \0 #0"+n);}main(int N, char**V){while(1){int L=atoi(V[1])-6,C=atoi(V[2])-7,r=rand()%(C*L),l=r%L;system("clear");while(l--){S(7)}S(25)P(12)S(25)P(2)S(23+(l=rand()%2*4))P(13+(L=rand()%2*5))S(27-l)P(18-L)S(0)S(9)sleep(1);}}

                                        305 octets

                                        Une autre version avec une taille fixe pour une fenêtre de 80*20

                                        #define S(n);printf("%*s",r%80,"");P(n);
                                        P(n){printf("#######\n\0# # # #\n\0#0#\n\0 # \0 #0"+n);}main(){while(1){int L=20,r=rand()%(80*L),l=r%L;system("clear");while(l--){S(7)}S(25)P(12)S(25)P(2)S(23+(l=rand()%2*4))P(13+(L=rand()%2*5))S(27-l)P(18-L)S(0)S(9)sleep(1);}}

                                        268 octets


                                        -
                                        Edité par jo_link_noir 1 mai 2013 à 1:21:38

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          30 avril 2013 à 21:40:55

                                          @v4vx  bravo a toi !! Mais .... :pirate:   la guerre est déclarée !! , je vais faire tout mon possible pour faire encore plus concis !!
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          l´experience est une longue suite de connerie
                                            30 avril 2013 à 22:22:15

                                            hobi1 a écrit:

                                            @v4vx  bravo a toi !! Mais .... :pirate:   la guerre est déclarée !! , je vais faire tout mon possible pour faire encore plus concis !!


                                            LOL :) Bonne chance, je n'ai pas réussi plus court...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              30 avril 2013 à 22:44:26

                                              @jo_link_noir: Pas mal du tout la gestion, des yeux :)
                                              Tu m'as donné une idée  ...

                                              #define H(x)printf("%*s",a,""),r(x);
                                              r(x){x?(putchar(" #"[x%2]),r(x/2)):puts("");}main(){int a=rand()%99,t=a*3%20;system("clear");while(t--)r(0);H(20)H(62)H(42|(a&1)*4|(a>=50)<<4)H(42|(!(a&1)<<2)|(a<50)*4)H(127)H(85)sleep(1),main();}

                                              Bon par-contre, là, ça devient de l'obfuscation totale ... Bref, <239o, ça gère les yeux mais très mal ...

                                              Sans les yeux :
                                              #define H(x)printf("%*s",a,""),r(x);
                                              r(x){x?(putchar(" #"[x%2]),r(x/2)):puts("");}main(){int a=rand()%99,t=a*3%20;system("clear");while(t--)r(0);H(20)H(62)H(42)H(42)H(127)H(85)sleep(1),main();}
                                              <195 octets  \o/
                                              Enfin plus petit que le premier code de v4vx en Ti-basic :D

                                              C'est mon dernier code Jean-Pierre ... (En C du moins).

                                              -
                                              Edité par @che 1 mai 2013 à 2:52:18

                                              • Partager sur Facebook
                                              • Partager sur Twitter

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

                                                30 avril 2013 à 23:15:07

                                                kristofjé a écrit:

                                                Au niveau technique

                                                J'ai rusé, chaque pixel est en fait une fenetre (tkinter) sans bordure qui va se déplacer aléatoirement. Donc si vous le lancé chez vous, ça va créer un certain nombre de fenetre qui vont se déplacer et changer de couleurs. J'utilise un tableau 2D, tout comme Thunderseb mais legerement plus "souple" (au vu de son code que j'ai lu rapidement). En particulier, à chaque mise à jour, les yeux se "déplacent" (eventuellement, ils peuvent rester fixe) dans l'une des cases libres autour. Il peut y en avoir autant qu'on veut.

                                                [...]

                                                Bon par contre le code est crade et vite fait, je pense que je le modifierai plus tard, c'est qu'une première ebauche. Mais si vous vous voulez vous en servir comme base, allez y :D

                                                J'ai bien aimé le concept de fenêtres qui servent de pixels. Au départ, j'ai juste voulu jouer avec ton code. Au final, je me suis amusé à le nettoyer à ma façon. Ensuite, j'ai eu une idée sympa, mais je ne m'en sortais pas avec tkinter, j'ai donc passé le code sous PySide.

                                                Voici l'idée (j'ai quitté le style de l'exo pour faire un peu plus original) : un fantôme récursif. En théorie, on peut aller à n'importe quelle profondeur, mais je me suis contenté de 2 (après, on voit plus rien de toute façon). Tous les petits fantômes sont indépendants.

                                                screen :

                                                Au niveau du code, j'ai juste fait un petit hack bien affreux parce que j'avais la flemme de trouver une solution. Je mets mes objets dans une liste que je fais semblant d'utiliser après le exit, pour éviter que le GC ne me supprime brutalement mes objets... [edit : ah oui, il y a aussi un tout petit hack ligne 39, pas trouvé comment faire plus propre sans ajouter de la lourdeur]

                                                Voici le code :

                                                from PySide.QtCore import *
                                                from PySide.QtGui import *
                                                
                                                import sys
                                                import random
                                                
                                                
                                                patt1 = (
                                                    (0,0,1,0,1,0,0),
                                                    (0,1,1,1,1,1,0),
                                                    (0,1,0,1,0,1,0),
                                                    (0,1,8,1,8,1,0),
                                                    (1,1,1,1,1,1,1),
                                                    (1,0,1,0,1,0,1) )
                                                    
                                                patt2 = (
                                                    (0,0,1,0,0,0,0,0,1,0,0),
                                                    (0,0,0,1,0,0,0,1,0,0,0),
                                                    (0,0,1,1,1,1,1,1,1,0,0),
                                                    (0,1,1,8,0,1,0,8,1,1,0),
                                                    (1,1,1,0,0,1,0,0,1,1,1),
                                                    (1,0,1,1,1,1,1,1,1,0,1),
                                                    (1,0,1,0,0,0,0,0,1,0,1),
                                                    (0,0,0,1,1,0,1,1,0,0,0) )
                                                
                                                class SpaceInvader(QObject):
                                                    def __init__(self, parent, patern, size, margin, inter):
                                                        self.width = len(patern[0])
                                                        self.height = len(patern)
                                                        self.interval = int(1000 * inter)
                                                
                                                        color = [random.randrange(0, 255) for i in range(3)]
                                                
                                                        self.fw = { (l, c) : FloatingPixel(parent, c, l, size, color, patern[l][c] is 8, margin)
                                                                        for c in range(self.width)
                                                                            for l in range(self.height)
                                                                                if patern[l][c] is not 0 }
                                                
                                                        if parent is None: parent = _desktop_geometry
                                                
                                                        self.DepPosX = parent.width() - (self.width * size + (self.height + 1) * margin)
                                                        self.DepPosY = parent.height() - (self.height * size + (self.height + 1) * margin)
                                                
                                                        self.update_app()
                                                
                                                     
                                                    def update_app(self):
                                                        depX = random.randint(0, self.DepPosX)
                                                        depY = random.randint(0, self.DepPosY)
                                                
                                                        for fwt in [fw for fw in self.fw.values() if fw.dep]:
                                                            ol, oc = fwt.yy, fwt.xx
                                                            lposPoss = [(ii,jj) for ii in range(max(0,ol-1), min(self.height, ol+2))
                                                                                    for jj in range(max(0,oc-1), min(self.width, oc+2))
                                                                                        if (ii, jj) not in self.fw or self.fw[ii,jj] is fwt]
                                                            nl, nc = random.choice(lposPoss)
                                                
                                                            del self.fw[ol,oc]
                                                            fwt.yy, fwt.xx = nl, nc
                                                            self.fw[nl,nc] = fwt
                                                
                                                        for w in self.fw.values():
                                                            w.update_conf(depX, depY)
                                                        
                                                        QTimer.singleShot(self.interval, self.update_app)
                                                
                                                    
                                                class FloatingPixel(QLabel):
                                                    def __init__(self, parent, xx, yy, sz, color, dep, margin):
                                                        super().__init__(parent)
                                                        self.xx, self.yy = xx, yy
                                                        self.dep, self.margin, self.sz = dep, margin, sz
                                                        self.setGeometry(self.xx, self.yy, sz, sz)
                                                        palette = QPalette()
                                                        if not dep:
                                                            palette.setColor(QPalette.Window, QColor(*color))
                                                        else:
                                                            palette.setColor(QPalette.Window, QColor(0,0,0))
                                                        self.setPalette(palette)
                                                        self.setAutoFillBackground(True)
                                                        self.setWindowFlags(Qt.FramelessWindowHint)
                                                        self.show()
                                                
                                                    def update_conf(self, depX, depY):
                                                        self.move(self.xx * (self.sz + self.margin) + depX, self.yy * (self.sz + self.margin) + depY)
                                                
                                                
                                                
                                                app = QApplication(sys.argv)
                                                _desktop = QApplication.desktop()
                                                _desktop_geometry = _desktop.availableGeometry()
                                                
                                                objs = []    # hack...
                                                
                                                si = SpaceInvader(None, patt2, 65, 5, 3.5)
                                                objs.append(si)    # hack...
                                                
                                                for w in si.fw.values():
                                                    if not w.dep and random.choice([1,2,3]) == 1:
                                                        ssi = SpaceInvader(w, patt1, 5, 1, random.uniform(0.3, 1.2))
                                                        objs.append(ssi)    # hack...
                                                
                                                app.exec_()
                                                sys.exit()
                                                
                                                print(objs)  # hack...


                                                EDIT :

                                                On peut bien entendu avoir plusieurs êtres principaux. Quelques screens supplémentaires :

                                                http://i.imgur.com/xiFeW0w.png

                                                http://i.imgur.com/nKyOdj7.png

                                                -
                                                Edité par yoch 30 avril 2013 à 23:48:51

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  1 mai 2013 à 0:21:25

                                                  @che a écrit:

                                                  @jo_link_noir: Pas mal du tout la gestion, des yeux :)
                                                  Tu m'as donné une idée  ...

                                                  #define H(x)printf("%*s",a,""),r(x);
                                                  r(x){x&&(putchar(" #"[x%2]),r(x/2))||puts("");}main(){int a=rand()%99,t=a*3%20;system("clear");while(t--)r(0);H(20)H(62)H(42|((a&1)<<2)|(a>=50)<<4)H(42|(!(a&1)<<2)|(a<50)<<4)H(127)H(85)sleep(1),main();}


                                                  Bon par-contre, là, ça devient de l'obfuscation totale ... Bref, 239o, ça gère les yeux mais très mal ...

                                                  Sans les yeux :

                                                  #define H(x)printf("%*s",a,""),r(x);
                                                  r(x){x&&(putchar(" #"[x%2]),r(x/2))||puts("");}main(){int a=rand()%99,t=a*3%20;system("clear");while(t--)r(0);H(20)H(62)H(42)H(42)H(127)H(85)sleep(1),main();}

                                                  195 octets  \o/
                                                  Enfin plus petit que le premier code de v4vx en Ti-basic :D

                                                  C'est mon dernier code Jean-Pierre ... (En C du moins).

                                                  -
                                                  Edité par @che il y a environ 1 heure


                                                  Pas mal ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    1 mai 2013 à 1:43:45

                                                    @@che: chapeau ^^ Tu peux encore gagner 2 octets avec une ternaire au lieu de &&/||. Et 2 autres en mettant une multiplication par 4 à la place du décalage binaire par 2.

                                                    Je t'enterai peut-être une nouvelle approche en C en fin de semaine. Pour le moment je suis sûr une version java-script un peu spéciale.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      1 mai 2013 à 1:45:35

                                                      J'ai tenté moi aussi de faire le programme en basique, mais sur casio (35+)

                                                      J'ai un peut suivi l'exemple de v4vx

                                                      While 1
                                                      15Rand#+1->A
                                                      2Rand#+1->B
                                                      Locate A+2,B,"O O
                                                      Locate A,B+1," OOOOO
                                                      Locate A,B+2," O O O
                                                      Locate A,B+3," O O O
                                                      Locate A,B+4,"OOOOOOO
                                                      Locate A,B+5,"O O O O
                                                      Locate A+2,B+2+Rand#,0
                                                      Locate A+4,B+2+Rand#,0
                                                      For 1->A To 200:Next
                                                      ClrText
                                                      WhileEnd

                                                      Pour un code total de 178 octes (+20 pour les variables)
                                                      En final les codes sont plus gros sur casio ....

                                                      Edit : J'ai trouvé comment faire plus court, mais avec a cause des limites de taille des nombres de la machine, j'ai du couper la ligne du haut de la bestiole

                                                      While 1
                                                      26299852280->C
                                                      15Rand#->A
                                                      3Rand#->B
                                                      For 1->G To 7
                                                      For 1->H To 5
                                                      if Frac(C/2)!=0
                                                      Then Locate A+G,B+H,8
                                                      Dsz C
                                                      IfEnd
                                                      C/2->C
                                                      Next:Next
                                                      Locate A+3,B+2+Rand#,0
                                                      Locate A+5,B+2+Rand#,0
                                                      For 1->A To 500:Next
                                                      ClrText
                                                      WhileEnd


                                                      Le programme fait 154 octes (+50 de variables)

                                                      En théorie, sans la limite de taille, le prog fait 155 octes (la valeur de C change)

                                                      -
                                                      Edité par n!co69 1 mai 2013 à 2:51:43

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

                                                        @jo_link_noir: Bien les ternaires ! En plus je peux retirer des parenthèses ! :D J'ajoute ça de suite ...

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

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

                                                          1 mai 2013 à 8:43:43

                                                          Bonjour,

                                                          Nouvelle version avec 3 niveaux de récursion (toutes les créatures sont animées évidement) :

                                                          Sinon, j'ai pensé à une variante : le petit fantôme se déplacerait dans les cases du grand. Il faut que je voie comment faire ça...

                                                          -
                                                          Edité par yoch 1 mai 2013 à 8:45:15

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            1 mai 2013 à 9:06:08

                                                            Puisque la guerre est déclarée en terme de poids, voici une nouvelle proposition en Axe (pour calculatrices 83+/84+ et SE) :) :

                                                            .I
                                                            [0000287C5454FEAA→Pic1
                                                            While 1
                                                            ClrDraw
                                                            Pt-On(rand^56,→P,Pic1
                                                            rand^2→R
                                                            For(256)
                                                            If T
                                                            0→T
                                                            Pxl-Change(P+2,+2+R
                                                            Pxl-Change(P+4,+R
                                                            DispGraph
                                                            Else
                                                            1→T
                                                            End
                                                            End
                                                            End

                                                            101 octets sur la calculatrice, le système d'encodage étant un peu particulier (une fonction est un caractère, pas un ensemble de lettres).

                                                            Les yeux sont affichés en simili nuances de gris par alternance très rapide de pixel allumé/éteint. Contrairement à mon dernier code en Axe où le système utilisé était plus joli et plus complexe.

                                                            Mes précédents codes : Java, Axe

                                                            -
                                                            Edité par mogolecho 1 mai 2013 à 9:13:57

                                                            • 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