Comunidad de diseño web y desarrollo en internet online

Hacer un juego en el que un jugador avance al tirar un dado.

Citar            
MensajeEscrito el 18 Oct 2013 04:26 am
Hola, estoy trabajando en un pequeño proyecto y me gustaría que me pudieran dar ideas para terminarlo. Debo hacer un juego donde mi personaje avance las casillas de un tablero dependiendo del numero que salga en un dado. Hasta ahorita solo he logrado que el dado se mueva aleatoriamente al presionar un botón. No conozco mucho de actionscript, pero estoy familiarizado con algunas cuestiones de programación por c y c++, así que les agradecería mucho que me explicaran con bolitas y palitos. Este es el archivo .fla de lo que llevo: https://www.dropbox.com/s/1dumhcy2rkiwuro/Dado.fla

De antemano les agradezco su ayuda :)

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Oct 2013 10:18 am
Alguien que da un fla! Eso es digno de aplauso! Lamentablemente no creo que pueda abrirlo porque tengo el 5 y el 8, pero ambos de Macromedia, o sea viejos. Sólo decirte que si sabés C y C++ entonces AS debería parecerte sencillo, al menos eso dicen, que C y C++ son los lenguajes más difíciles.
Pon el swf en el dropbox o cuenta el problema que tienes a ver si puedo ayudarte. Podría igual, capáz, tendría que buscar el cd con el portable CC3 o 4 -ni sé-, pero bue, no tengo ganas de eso xD

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Oct 2013 09:35 pm
El problema es que comprendo un poco el código, pero no se asociarlo con el entorno gráfico. Este es el swf: https://www.dropbox.com/s/jrp5uhaalmug9t3/Dado.swf Solo he logrado que el dado se mueva al azar con un random, pero necesito que el personaje se mueva por el tablero dependiendo del numero que caiga.

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Oct 2013 08:30 am
Nice!

Pero sigo sin entender por qué tienes problemas. Una vez obtenido el random, tienes a la vez una variable ¿no?

Bueno ¿el personaje ya es un movieclip con nombre? Quizá te falta eso.

Luego es simplemente hacer referencia a él y su posición, algo como:
Personaje._x = Personaje._x+10

No recuerdo si es ._x, estoy más acostumbrado a usar set property, pero el ._x cuando te acostumbras es mejor.

Básicamente es eso, si quieres que aparezca exactamente en el centro de los casilleros sin tener que hacer cálculos es un poco más complicado -tendrías que usar attachmovie, tampoco es TANTO más complicado-.

Y si el personaje es un movieclip dentro de otro tendrás que especificar eso cuando hagas referencia a él. Es como cuando haces referencia a una carpeta que está dentro de otra, sólo que aquí usas . en vez de \ o / -nunca me acuerdo xD -

Por cierto:
http://techdows.com/2012/10/create-public-folder-dropbox-new-account.html

De se modo puedes compartir directamente, sin que haya que descargar un archivo.

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Oct 2013 08:33 am
Donde puse 10 quise decir *variable*, el resultado de tu random. Habría que ver también cómo lo quieres mover, no sé, si es a cualquier parte entonces la variable se reduciría cada vez que lo mueves un casillero, con las teclas. Si lo mueves con el mouse habrá que medir cuánto lo moviste, posición inicial - final o algo así, luego comprobar si está dentro del rango permitido, luego transformarlo a número entero...

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Oct 2013 04:56 pm
Mi dado es un movieclip con 6 fotogramas, en el primero de ellos tengo stop para pararlo. En la escena principal tengo el dado, el tablero, un botón y el personaje como movieclip al que he llamado Ficha.

Lo que llevo del codigo es lo siguiente:
stop()
GO
diceLeft.gotoAndStop(random(6) + 1);
boton1.onRelease = function(){
Dado.gotoAndStop(random(6)+1)
Ficha._x = Ficha._x+71
}

Con esto logro que al apretar el botón el dado muestra aleatoriamente alguna de sus seis caras y el movieclip del personaje avance una casilla en posición horizontal hacía la derecha ¿Como puedo hacer que se mueva según lo que marca el dado? Se me ocurre que quizas con algún if que diga que cuando el dado caiga en cierto número avance tantas casillas, pero no se como hacerlo xD

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Oct 2013 08:42 pm
No capto bien el código -ese GO, por ejemplo- pero veo que lo haces sin crear una variable. Eso está muy bien, pero en este caso puede que te sirva más crearla. Prueba algo así:
Tirada = random(6)+1;
Dado.gotoAndStop(Tirada);
Ficha._x = (Ficha._x+71)*Tirada;

O sea antes de donde pusiste Dado pones una variable, Tirada o como quieras llamarle xD y luego lo demás queda igual en orden pero le cambias los números por la variable y en la última parte lo multiplicas por ella. Si Tirada es 1, se moverá 71*1, si es 2, 71*2, etc.

Si quieres hacerlo con ifs es algo como...
Si Tirada == 1
// se mueve 71
sino si Tirada == 2
// se mueve 142? El "sino si" es "else if"
sino si...
//
sino
// 71*6

Como no entiendo del todo tu código no sé si te serviría el else, pero si sólo son 6 posibilidades y no es ninguna de las 5, entonces se deduce, no es necesario un else if. Pero si es un código que se "updatea" constantemente -creo que no-, entonces tendrías que poner else if. En cualquier caso, está claro que usar una multipliación es mejor que ifs, a menos que los movimientos que quieras hacer no sean tan proporcionales.

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Oct 2013 05:13 am
Tu ayuda me ha servido de mucho, hasta el momento el codigo me ha quedado de la siguiente forma:
stop()
var Tirada:Number= (random(6) + 1);
Dado.gotoAndStop(Tirada);
boton1.onRelease = function(){
var Tirada:Number= (random(6) + 1);
Dado.gotoAndStop(Tirada)
Ficha._x =Ficha._x+71*Tirada
}

