Je suis déçu, personne ne propose d'ASM ? La flemme de le faire... Mais on est dans un atelier de prog, il faudrait honorer ce langage qui est la base de tous les autres n'est-ce pas
Avis aux amateurs
Si ça te fait plaisir, je peux prendre un des codes en C proposé et demander à gcc de me sortir le code ASM correspondant...
Le code n'est pas des plus jolis, surtout au niveau du HTML, mais j'ai essayé de faire court Pour tester, je l'ai hébergé sur jsbin : http://jsbin.com/iticiy
Bien vu, je n'avais plus travaillé avec canvas depuis un moment. Le problème est que arguments.callee est déprécié par le W3C (bien qu'encore supporté sur la plupart des navigateurs)...
oui j'ai hésité a te le dire aussi, mais bon, si tu veux faire un truc le plus ptit possible, faut s'affranchir de ça. Sinon, effectivement, c'est déprécié.
N'utilisez JAMAIS alert() pour debugger. Utilisez console.log()
Voici ma participation en C sous linux et avec des couleurs :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define clear system("clear") /* Efface l'ecran */
#define couleur(nb) printf("\033[%sm", nb) /* Definis comme couleur, le nombre donne en parametre */
#define COULEUR_MIN 30 /* 30 correspond au noir */
#define COULEUR_MAX 37 /* 37 correspond au blanc */
#define MAX 65
#define EVER ;;
void afficherForme(void);
int main(void)
{
int couleurAleatoire;
char parametre[3];
srand((unsigned int)time(NULL));
for(EVER)
{
clear; /* On nettoie l'ecran */
couleurAleatoire = (rand() % (COULEUR_MAX - COULEUR_MIN + 1)) + COULEUR_MIN;
sprintf(parametre, "%d", couleurAleatoire); /* parametre contient la couleur aleatoire */
couleur(parametre); /* On met la couleur du texte */
afficherForme(); /* On affiche le space invader */
couleur("0"); /* On reinitialise la couleur a 0 */
sleep(3); /* On marque une pause de 3 secondes*/
}
return 0;
}
void afficherForme(void)
{
char invader[6][15] = /* Forme du space invader */
{
" @@ @@ ",
" @@@@@@@@@@ ",
" @@()@@ @@ ",
" @@ @@()@@ ",
"@@@@@@@@@@@@@@",
"@@ @@ @@ @@"
};
int x, y;
int tmp;
int i;
x = rand() % (MAX + 1); /* On definit l'abscisse */
tmp = y = rand() % (MAX + 1); /* On definit l'ordonne */
while(x-- > 0) /* On va a la ligne x */
printf("\n");
for(i = 0; i < 6; i++, tmp = y) /* Pour chaque ligne du space invader */
{
while(tmp-- > 0) /* On va a la bonne colonne */
printf(" ");
printf("%s\n", invader[i]); /* On affiche la ligne i du space invader */
}
}
Haxe est un langage haut-niveau multiplate-forme assez proche de l'ActionScript 3. Avec NME, un projet écrit en Haxe peut être exporté sur un nombre impressionnant de plate-formes, sans changer une seule ligne du code source. J'ai compilé et testé le fond animé sur Flash (AS3), Windows (C++), Android (C++), et Neko. Il serait possible de compiler vers l'HTML5 mais cela ne fonctionne pas chez moi (et je n'ai pas eu le temps de me pencher sur ce problème, donc tant pis pour canvas). Il est également possible de compiler vers Linux (C++), Mac (C++), Blackberry, iOS, WebOS, mais je n'ai pas pu le faire moi-même, si quelqu'un veux essayer, il peut ! Pour programmer en Haxe, je conseille fortement FlashDevelop sur Windows (le dossier contient un fichier de projet FlashDevelop). Pour installer NME (et Haxe), c'est par ici.
Un exemple de classe en Haxe :
package display;
import nme.display.Shape;
/**
* Dessin rectangulaire.
* @author Guillaume CHAU
*/
class Square extends Shape
{
/**
* Couleur du cube.
*/
private var _color:Int;
/**
* Largeur du cube.
*/
private var _virtualWidth:Float;
/**
* Hauteur du cube.
*/
private var _virtualHeight:Float;
/**
* Arrondi des coins du cube.
*/
private var _roundRadius:Float;
/* ---------- PUBLIQUE ---------- */
public function new()
{
super();
}
public function remove():Void
{
if (parent != null)
{
parent.removeChild(this);
}
}
/**
* Modifie la taille du dessin du cube. Recommandé s'il faut modifier la largeur et la hauteur en même temps.
* @param width Largeur (pixels)
* @param height Hauteur (pixels)
*/
public function setSize(virtualWidth:Float, virtualHeight:Float):Void
{
_virtualWidth = virtualWidth;
_virtualHeight = virtualHeight;
// Mise à jour du dessin
update();
}
/* ---------- PRIVE ---------- */
/**
* Mise à jour du cube
*/
private function update():Void
{
// On efface le dessin
graphics.clear();
// Remplissage
graphics.beginFill(_color);
// Dessin du cube
graphics.drawRoundRect( -_virtualWidth * 0.5, -_virtualHeight * 0.5, _virtualWidth, _virtualHeight, _roundRadius, _roundRadius);
}
/* ---------- GETTERS ---------- */
private function get_virtualWidth():Float
{
return _virtualWidth;
}
private function set_virtualWidth(value:Float):Float
{
_virtualWidth = value;
// Mise à jour du dessin
update();
return _virtualWidth;
}
/**
* Largeur virtuelle, servant à dessiner le cube.
*/
public var virtualWidth(get_virtualWidth, set_virtualWidth):Float;
private function get_virtualHeight():Float
{
return _virtualHeight;
}
private function set_virtualHeight(value:Float):Float
{
_virtualHeight = value;
// Mise à jour du dessin
update();
return _virtualHeight;
}
/**
* Hauteur virtuelle, seervant à dessiner le cube.
*/
public var virtualHeight(get_virtualHeight, set_virtualHeight):Float;
private function get_color():Int
{
return _color;
}
private function set_color(value:Int):Int
{
return _color = value;
}
/**
* Couleur du cube.
*/
public var color(get_color, set_color):Int;
private function get_roundRadius():Float
{
return _roundRadius;
}
private function set_roundRadius(value:Float):Float
{
return _roundRadius = value;
}
/**
* Arrondi des angles.
*/
public var roundRadius(get_roundRadius, set_roundRadius):Float;
}
Le code source comprend 14 classes, sans compter la librairie d'animation externe Actuate. J'espère remporter le prix de l'inutilement compliqué !
Un fichier de configuration xml permet d'ajuster beaucoup de choses. De plus, je me suis amusé à coder plusieurs animations sympa. Avec quelques réglages dans le fichier xml (réglages que j'ai mis dans config-alt.xml), on peut obtenir ceci avec le même code source :
Les exécutables que j'ai déjà compilés sont dans le dossier bin (le dossier Windows fait 5 Mo ). Pour tester sur Android, il faut de préférence avoir un téléphone Android en mode développeur (avec débogage par USB activé) ou un émulateur et le Android SDK.
D'ailleurs, j'ai bien envie de faire un big-tuto sur Haxe et NME.
V2 : Corrections et ajustements. Amélioration du code des animations. Il est possible d'activer ou désactiver des animations dans le fichier de configuration xml. Il est également possible de déplacer les Invaders en Drag'n Drop !
tien j'en profite pour poster ma version en Ti-basic via l'écran normal .... ( je bosse sur la version graphique , ya encore des bugs ...)
:Effecr
:While 1
:entaléat(0,9)->X
:entaléat(1,3)->Y
:Output(Y,X+3,"O O
:Output(Y+1,X+2,"OOOOO
:Output(Y+2,X+2,"O O O
:Output(Y+3,X+2,"O O O
:Output(Y+4,X+1,"OOOOOOO
:Output(Y+5,X+1,"O O O O
:entaléat(0,1)->V
:Output(Y+V+2,X+3,"0 // en Ti-Basic , le zero est barré , ca fait un oeuil ..
:entaléat(0,1)->U
:Output(Y+U+2,X+5,"0
:For(Z,1,500):End
:Effecr
:End
:
le tout pour 192 octets, mais il n'utilise que 4 variable ( 15*4o) ce qui fais poids total de 282 octets !!
Hop ! Une mise à jour de ma contribution ! Un meilleur code et plus de bugs de position et autres. Il est aussi possible de déplacer les Invaders en cliquant dessus :
Ma contribution ne vise pas de catégorie particulière. J'ai fait le tour des messages et je me rend compte que presque tous les langages on été fait. Bon pour faire un peu original je suis passé sous Android. Le code est donc en Java et il est très basique.
@hobi1 : en Ti-Basic, si tu fais une version en écran graphique, utilise des simili-sprites (un tuto existe sur le SdZ pour ça), c'est plus optimisé que 36 "Pxl-On".
Pour la version Haxe, sympa, mais j'ai des doutes : un langage très haut niveau qui traduit du code en langage haut niveau qui sera finalement compilé en bas niveau, j'ai un peu peur pour l'optimisation, que ce soit limité en terme de possibilités, de fonctionnalités (libs), de performances et de contrôle sur ce qu'on programme.
Cependant, pour s'amuser un peu et faire un programme pas trop exigeant... pourquoi pas
× 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.
Retrouvez moi sur mon blog et ma chaine Youtube !
N'utilisez JAMAIS alert() pour debugger. Utilisez console.log()
N'utilisez JAMAIS alert() pour debugger. Utilisez console.log()
Je ne visite plus ce site, si ça vous intéresse (ce qui serait très curieux), lisez ma bio.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Je ne visite plus ce site, si ça vous intéresse (ce qui serait très curieux), lisez ma bio.
Retrouvez moi sur mon blog et ma chaine Youtube !