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
}
12 janv. 2005 à 11:23
Je n'est donc pas trop de mal à comprendre ton code mais j'aimerais savoir avec quel logiciel tu compile ton code source ?
merci
12 janv. 2005 à 12:15
12 janv. 2005 à 15:24
Comme j'ai envie de tester le flash je vais donc essayer d'avoir Flash de macromédia.
merci
12 janv. 2005 à 18:40
23 janv. 2005 à 14:19
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.