Buenas, pues por m?s vueltas que le doy, lo veo un tanto.. complicado
la idea es que yo tengo 40 variables. En realidad, son arrays
card[1,1]=""; card[2,1]="";
S?, 40 cartas. 20 de un tipo, 20 de otro, por eso lo del array. La idea, es que se tienen que poder reordenar las cartas al azar, osea, las 20 cartas con la segunda dimension del array 1 y las otras 20 con 2, entre ellas reordenarlas al azar. Y la verd?, ni idea de c?mo podr?a hacerlo... pens? algo de asignar una carta con choose al azar... pero choose llega al 17 solo, y ni con choose s? si se podria hacer, ya que habria que ir asignando cada carta a una variable, y checar que no haya sido asignada... :o
seguramente haya algo parecido que se haya hecho, o la respuesta sea sencilla y no tenga ni idea :'(
edit- La idea es que yo crearia otras 40 variables, y asignar los valores de las 40 variables principales que NO hay que modificar, a las 40 extra, de 20 en 20 separados, altearoriamente, ya que esas otras 40 variables se usarian... y tienen qe estar al azar
Pasalas a otras dos matrices, y ordenas al azar las otras matrices con un for, algo asi creo que era para ordenar
for (i=1;i<=20;i+=1)
{
a=random...(No me acuedo como se llama, el q va entre dos numeros enteros)
b=card2[1,i]
card2[1,i]=card2[1,a]
card2[1,a]=b
a=random...(idem)
b=card2[2,i]
card2[2,i]=card2[2,a]
card2[2,a]=b
}
Esa es mas o menos la idea, cuando llegue a mi casa te paso el algoritmo exacto, q lo tuve q hacer para barajar los mazos del TCG
Me cuesta entender tu problema pero por lo del choos podrias acerlo usar uno dentro de otro y listo...
proba asi:
for(i=1;i<=40;i+=1)
{
barajado[i] = choose(1,card[floor(random(20)+1)],card[2,floor(random(20)+1))];
for(j=1;j<=i-1;j+=1)
{
if(barajado[i] = barajado[j]) i-=1;
}
}
barajado[] seria las cartas re ordenadas
a ver... tienes el array a[20][2] no?, pues yo lo haria as?:
creo un segundo array b[20][2] y pasaria las variables tal cual como esta en el array original. luego haria esto:
for(i=0;i<2;i++)
{
for(j=0;j<20;j++)
{
do{
var x=floor(randoom(20));
}(while a
- !=0)
a- = b[j];
}
}
Se supone que deberia funcionar :-[
Mmm alguna cosilla no entendi..
explico, las variables serian 20... pero no son variables numericas, sino con valores as?:
card[1,1]="dragon_de_la_llama"; card[2,1]="lobo_sombr?o";
card[21,2]="rayo_reflejo"; card[22,2]="ventisca";
Y la cosa es pasar esos valores a:
Dcard[1,1]=""; Dcard[2,1]=""; Dcard[3,1]="";
Dcard[21,2]=""; Dcard[22,2]=""; Dcard[23,2]="";
osea, pasar los valores de 20 variables, desordenados, a otras 20 variables... pero claro , una vez pasado el valor, qu? le haces para que no vuelva a pasar el mismo a otra variable? un valor cogido no puede volverse a coger..
el script que yo puse es para cartas desde el card[1,1] hasta el card[1,20] y del card[2,1] hasta el card[2,20]
barajado[] vendria a ser el Dcard[]
---------
ahora que aclaras supongo que las cartas ban desde card[1,1] hasta card[20,1] y desde card[21,2] hasta card[40,2], ?es correcto?
si lo es usa este script:
for(i=1;i<=40;i+=1)
{
Dcard[i] = choose(card[floor(random(20)+1),1],card[floor(random(20)+21)),2];
for(j=1;j<=i-1;j+=1)
{
if(Dcard[i] = Dcard[j]) i-=1;
}
}
lo que hace este script es asignarle una carta al azar a Dcard. Luego chequea si a ninguna carta anterior se le asigno la misma carta, en casa de que si: retrosede un ciclo en el for para volver a buscar una nueva carta.
Yo no entend? muy bien lo que deseas, pero te dejo este c?digo q hize para uno de mis juegos:
Script llamado randomsoccer();
//********////////////////////////////////////////////******//
// RANDOM CON NUMEROS aleatorios SIN REPETICION //
//********//////////////////////////////////////////******//
zF=0;fF=0;rF=0;cF=0;gF=0;fF=argument0;
for(i=0;i<=60;i+=1){global.wF2_f_ree[i]="";}
///////////////////////////////////////////////////////////
while(zF<fF)
{ cF=0;
rF=floor(random(fF))+1;
if(gF==0){gF=1;global.wF2_f_ree[zF]=rF;}
for(jF=0;jF<zF;jF+=1){
if(rF==global.wF2_f_ree[jF])
{ cF+=1;}
}
if(cF==0){global.wF2_f_ree[zF]=rF;zF+=1;}
}
///////////////////////////////////////////////////////////
lo llamas as?: randomsoccer(40)
entonces en la variable global.wF2_f_ree[0...39] te guarda todos los numeros de forma aleatoria.
espero te sirva :D :D
Espero q te sirva
Soccer, en mi caso no son numeros, sino valores, los que hay que reordenar al azar, pero gracias igual :)
Alfonsos, probe el code, pero me da un error (que por cierto, modifiqu? un parentesis mal puesto, no creo que sera por eso, y ademas, por lo que vi, el code me agregaria las cartas a 40 cartas, perdiendo la separacion por la segunda dimension de los arrays para clasificarlas en dos mazos..)
___________________________________________
___________________________________________
ERROR in
action number 2
of Create Event
for object obj_contr:
Error in code at line 20:
Dcard[i,1] = obj_general.card[floor(random(20)+1),1];
^
at position 28: Unknown variable card or array index out of bounds
esque modifiqu? el code duplicandolo, cada uno para las 20 cartas separadas, que son dos mazos. Pero da error... debe ser array index out of bounds, porque card si que existe...
Cita de: DarkKRuleR en Junio 06, 2010, 04:48:57 PM
Soccer, en mi caso no son numeros, sino valores, los que hay que reordenar al azar, pero gracias igual :)
pero esos valores numericos puedes usarlos en el indice de dicho array con los valores q me mencionas, saludos XD XD XD
Pues s?, al parecer tu codigo, soccer, crea 20 variables, que puse:
carta[1]=tal, carta[2]=tal, carta[3]=tal..
me crea 20 variables cartas, cada una con un numero aleatorio del 1 al 20, perfecto, pero no se como podria aplicar esto... para traspasar el valor de 20 variables, a otras 20 variables, pero al azar.. >_<
mmm. espero que esto te sirva:
Supongamos que tenemos dos arrays cartas y cartasrandom. Con un barrido, pasar los valores del array cartas al array cartasrandom pero desordenados al azar.
Entonces seria algo como
for(i=0;i<20;i+=1)
{
cartasrandom[i]="none" //es para inicializar las variables del nuevo array
}
for(i=0;i<20;i+=1)
{
do
{
posicionrandom=floor(random(20)) //escoge una posici?n al azar
}
until (cartasrandom[poscionrandom]!="none") //hace lo anterior hasta que //encuentre un lugar desocupado
cartasrandom[posicionrandom]=cartas[i]//sustituye los valores
}
Esa es la idea, espero te ayude.
Cita de: DarkKRuleR en Junio 07, 2010, 01:38:56 AM
Pues s?, al parecer tu codigo, soccer, crea 20 variables, que puse:
carta[1]=tal, carta[2]=tal, carta[3]=tal..
me crea 20 variables cartas, cada una con un numero aleatorio del 1 al 20, perfecto, pero no se como podria aplicar esto... para traspasar el valor de 20 variables, a otras 20 variables, pero al azar.. >_<
Expl?came al detalle para ver si podemos adecuar el c?digo a lo q necesitas, con respecto a las 20 variables, el c?digo lo puedes adaptar q sea hasta m?s, es cuesti?n de cambiar algunos valores, saludos XD XD XD
CristalBeast, tu code me da...
___________________________________________
ERROR in
action number 1
of Create Event
for object obj_general:
Error in code at line 33:
Ccard[rand,1]=card[i,1]//sustituye los valores
^
at position 19: Unknown variable card or array index out of bounds
siempre ese error con todos los codes qe estoy probando, que sera...
pero he mirado el code, y quitando el:
cartasrandom[poscionrandom]!="none"
que CREO que habria que quitar el !, lo veo correcto, pero ese error extra?o no funciona...
Soccer, modificando ttu code... tuvo muchos problemas, hasta que inici? el for en i=1, y funciona!
scr_mazo1(20);
for (i=1; i<=20; i+=1) {
rand[i,1]=global.carta[i];
Ccard[i,1]="";
}
//real() abajo?..
for (i=1; i<=20; i+=1) {
Ccard[real(rand[i,1]),1]=card[i,1];
}
perfecto! Me crea 20 variables as?:
Ccard[1,1]= "valor1"; Ccard[2,1]= "valor2"; etc, valores al azar de entre los 20 originales! Pero, no se porqu?, aunque salga perfecto, yo dibujo las 20 variables, y siempre una de ellas se dibuja en blanco, sin valor, pero no una determinada sin? una al azar, lo que significa que algun valor no se asigna bien, dejando una variable sin valor!
edit- tambien puse que iniciara los dos for en i=1 en tu script, soccer, pero sigue dejando en blanco una variable.. CONCRETAMENTE siempre falla al asignar este valor:
card[20,1]="201";
ya que, para pruebas, lo llam? 201, y al dibujar, encuentro los:
11, 21, 31, 41... 91, 101, 111, 121... 181, 191, 201
pero 201 nunca lo encuentro, siempre salen los anteriores 19 valores asignados al azar... menos este ultimo...
talvez te deja el ultimo indice en blanco lo cual podr?as hacer poniendo 21 en el array y solo tomar del 1 al 20 no s? si me dejo entender...adem?s no puedo usar el gm debido a un problema, sino te har?a un ejemplo.
Pues mira, tenia varios errorsitos, lo correg? y lo optimice.
Te adjunto el ejemplo; cada vez que presionas enter te reordena la baraja de letras, biene comentado, espero que te sirva.
Esta en :GM7: Funciona en lite y pro
Siii, Cristalbeast tu code funciona!
Soccer, no lo prob?, pero quizas deber?a haber iniciado las variables en [0,1] y no [1,1], debido a que el random hace floor, y quizas as? si hubiera funcionado, ya que tu code iva excepto la ultima variable, quizas era eso..
bueno, muchas gracias y karma a todos ^^