Tetriced

5/5 (9 avis)

Vue 6 835 fois - Téléchargée 796 fois

Description

et un tetris de moi 'pas optimisé :( ' que j'avais codé pour mettre en page d'acceuil . <8ko :)
en AS2 . MX2004

Source / Exemple :


/*TETRICED
tombe.as
classe principale de mon tetris qui gere la descente des pièces et l'affichage
elle est liée au MC 'tombe' qui represente le tableau de jeu
Cedricici 2004

  • /
dynamic class tombe extends MovieClip { //declaration de variables : //taille et position var facteur:Number; var X:Number; var Y:Number; //tableaux var listeforme:Array; var map:Array; var fixedmap:Array; var fixedfig:Array; //formes var prefig:figure; var fig:figure; //score et niveau var level:Number; var lignote:Number; var score:Number; var timer:Number; //mouvements var lateral:Number; var vertical:Number; var rotation:Boolean; //evenements var enpause:Boolean; var finito:Boolean; var fin:MovieClip; //constructeur function tombe() { //initialisation this.map = new Array(360); this.fixedmap = new Array(360); this.fixedfig = new Array(16); this._xscale = this.facteur*10; this._yscale = this.facteur*10; this.paused.swapDepths(1000); this.creefig(); this.reinit(); } //fonctions //reinitialisation apres fin de partie function reinit() { this.X = 0; this.Y = 0; this.score = 0; this.level = 1; this.lignote = 0; this.descente = 0; this.refreshmap(); this.initmap(this.map); this.initmap(this.fixedmap); this.enpause = false; this.finito = false; this.timer = getTimer(); this.highscore = null; this.perdu._alpha = 00; this.fin=null; //construction des cotés et du bas du tableau de jeu for (var i = 0; i<360; i++) { if ((i%12) == 0 or ((i+1)%12) == 0 or i>=348) { this.fixedmap[i] = 0x111111; } } //forme initiale this.prefig = new figure(listeforme[Math.round(Math.random()*6)]); this.choix(); } //creation des formes function creefig() { listeforme = new Array(); listeforme[0] = [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0xFF2299]; listeforme[1] = [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0x00FF33]; listeforme[2] = [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0xD60303]; listeforme[3] = [0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x24F4FF]; listeforme[4] = [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0x0000FF]; listeforme[5] = [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0x8524B9]; listeforme[6] = [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0xF436BA]; listeforme[7] = [0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0xF436BA]; } //choix d'une nouvelle forme function choix() { this.fig = this.prefig; this.prefig = new figure(listeforme[Math.round(Math.random()*6)]); this.preaffichage(); } //initialisation d'un tableau de jeu (map ou fixedmap ) function initmap(init:Array) { for (var i = 0; i<360; i++) { init[i] = 0; } } //reactualisation du tableau de jeu (suppression des MCs) function refreshmap() { for (var i = 0; i<360; i++) { if (this.map[i] != 0) { this.map[i].removeMovieClip(); this.map[i] = 0; } } } //test de la prochaine position de la forme courante function testnewpos(rot:Boolean, GD:Number, HB:Number):Boolean { //rotation if (rot) { var newforme = this.fig.testrot(rot); } else { var newforme = this.fig.forme; } //test case par case var retour = true; for (var i = -2; i<2; i++) { for (var j = -2; j<2; j++) { if (newforme[(j+2)*4+(i+2)] == 1) { //si case occupé non libre => retourne faux if (map[(this.fig.Y+HB+j)*12+(this.fig.X+GD+i)] != 0) { retour = false; } } } } return retour; } // affectation des mcs sur le tableau de jeu function mappage() { this.refreshmap(); //recuperation des pièces figés for (var i = 0; i<360; i++) { this.map[i] = this.fixedmap[i]; } //rotation if (this.testnewpos(this.rotation, 0, 0)) { this.fig.rotation(this.rotation); } //deplacement lateral if (this.testnewpos(false, this.lateral, 0)) { this.fig.X += this.lateral; } //descente if (this.testnewpos(false, 0, this.vertical)) { this.fig.Y += this.vertical; for (var i = -2; i<2; i++) { for (var j = -2; j<2; j++) { if (this.fig.forme[(j+2)*4+(i+2)] != 0) { //affectation de la couleur de la case ... map[(this.fig.Y+j)*12+(this.fig.X+i)] = this.fig.couleur; } } } } else { //fin de partie if (this.fig.Y<3) { this.finito = true; } //figeage de piece this.fixefig(); } } //figeage d'une piece function fixefig() { for (var i = -2; i<2; i++) { for (var j = -2; j<2; j++) { if (this.fig.forme[(j+2)*4+(i+2)] == 1) { //affectation de la couleur grise a la case ... fixedmap[((fig.Y+j))*12+(fig.X+i)] = 0x555555; //ou =this.fig.couleur; pour garder la couleur de la piece } } } //reinitialise la forme en cours this.fig.forme = null; //et choisie une nouvelle this.choix(); //test la réusite de ce figeage this.controle(); } // affichage de la forme a venir function preaffichage() { for (var i = 0; i<4; i++) { for (var j = 0; j<4; j++) { //efface la précedente 'forme a venir' this.fixedfig[i+(j*12)].removeMovieClip(); if (this.prefig.forme[j*4+i] == 1) { var newname = "prebloc"+(i+(j*12)); this.fixedfig[i+(j*12)] = this.attachMovie("bloc", newname, 400+i+(j*12)); this.fixedfig[i+(j*12)]._x = (16*10)+i*10; this.fixedfig[i+(j*12)]._y = (8*10)+j*10; var coul = new Color(this.fixedfig[i+(j*12)].couleur); coul.setRGB(this.prefig.forme[16]); } } } } //affichage function affichage() { for (var i = 0; i<12; i++) { for (var j = 4; j<30; j++) { if (this.map[i+(j*12)] != 0) { //recuperation de la couleur var recup = this.map[i+(j*12)]; //création d'un nvx mc var newname = "bloc"+(i+(j*12)); this.map[i+(j*12)] = this.attachMovie("bloc", newname, 10+i+(j*12)); this.map[i+(j*12)]._x = this.X+i*10; this.map[i+(j*12)]._y = this.Y+j*10; var coul = new Color(this.map[i+(j*12)].couleur); coul.setRGB(recup); } } } } // test la créatin de ligne function controle() { var tetris = 0; for (var i = 28; i>4; i--) { var test = 1; for (var j = 1; j<11; j++) { test *= fixedmap[i*12+j]; } //si test est different de zero, c'est qu'il n'y a aucuns trous if (test != 0) { //supprime la ligne fixedmap.splice(i*12, 12); //et rajoute une ligne vierge en haut fixedmap.splice(0, 0, 0x111111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x111111); //on increment i pour compenser la perte d'une ligne i++; tetris++; //calcul du score this.score += this.level*5+tetris*2; if (tetris == 4) { //bonus pour tetris this.score += this.level*50; } } } //met a jour le nombre de ligne et le niveau this.lignote += tetris; this.level = Math.min((Math.round(this.lignote/10)+1), 14); } //'boucle sans fin' de jeu function Next() { //actualisation de l'affichage updateAfterEvent(); //ecouteur de touche enfoncé (et relaché) Key.addListener(this); //gestion de la pause this.paused._alpha = 00; if (this.enpause) { this.paused._alpha = 100; } else { //gestion de la fin de partie if (finito) { if(!fin){ this.fin = this.attachMovie("perdu", "perdu",1000); this.fin._alpha = 80; } //rejouer this.fin.onPress = function() { _parent.fin.removeMovieClip(); _parent.reinit(); }; } else { //calcul de la vitesse de descente // l'utilisation du timer permet d'avoir la meme vitesse quelque soit la machine var oldtimer = this.timer; this.timer = getTimer(); (Math.round(this.timer/(1200-Math.sqrt(this.level*100000)))>Math.round(oldtimer/(1200-Math.sqrt(this.level*100000)))) ? this.vertical=1 : this.vertical=0; //descente rapide (Key.isDown(40)) ? this.vertical=1 : this.vertical=this.vertical; //fonctions de mise a jour et d'affichage this.mappage(); this.affichage(); } } } //touche enfoncé O_o ... function onKeyDown() { (Key.isDown(80)) ? this.enpause=!this.enpause : this.enpause=this.enpause; this.rotation = (Key.getCode() == 38); this.lateral = (Key.getCode() == 39)-(Key.getCode() == 37); } //... et relachée °_O function onKeyUp() { this.rotation = false; this.lateral = 0; } //fin de la classe Tombe } // /*TETRICED figure.as Classe de formes de pièces de TETRIS création et rotation Cedricici 2004
  • /
class figure { //declaration de variables //c'est explicite non? var forme:Array; var X:Number; var Y:Number; var couleur:Number; //constructeur function figure(forme:Array) { this.forme=forme; this.couleur=forme[16]; //position initiale this.X=6; this.Y=2; } //rotation temporaire function testrot(sens:Boolean):Array { if (sens) { var temp = new Array(16); //rotation de la matrice de 1/5 de tour for (var i=0;i<4;i++){//x for (var j=0;j<4;j++){//y temp[(j*4)+i]=this.forme[(3-i)*4+j]; } } return temp; } else { return this.forme; } } //rotation complete function rotation(sens:Boolean) { this.forme=this.testrot(sens); } //fin de la classe figure }

Codes Sources

Ajouter un commentaire Commentaires
cs_habibdu70 Messages postés 25 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 26 novembre 2008
12 janv. 2005 à 11:23
Salut moi je suis un développeur C++.
Je n'est donc pas trop de mal à comprendre ton code mais j'aimerais savoir avec quel logiciel tu compile ton code source ?
merci
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 janv. 2005 à 12:15
?? tu es sur FlashKod.com donc ça se compile avec Flash (de Macromédia®)
cs_habibdu70 Messages postés 25 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 26 novembre 2008
12 janv. 2005 à 15:24
Ok, car je n'est jusque la utilisé que Visual C++6.0, .NET et dreamwever de Macromédia..
Comme j'ai envie de tester le flash je vais donc essayer d'avoir Flash de macromédia.
merci
BlackWizzard Messages postés 1258 Date d'inscription mercredi 21 mars 2001 Statut Membre Dernière intervention 21 juin 2009 2
12 janv. 2005 à 18:40
C'est la mode des tetris en ce moment...
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
23 janv. 2005 à 14:19
Whaou ! Il a la classe ce tétris !

Un défaut tout de même : les pièces tournent et se déplacent trop vite.

[9/10]

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.