Passe une bonne journée Invité !
 
AccueilAccueil  PortailPortail  PublicationsPublications  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  ConnexionConnexion  

Partagez | 
 

 Concours 25 lignes

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Concours 25 lignes   Jeu 11 Aoû - 16:41

Vous avez peut-être entendu parler du "25 lines contest", c'était un concours de démos techniques en flash dont le code ne devait pas faire plus de 25 lignes. C'était un concours intéressant et instructif, certains ont réussi à faire des jeux de pacman en seulement 25 lignes.

Le concept est inspiré de la chanson punk avec la règle "pas plus de 25 mots".

En gros le but est d'apprendre à coder le plus simple possible.

Paradoxalement coder simple est loin d'être facile: on passe plus de temps à tester et effacer des lignes qu'à en conserver... c'est un travail de recherche.

En flash ce travail est fondamental pour deux raisons:

1 - le script est lent, il faut donc laisser le code natif de la machine flash faire un maximum de travail à votre place pour que votre jeu soit optimisé et rapide. C'est la politique qu'avait appliqué Nintendo lors qu'ils ont produit le jeu flash "mission in snowdriftland.

2 - les jeux flash sont très mal payés, les budgets serrés, les délais encore plus serrés... autrement dit il faut éviter de passer trop de temps sur vos scripts.

Un scripteur expérimenté sait pondre un pacman en deux heures, pour un débutant il faudra plutôt deux semaines. Bref apprendre à faire court est un passage obligé pour devenir un pro du jeu flash.

La grande erreur que font les débutants en jeux flash est de vouloir faire comme les grosses boîtes qui font des jeux en c+ avec des milliards de lignes de code... en général ça donne des projets interminables et beaucoup de temps gâché.

Je lance un concours permanent dans ce topic, faites mumuse avec 25 lignes... vous verrez au fur et à mesure l'interêt pédagogique de l'exercice.

;)

L'autre interêt de cet exercice est que vous allez créer des embryons de moteur à partir d'une base très simple... et plus le coeur d'un moteur est simple, plus c'est une base de travail efficace.

Enfin le dernier interêt de l'exercice est tout simplement de se faire plaisir en s'amusant avec un petit code simple, sans se stresser avec d'horribles projets interminables.

REGLE DU CONCOURS:

une seule règle: votre code doit être immédiatement compilable par les copains, que ça soit dans flash ou dans flex


Ca implique plusieurs choses:

1 - votre code est une simple petite procédure faite de variables et de fonctions, (comme dans les vieux jeux, pas de classes donc) qu'on peut copier soit dans un script de timeline, soit dans une classe d'entrée.

2 - pas de médias (sons ou image), pas d'objets draggés à la main sur la timeline, vous générez les images (et éventuellement les sons) avec le code. bref vous allez afficher des carrés (et éventuellement jouer des "bip") on s'intéresse à la mécanique interne du code des jeux, pas aux graphismes

3 - afin que tout le monde se base sur le même langage, tout le monde
code en as3 (parce que l'as1/2 c'est dépassé, on ne peut plus faire
grand chose avec)

4 - la taille de votre swf fait le format par défaut ( 550 * 400 ) la vitesse conseillée pour un jeu flash est de 50 images / seconde pour un jeu de type classique (vitesse des consoles sur les ecrans pal) , ou de 25 images secondes pour un rendu "cartoon" (vitesse des dessins animés) pour un jeu de type dessin animé interactif

5 - pour afficher le résultat hébergez-le ici : http://www.swfcabin.com et copiez-collez votre script sur le forum

voilà amusez-vous bien :bball:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Jeu 11 Aoû - 18:06

ca à l'air super comme concept, je suis preneur, et on ferait bien de cela un espèce de concours permanent permettant de critiquer les codes postés. Ca va bien m'aider a bosser mon niveau en as, j'ai toujours appris un peu à la volée en récupérant les fonctions qu'il me fallait dans la doc sans exemple et du coup parfois je fais ce qu'on appelle du "bidouillage".

Quand tu dis laisser un maximum de travail à la machine, j'aimerais savoir si tu parles aussi d'utiliser principalement des fonctions préfaites parce que par exemple j'ai lu dans un bouquin que la fonction hitTestObject() consommait beaucoup de ressources et qu'il serait donc mieu de faire les tests manuellement en comparant les coordonées x et y, mais ca prendrait plus de lignes alors...??