Así logro que la ficha se mueva horizontalmente según lo que caiga el dado, el problema ahora es que el tablero no es una linea horizontal si no una cuadricula y necesito que la ficha se mueva tambien hacía arriba y de derecha a izquierda. Se me ocurre convertir mi tablero en un movieclip y hacer dentro de el tantos fotogramas como posiciones haya e ir avanzando fotogramas según lo que caiga el dado ¿Alguna idea de como implementarlo? ¿O alguna idea mejor? https://dl.dropboxusercontent.com/u/215191712/Juego-prototipo1.swf

Y de nuevo muchas gracias por tú ayuda

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Oct 2013 05:43 pm
Prueba agregar esto:
var Direccion.Number = 1;
antes del function.

Y dentro del function sustituye esto:
Ficha._x =Ficha._x+71*Tirada
por esto:
var n.Number= 0;
// No recuerdo exacto cómo se escribe el do while -sus { }--, pero Flash lo tiene en la lista de acciones y los escribe si lo cliqueas. Si sabes for quizá te convenga más que do while.
do
____n = n+1;
____Ficha._x = Ficha._x + (71 * Direccion)
____Si Ficha._x > *máximo* or Ficha._x < *mínimo*
________Ficha.y = Ficha.y+¿71?; // quizá en vez de sumarle los 71 debas restarle, no sé los Flashes de ahora, pero el mío justamente es al revés a las gráficas que se dan en matemáticas...
________Si Direccion == 1
____________Ficha.x = *x inicial, en la derecha*
________else
____________Ficha.x = *x inicial, en la izquierda*
________end if
________Direccion = Direccion*-1;
____end if.
while n < Tirada
n = 0;

Te lo comento por las dudas, porque parece medio confuso.

Lo que hace es agregar movimiento de a uno, es decir, de a un casillero. Y lo hace basado en Direccion. Si es 1, el movimiento será a la derecha, sino Direccion es -1 y el movimiento será a la izquierda.
Si la ficha queda demasiado en la derecha o demasiado en la izquierda, la mueve una fila hacia arriba. A su vez, si la dirección era 1, o sea derecha, lo coloca en el casillero que está más en la derecha, sino, si la dirección era -1, izquierda, lo coloca en la izquierda. Posteriormente, cambia la dirección.
Todo eso lo hace 1 vez y lo repite mientras n sea menor que Tirada. n es un contador que al final se resetea. Todo eso debería estar dentro de tu function creo.

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Oct 2013 07:27 pm
¿Que significa "end if"? Cuando se lo agrego al código me marca error

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Oct 2013 11:27 pm
Lo que te escribí fue un pseudo código...

end if significa fin del if, del si, del condicional... En AS creo que se pone } pero no me acuerdo, es que yo hago clic en if y la compu escribe la estructura.

La expresión "end if" creo que se usaba en QBasic o Clipper, en C/C++ me imagino que hay algo parecido o_o

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Oct 2013 05:17 am
¿Se puede cerrar un if después de un else? :S

Por Nakú

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Oct 2013 09:20 pm
Técnicamente quizá lo que debes terminar es el else, pero me parece que son simplemente 2 formas de verlo. Si empiezas un circulo y haces una línea cruzada y luego "terminas el circulo" ¿realmente terminas el circulo o como lo cruzaste con una línea ya no es un circulo? Parece una cuestión absurda, llámale fin del if, fin del else, o como quieras.

El código en cuestión:
var n.Number= 0;

Código ActionScript :

do {
    n = n+1;
    Ficha._x = Ficha._x+(71*Direccion);
    if (Ficha._x>"máximo" or Ficha._x<"mínimo") {
        Ficha._y = Ficha._y+71;
        // quizá en vez de sumarle los 71 debas restarle
        if (Direccion == 1) {
            Ficha._x = "x inicial, en la derecha";
        } else {
            Ficha._x = "x inicial, en la izquierda";
        }
        Direccion = Direccion*-1;
    }
} while (n<Tirada);
n = 0;


Lo 1ero lo puse fuera porque me da error de sintaxis, pero si a ti no, entonces no hay drama. Pero errores el código -más allá de la sintáxis- puede tener. Cuenta.

Por Tachikomaia

73 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Oct 2013 04:28 am
Al final el código me quedo así:

[

Código ActionScript :

stop()
var Tirada:Number= (random(6) + 1);
diceLeft.gotoAndStop(Tirada);var Direccion:Number = 1;
boton1.onRelease = 
function(){
var Tirada:Number= (random(6) + 1);
diceLeft.gotoAndStop(Tirada)
var n:Number= 0;
do {
    n = n+1;
    Ficha._x = Ficha._x+(71*Direccion);
    if (Ficha._x>432.5 or Ficha._x<219.50) {
        Ficha._y = Ficha._y-71;
        // quizá en vez de sumarle los 71 debas restarle
        if (Direccion == 1) {
            Ficha._x =432.5;
        } else {
            Ficha._x =219.50;
        }
        Direccion = Direccion*-1;
    }
} while (n<Tirada);
   
n = 0;}


Ya logre que la ficha se mueva por el tablero según el valor del dado, solo haré unas correcciones para que se vea mejor la animación ¡Muchas gracias por tu ayuda!

Por Nakú

5 de clabLevel



 

chrome

 

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