Tetriced

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

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.