je supposes que c'est 25 lignes sans compter l'introduction de la fonction^^


Edit: raaa j'ai pas pu résister à tenter une première fois par contre j'ai un peu triché en mettant les if sur une seule ligne, c'est permis?

en 22 lignes, vous êtes la boule sur l'écran et vous devez appuyer sur la fléche du haut quand le rectangle passe il faut etre précis pour l'éviter, si vous arrivez à le passer il revient sur l'écran après en être sortit, si vous le touchez, il est directement renvoyé au début de l'écran, vous verrez la différence^^

alors, dites moi tout, ou sont les améliorations que je ne sais voir?
Code:

var spriteHero:Shape=new Shape();
spriteHero.graphics.beginFill(0x86B1FB);
spriteHero.graphics.drawCircle(100,375,25);
addChild(spriteHero);
var barriere:Shape=new Shape();
barriere.graphics.beginFill(0xFF0000);
barriere.graphics.drawRect(550,350,100,50);
addChild(barriere);
var saut:Number=0;
function debut(evt:Event){
    barriere.x-=10;
    if(barriere.x==-650){barriere.x=0;}
    spriteHero.y-=saut;
    if(saut!=0){saut-=2;}
    if(saut==-23){saut=0;}
    if(spriteHero.hitTestObject(barriere)){barriere.x=550}
}
function fairesaut(pEvt:KeyboardEvent){
    if(pEvt.keyCode==38 && saut==0){saut=21;}
}
stage.addEventListener(Event.ENTER_FRAME,debut);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fairesaut);


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Jeu 11 Aoû - 20:11

Très bien comme concept !!
y'avait plein de jeux basés sur ce principe sur le vieux atari ST
tu t'en es tiré en 23 lignes, tu aurais pu rajouter deux bidules de plus

pense à les mettre en ligne pour ceux qui ont la flemme de compiler

http://www.swfcabin.com/open/1313082779


A propos de ta question sur le hitTest, en fait on s'en sert quasiment pas dans les jeux, c'est trop insuffisant ou imprécis pour la plupart des besoins.

Que tu utilises à la place 4 comparaisons avec des && ou bien un rectangle.intersects(rectangle) , ça ne change rien ça prend toujours une ligne


A propos des IF, tu peux les mettre sur la même ligne que l'instruction si il n'ya qu'une seule instruction. s'il y'en a +ieurs c'est 4 lignes minimum.

en fait la règle du comptage de lignes c'est interdiction de mettre deux instructions sur la même ligne, qu'elles soient séparées par des point virgule (ou planquées dans des conditions qui servent à rien, ce qui est de la triche)

par contre tes déclarations de variables tu peux tout foutre sur la même ligne
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Jeu 11 Aoû - 20:21

Voilà le mien... j'ai passé mon heure de pause apéro à le faire

http://www.swfcabin.com/open/1313082403

Le code (25 lignes pile):

Code:
var s:uint=8, palet:Rectangle = new Rectangle(0,340,128,16) , ball:Object = { rect:new Rectangle(0,0,32,32) , speed:new Point(s,s) } , screen:BitmapData = new BitmapData(550,400,false,0) , refresher:BitmapData = new BitmapData(550,400,true,0x33000000) , ballTile:BitmapData = new BitmapData(32,32,true,0x000000) , mySound:Sound = new Sound();
for ( var r:uint = 0 ; r < 32 ; r++ ) for ( var c:uint = 0 ; c < 32 ; c++ ) ballTile.setPixel32(c,r,0x00ff00ff | ( uint(new Point(c-16,r-16).length < 16)* ( (1-(new Point(c-16,r-16).length/16)*0xff)<<24 )  ));
addChild( new Bitmap( screen , "always" , false ) ); // affichage de l'ecran de pixels
function bounce ( newSpeedX:int , newSpeedY:int , newLeft:uint , newTop:uint ):void {
    ball.speed = new Point(newSpeedX,newSpeedY);
    ball.rect.offset(newLeft-ball.rect.x,newTop-ball.rect.y);
    mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator);
    mySound.play(0);
}
function sineWaveGenerator(event:SampleDataEvent):void {
    for ( var c:int=0; c<4096; c++ ) event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/4))*0.25);
    mySound.removeEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator);
}
addEventListener("enterFrame",function( e:Event ):void { // la routine du jeu
    palet.x = mouseX-64; // mouvement palet
    ball.rect.offsetPoint( ball.speed ); // mouvement balle
    if ( ball.rect.x < 0 ) bounce(s,ball.speed.y,0,ball.rect.y); // rebond gauche
    if ( ball.rect.x > 550-ball.rect.width ) bounce(-s,ball.speed.y,550-ball.rect.width,ball.rect.y); // rebond droite
    if ( ball.rect.y < 0 ) bounce(ball.speed.x,s,ball.rect.x,0); // rebond en haut
    if ( ball.rect.intersects( palet ) ) bounce(ball.speed.x,-s,ball.rect.x,palet.y-ball.rect.height); // touche le palet
    if ( ball.rect.y > 400 ) ball.rect.y = 0; // tombe dans le trou et recommence le jeu   
    screen.copyPixels(refresher,screen.rect,new Point(0,0)); // rafraichit l'ecran
    screen.fillRect(palet,0x00ff00); // dessin du palet
    screen.copyPixels(ballTile,ballTile.rect,ball.rect.topLeft); // dessin de la balle
});


