Comunidad de diseño web y desarrollo en internet online

Necesito que me orienteis

Citar            
MensajeEscrito el 17 Jul 2006 10:12 am
Buenas, escribo este mensaje para que me orienteis para hacer un tetris en Flash. Ya empece a hacerlo hace un tiempo, pero me encontre con algunos inconvenientes que no supe resolver, no soy muy experto.

Mi idea fue crear el tablero del juego con un array bidimensional de movieclips cuadrados con false en la propiedad visible (con bucles en ActionScript). Luego use una funcion (no me acuerdo cual era) para ejecutar una funcion cada X tiempo que creaba una pieza aleatoriamente si no habia una ya en el tablero, sino bajaba una posicion la que habia usando la propiedad visible de los cuadrados del tablero. Para controlar las piezas puse un OnEnterFrame que detectaba las teclas que se presionaban, y movia las piezas en la direccion indicada. Solo guardaba en variables la pieza activa, y la posicion, el espacio que ocuaban las piezas ya depositadas se guardaban con la propiedad visible del tablero.

Supongo que os haceis una idea aproximada de como era. Os pongo el swf de lo que tenia hecho, esta inacabado y con errores: http://es.geocities.com/berni_bcn85/tetris_proves.swf .

El problema que me encontre basicamente fue para controlar el choque lateral de una pieza con otra cuando se movia hacia un lado, porque no sabia si poner el codigo en OnEnterFrame o en la funcion que se ejecutaba cada X tiempo, la verdad es que era un poco lioso xD. Otro problema era que si por ejemplo presionaba 4 veces muy rapido la flecha de la derecha, la pieza se movia solo 3 posiciones, entonces pense que en vez de aumentar la velocidad de los frames quiza habia alguna otra forma mejor.

A ver si me podeis ayudar dandome alguna idea para hacer el codigo mas sencillo.

Gracias!

Por _berni_

3 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 17 Jul 2006 12:07 pm
Juego del tetris:

Código :

createTextField("t", 1, 0, 300, 239, 24);
function c(a, b, g, h) {
   for (var y = 0; y<4; y++) {
      for (var x = 0; x<4; x++) {
         if (s[x+y*4] & 1 << g) {
            if (q == 300) {
               m[(a+x)+(b+y)*15] = -h;
               continue;
            }
            if (m[(a+x)+(b+y)*15]>0 or b+y>=20 or a+x<0 or a+x>=10) {
               return 1;
            }
            if (q == -2) {
               m[(a+x)+(b+y)*15] = h;
               if (b+y<0) {
                  delete onEnterFrame;
                  t.text = z+"\tPress a key";
               }
            }
         }
      }
   }
}
function p() {
   if (w) {
      q--;
      c(u, v, i, d);
      for (var y = 0; y<20; y++) {
         for (var x = 0; x<10; x++) {
            if (!m[x+y*15]) {
               break;
            }
         }
         if (x == 10) {
            x = 16;
            m.splice(y*15, 15);
            while (--x) {
               m.unshift(0);
            }
            z += 10;
         }
      }
   }
   i = j;
   j = random(28);
   d = random(16777216);
   v = -(u=3);
}
t.onKeyDown = function() {
   q = Key.getCode();
   if (!onEnterFrame) {
      w = z=0;
      s = [4325376, 178954464, 8653312, null, 89458032, 268435455, 89520863, 83886080, 2183168, 178937791, 1615119, null, null, 167772160];
      m = [];
      p();
      onEnterFrame = function () {
         t.text = z;
         if (q == 37) {
            u--;
            if (c(u, v, i, d)) {
               u++;
            }
         }
         if (q == 38) {
            q = i++;
            if (!(i%4)) {
               i -= 4;
            }
            if (c(u, v, i, d)) {
               i = q;
            }
         }
         if (q == 39) {
            u++;
            if (c(u, v, i, d)) {
               u--;
            }
         }
         q = 300;
         c(11, 3, j, 0xeeeeee);
         c(u, v, i, d);
         clear();
         beginFill(0xeeeeee);
         lineStyle(0);
         lineTo(151, 0);
         lineTo(151, 301);
         lineTo(0, 301);
         endFill();
         lineStyle(2);
         while (q--) {
            if (m[q]) {
               beginFill(m[q]);
               if (m[q]<0) {
                  beginFill(-m[q]);
                  delete m[q];
               }
               moveTo(1+(q%15)*15, 1+int(q/15)*15);
               lineTo(15+1+(q%15)*15, 1+int(q/15)*15);
               lineTo(15+1+(q%15)*15, 15+1+int(q/15)*15);
               lineTo(1+(q%15)*15, 15+1+int(q/15)*15);
               endFill();
            }
         }
         if (!(w++%(3-2*Key.isDown(40)))) {
            v++;
            if (c(u, v, i, d)) {
               v--;
               p();
            }
         }
      };
   }
};
t.onKeyDown();
Key.addListener(t);

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 17 Jul 2006 02:54 pm
Después de esta respuesta, llego a la conclusión de que todo el mundo debería tener un zguillez en casa. Ya en serio... a veces me das miedo :P.

Por _hermano_

755 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Jul 2006 12:58 pm
Gracias por el codigo. Lo he probado y esta muy bien, pero no lo entiendo todo, ademas no lleva comentarios ni nombres indicativos en las variables, lo que dificulta aun mas su comprension. Yo queria ideas para terminar mi tetris, para hacerlo yo mismo. De todas formas gracias.

Por _berni_

3 de clabLevel



Genero:Masculino  

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.