Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/09/2008, 00:15
decxx1
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Como trabajar con las variables locales de una funcion afuera de ella

Hola a todos!
Antes que nada quisiera que sepan que soy principiante en este tema...Estoy haciendo mi primer juego de Flash y es un juego de naipes españoles.El juego consta de cuatro jugadores (el usuario y tres IA), los cuatro empiezan el juego con tres cartas cada uno. Recientemente escribí el siguiente código ActionScript en la línea de tiempo principal (mi pregunta viene después del código):

stop();
//Cuando sueltes el "clic" del ratón arriba del botón repartir, que elija un número entre 1 y 12. Este será el número del naipe

repetir_btn.onRelease = function():Void {
for (var i:Number = 0; i<100; i++) {
var nElegirnúmero:Number = Math.floor(Math.random()*12)+1;

//Luego que elija otro número entre 1 y 4. Este será correspondido con la pinta.

var nElegirPinta:Number = Math.floor(Math.random()*4)+1;

//La siguiente variable será usada más tarde.

var nProbarIgualdad1:Number=(nElegirnúmero/nElegirPinta) +nElegirnúmero;

/*Si el primer número elegido no es ni 8 ni 9, que se detengan los bucles y continue. Escribí esto porque en mi juego no se usan esas cartas. Por esta razón utilicé el bucle "for", no me sirven esos números.
*/

if (nElegirnúmero !== 8 && nElegirnúmero !== 9) {
break;
}
}
/*Si el segundo número elegido es por ejemplo "1", que se declare una nueva variable "String" que a su vez contenga la ID de vinculación de un clip de película. Esta ID se armará con el primer número elegido y la palabra "oro" porque el segundo número es "1" .
*/

switch (nElegirPinta) {
case 1 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'de'+' '+'oro'+'_mc');
break;
case 2 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'de'+' '+'copa'+'_mc')
break;
case 3 :
var sPrimeraCarta:String = (nElegirnúmero+' '+'of'+' '+'basto'+'_mc');
break;
case 4 :
var sPrimeraCarta:String = (nElegirSnúmero+' '+'of'+' '+'espada'+'_mc');
break;
default :
trace("error 1");
}
//------------------------------------------------------------------------------------------
/* El código anterior es sólo para una de las doce cartas (recuerden que cada jugador tiene tres cartas), en consecuencia el código se repite doce veces con algunos cambios como nombres de variables, y la sentencia "if". Como ejemplo aquí está el segundo bucle "For".
*/
//------------------------------------------------------------------------------------------

for (var j:Number = 0; j<100; j++) {
var nElegirSnúmero:Number = Math.floor(Math.random()*12)+1;
var nElegirSPinta:Number = Math.floor(Math.random()*4)+1;
var nProbarIgualdad2:Number = (nElegirSnúmero/nElegirSPinta) +nElegirSnúmero;

/* En este caso empleé la variable "nProbarIgualdad1" que había escrito en las líneas anteriores. La coloqué aquí porque quiero que el segundo naipe sea distinto al primero. Si "nElegirnúmero" es igual a "nElegirSnúmero" no tendrá importancia mientras "nElegirPinta" sea distinto a "nElegirSPinta". Si esto no fuera así, tendría por ejemplo dos 4 de oro en el escenario de mi película Flash.
Por otro lado, "nElegirSnúmero" y "nElegirSPinta" pueden ser iguales entre sí, pero sí o sí tienen que ser distintas a "nElegirnúmero" y "nElegirPinta". Utilicé una operación matemática dentro de la variable nProbarIgualdad porque fue el único modo que encontre de lograr que dos números aleatorios se conviertan en uno solo, y pueda este último compararse con otro obtenido de igual modo. No se como comparar dos números con otros dos.
*/

if (nElegirSnúmero !== 8 && nElegirSnúmero !== 9 && nProbarIgualdad2 !== nProbarIgualdad1) {
break;
}
}
switch (nElegirSPinta) {
case 1 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'oro'+'_mc');
break;
case 2 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'copa'+'_mc');

break;
case 3 :
var sSegundaCarta:String = (nElegirSnúmero+' '+'de'+' '+'basto'+'_mc');
break;
case 4 :

var sSecondCard:String = (nElegirSnúmero+' '+'de'+' '+'espada'+'_mc');
break;
default :
trace("error 2");
}
//------------------------------------------------------------------------------------------
// La sentencia "if" dentro del último bucle "For" se vuelve muy confusa. Aquí está.
//------------------------------------------------------------------------------------------

if (nElegirMnúmber !== 8 && nElegirMnúmber !== 9 && nProbarIgualdad12 !== nProbarIgualdad11 && nProbarIgualdad12 !== nProbarIgualdad10 && nProbarIgualdad12 !== nProbarIgualdad9 && nProbarIgualdad12 !== nProbarIgualdad8 && nProbarIgualdad12 !== nProbarIgualdad7 && nProbarIgualdad12 !== nProbarIgualdad6 && nProbarIgualdad12 !== nProbarIgualdad5 && nProbarIgualdad12 !== nProbarIgualdad4 && nProbarIgualdad12 !== nProbarIgualdad3 && nProbarIgualdad12 !== nProbarIgualdad2 && nProbarIgualdad12 !== nProbarIgualdad1) {
break;
}
/*Por último, (aún dentro de la función) que se adjunten los clips de película dentro de nuevas variables llamadas mPrimerNaipe, mSegundoNaipe, etc.
*/

var mPrimerNaipe:MovieClip = this.attachMovie(sPrimeraCarta, 'm'+sPrimeraCarta, _root.getNextHighestDepth());
mPrimerNaipe._height = 88.7;
mPrimerNaipe._width = 60;
mPrimerNaipe._x = 290;
mPrimerNaipe._y = 400;
var mSegundoNaipe:MovieClip = this.attachMovie(sSegundaCarta, 'm'+ssSegundaCarta, _root.getNextHighestDepth());
mSegundoNaipe._height = 88.7;
mSegundoNaipe._width = 60;
mSegundoNaipe._x = 370;
mSegundoNaipe._y = 400;
var mTercerNaipe:MovieClip = this.attachMovie(sTerceraCarta, 'm'+sTerceraCarta, _root.getNextHighestDepth());
mTercerNaipe._height = 88.7;
mTercerNaipe._width = 60;
mTercerNaipe._x = 450;
mTercerNaipe._y = 400;
var mCuartoNaipe:MovieClip = this.attachMovie(sCuartaCarta, 'm'+sCuartaCarta, _root.getNextHighestDepth());
mCuartoNaipe._height = 88.7;
mCuartoNaipe._width = 60;
mCuartoNaipe._x = 600;
mCuartoNaipe._y = 410;
mCuartoNaipe._rotation = 270;

//etc...

};
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Quizá este código parezca para los programadores basura. Pero a pesar de eso funciona!!! Ahora viene el problema: Cuando quiero utilizar lo que contiene una variable que se encuentra dentro de la función no puedo hacerlo. Esto debe ser porque es una variable local y estoy fuera de ámbito. ¿Como puedo declarar entonces las últimas variables (como mCuartoNaipe) afuera de la función utilizando los números aleatorios que ésta me calculó?