Je raconte un peu comment j'ai fait ça...

A la base j'ai démarré avec deux sprites dans lesquels j'ai tracé un rectangle et un cercle.

Et puis j'ai voulu tester la méthode "rendu en blit", avec un objet Bitmap et sa BitmapData qui fait office d'écran virtuel.

Il se trouve qu'en fait ça prend beaucoup moins de lignes d'utiliser cette approche plus classique, que de se taper des tracés de vecteur... et en plus ça permet de faire l'effet de flou en faisant un rafraichissement partiel avec l'image transparente.
Du coup comme il me restait quelques lignes en rab j'ai pu programmer un petit son.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Ven 12 Aoû - 10:05

joli, mr place tout de suite la barre haut^^

je remarque qu'il y a plein de méthodes pour raccourcir son code que je ne connaissais pas, de plus tu utilises des choses dont j'ai pas l'habitude, je vais regarder à ton code et faire mieux pour la prochaine fois^^

edit : par contre quand je le compile chez moi y a une erreur

1046: Type was not found or was not a compile-time constant: SampleDataEvent.
sur
function sineWaveGenerator(event:SampleDataEvent):void {

c'est qu'il manque un import non?


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Ven 12 Aoû - 12:55

ha merde... il faut flash cs4

sur le flex compileur la generation de son runtime ne marche pas

bon la prochaine fois jferai un truc sans son


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Ven 12 Aoû - 13:49

ce que tu as fais avec le addEventListener( "enterFrame", function (evt:Event){

on peut faire ca qu'avec l'événement ENTER_FRAME ?


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Tchii001
Admin
Admin
avatar

Féminin
Nombre de messages : 6821
Age : 29
Parrain : Helaarin Points Quêtes 4320

MessageSujet: Re: Concours 25 lignes   Ven 12 Aoû - 15:04

Bouh !!! ToT Pourquoi en AS3 ?!! -_-" J'ai lu vos codes et je me dis "Mais comment je suis censé connaitre toutes ses fonctions ? O_o" Faut que j'apprenne l'AS3 avant de pouvoir faire cet exercice x)


Enfin les vacances !




‗•¯◘┐○└◘┌•¸☼¸•┐◘└○┌◘¯•‗



‗•¯◘┐○└◘┌•¸  Soutenez-nous ! ¸•┐◘└○┌◘¯•‗



Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://travelinthegame.forumactif.fr/
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Ven 12 Aoû - 21:59

http://ressources.mediabox.fr/tutoriaux/flashplatform/programmation/generalites/passageas2as3
http://www.bases-as3.fr/plan-site

tatzaaaaam :)


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Sam 13 Aoû - 19:34

Citation :
ce que tu as fais avec le addEventListener( "enterFrame", function (evt:Event){

on peut faire ca qu'avec l'événement ENTER_FRAME ?

c'est la même chose en fait


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Sam 13 Aoû - 19:36

Citation :
Bouh !!! ToT Pourquoi en AS3 ?!! -_-" J'ai lu vos codes et je me dis
"Mais comment je suis censé connaitre toutes ses fonctions ? O_o" Faut
que j'apprenne l'AS3 avant de pouvoir faire cet exercice x)

aujourd'hui tu peux plus rien faire en as1/2... pour plein de raisons:

- le nouveau marché des jeux flash c'est les smartphone et il faut as3 pour ça

- l'as1/2 n'est plus mis à jour depuis longtemps, toutes les nouvelles fonctionallités de flash sont en as3


bref aujourd'hui on ne peut plus faire l'impasse sur l'as3


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Tchii001
Admin
Admin
avatar

Féminin
Nombre de messages : 6821
Age : 29
Parrain : Helaarin Points Quêtes 4320

MessageSujet: Re: Concours 25 lignes   Dim 14 Aoû - 22:36

Oué c'est vrai qu'il y a pas mal de nouveauté en AS3 qu'on ne peut pas faire en AS2 comme la 3D par exemple. Mais de là à dire qu'on ne peut plus rien faire avec l'AS2 c'est un peu exagéré lol Tu dois connaitre le jeu en ligne Dofus non ? Tu sais qu'au départ ca créé à partir de l'AS1 ? Bon ensuite au fur et à mesure que les versions de code ont évolués, ils ont aussi suivit. Mais tout ca pour dire que ce n'est pas impossible de créer de bons jeux avec AS1 ou 2 : )

Mais je suis d'accord avec toi, il vaut mieux connaitre l'AS3 si on veut faire des jeux plus rapides et performants^^ J'essayerai de m'y mettre à la rentrée, je compte sur toi pour m'aider ;D (Enfin si tu veux bien lol)


Enfin les vacances !




‗•¯◘┐○└◘┌•¸☼¸•┐◘└○┌◘¯•‗



‗•¯◘┐○└◘┌•¸  Soutenez-nous ! ¸•┐◘└○┌◘¯•‗



Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://travelinthegame.forumactif.fr/
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Lun 15 Aoû - 16:48

dofus a été codé à une époque où l'as3 n'existait pas donc forcément...


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Mar 16 Aoû - 18:27

il faut pas rester sur les ancêtres alors que le monde évolue, suit l'évolution^^ ankama games l'a fait :p


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Tchii001
Admin
Admin
avatar

Féminin
Nombre de messages : 6821
Age : 29
Parrain : Helaarin Points Quêtes 4320

MessageSujet: Re: Concours 25 lignes   Mar 23 Aoû - 13:55

Oué je veux bien lol Mais à mon rythme alors x) J'ai déjà du mal avec les codes sur AS2 alors sur le 3... o_O


Enfin les vacances !




‗•¯◘┐○└◘┌•¸☼¸•┐◘└○┌◘¯•‗



‗•¯◘┐○└◘┌•¸  Soutenez-nous ! ¸•┐◘└○┌◘¯•‗



Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://travelinthegame.forumactif.fr/
darkrat
GameFlasheur
GameFlasheur
avatar

Masculin
Nombre de messages : 197
Age : 25
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Mer 24 Aoû - 15:09

perso je trouve la structure de l'as3 plus logique^^

au fait marcellus ce que je voulais dire c'est que je voulais savoir si on pouvait utiliser cette structure pour d'autres événements comme KEY_DOWN par exemple


"sois le changement que tu souhaites voir dans ce monde" Gandhi
"Bazinga" sheldon cooper
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Jeu 25 Aoû - 2:03

c'est pas si difficile en fait... le tout est d'avoir les bons exemples sous les yeux


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
marcellus_wallace
Admin
Admin


Masculin
Nombre de messages : 914
Age : 36
Parrain : Qui veut l'être ? Points Quêtes 100

MessageSujet: Re: Concours 25 lignes   Mer 31 Aoû - 15:44

excuse moi darkrat j'avais zappé ta question

pour les events KEY_UP et KEY_DOWN tu récupères l'objet keyboardEvent en argument, et tu consultes les prop ev.keyCode et ev.charCode. ensuite avec ça tu remplis des tableaux de booléens

exemple:

Code:
on keyDown( e:Event ) { charCodeTable[ e.charCode ] = true; keyCodeTable[ e.keyCode ] = true; }
on keyUp( e:Event ) { charCodeTable[ e.charCode ] = false; keyCodeTable[ e.keyCode ] = false; }


papulilu pipululu
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Concours 25 lignes   

Revenir en haut Aller en bas
 
Concours 25 lignes
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» vous me ferez cent lignes
» problème d'ajout de plusieures lignes dans un ComboBox .
» Faire juxtaposer 2 lignes de texte
» Lignes des cadres transparentes quand CSS de base désactivé
» Une fiche de pub avec un tableau en 2 lignes

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
~~~ TraveL --- Forum jeux flash ~~~ :: Zone Loisirs :: Blabla Libre-
Sauter vers: