saludos makeros, en mi juego estoy utilizando la funcion choose para crear instancias s?lo en determinadas posiciones, mi codigo es este:
[gml]if global.turno_cpu=true////////////////////////////////////////////////////////
{posicion=choose(1,2,3)
if posicion=1
{
if not cuadro2.activo=true
{posx=256
posy=128}
}
if posicion=2
{
if not cuadro4.activo=true
posx=192
posy=192
}
if posicion=3
{
if not cuadro5.activo=true
posx=250
posy=192
}
instance_create(posx,posy,CPU)//////////////CREAMOS LA INSTANCIA
alarm[0]=5
diag_left.alarm[0]=1
parte_superior.alarm[0]=1
lado_izq.alarm[0]=1
}[/gml]
Como pueden ver algunos el codigo esta basado en probar si es tu turno, luego viene la funcion choose, probando que las instancias (cuadros) que estan en tal posicion, no esten activas para tomar las variables posx y posy, las cuales son las posiciones de las instancias ya nombradas (cuadros), lo que me sucede es que si -por ejemplo- esta s?lo un cuadro activo, no crea la instancia en esa posicion, simplemente no hace nada,
Entonces yo lo que quiero es que busque un cuadro que no este activo y que me cree la instancia en ese lugar, ser? que necesito otra funcion....ayudenme por favor...
[gml]posx=-1
while posx=-1 and (cuadro2.activo=true or cuadro4.activo=true or cuadro5.activo=true)
{
if global.turno_cpu=true////////////////////////////////////////////////////////
{posicion=choose(1,2,3)
if posicion=1
{
if not cuadro2.activo=true{
posx=256
posy=128}
}
if posicion=2
{
if not cuadro4.activo=true{
posx=192
posy=192}
}
if posicion=3
{
if not cuadro5.activo=true{
posx=250
posy=192}
}
instance_create(posx,posy,CPU)//////////////CREAMOS LA INSTANCIA
alarm[0]=5
diag_left.alarm[0]=1
parte_superior.alarm[0]=1
lado_izq.alarm[0]=1
}
}[/gml]
Asi? Fijate si funca
probe el c?digo, pero no crea la instancia, para probarlo puse la variable activo de los cuadros 2 y 4 en true, deberia de aparecerme en la posicion del 5, pero no lo hizo...
Fijate as?:
[gml]
if(global.turno_cpu){
posx=0;
posy=0;
while(cuadro2.activo || cuadro4.activo || cuadro5.activo) && (posx==0){
switch(floor(random(3))){
case 0:
if(!cuadro2.activo){
posx=256;
posy=128;
}else{
continue;
}
break;
case 1:
if(!cuadro4.activo){
posx=192;
posy=192;
}else{
continue;
}
break;
case 2:
if(!cuadro5.activo){
posx=250;
posy=192;
}else{
continue;
}
break;
}
}
instance_create(posx,posy,CPU);
alarm[0]=5;
diag_left.alarm[0]=1;
parte_superior.alarm[0]=1;
lado_izq.alarm[0]=1;
}
[/gml]
wadk escribiste mal los casos
deber?an de ser
case 1:
case 2:
y case 3:
?no?
edit: ahh pense que ceil disculpa XD
NUNCA uses ceil(random()) (ni round(random())) a menos que est?s 10000% seguro de lo que est?s haciendo.
Wadk, debo decirte que hay cosas en tu codigo que no entiendo, por lo tanto lo que hice fue copy&paste en el editor de codigos, pero tampoco me funciono, no es que no quiera o me de pereza estudiar tu c?digo, simplemente hay cosas que no entiendo...
Cita de: Wadk en Octubre 24, 2010, 06:59:18 PM
NUNCA uses ceil(random()) (ni round(random())) a menos que est?s 10000% seguro de lo que est?s haciendo.
mmmm siempre estoy seguro de lo que estoy haciendo cuando las uso :-X pero ?por que dices eso?
tal vez as? funcione
[gml]if(global.turno_cpu){
posx=0;
posy=0;
while(cuadro2.activo!=1 || cuadro4.activo!=1 || cuadro5.activo!=1) && (posx==0){
switch(floor(random(3))){
case 0:
if(!cuadro2.activo){
posx=256;
posy=128;
}else{
continue;
}
break;
case 1:
if(!cuadro4.activo){
posx=192;
posy=192;
}else{
continue;
}
break;
case 2:
if(!cuadro5.activo){
posx=250;
posy=192;
}else{
continue;
}
break;
}
}
instance_create(posx,posy,CPU);
alarm[0]=5;
diag_left.alarm[0]=1;
parte_superior.alarm[0]=1;
lado_izq.alarm[0]=1;
}[/gml]
@Slampdesign: ?Qu? no entend?s? Hmmm... creo que ser?a as? el c?digo:
[gml]if(global.turno_cpu){
posx=0;
posy=0;
while(!cuadro2.activo || !cuadro4.activo || !cuadro5.activo) && (posx==0){
switch(floor(random(3))){
case 0:
if(!cuadro2.activo){
posx=256;
posy=128;
}else{
continue;
}
break;
case 1:
if(!cuadro4.activo){
posx=192;
posy=192;
}else{
continue;
}
break;
case 2:
if(!cuadro5.activo){
posx=250;
posy=192;
}else{
continue;
}
break;
}
}
instance_create(posx,posy,CPU);
alarm[0]=5;
diag_left.alarm[0]=1;
parte_superior.alarm[0]=1;
lado_izq.alarm[0]=1;
}[/gml]
@brunoxzx: random puede devolver 0, y ceil(0) es 0.
Murio Hackware: ------------------ XD???
Con respecto al c?digo de brunoxzx, el juego se quedo pegado tuve que recurrir al administrador de tareas... :-X
Y el de Wadk...probe en copy&paste y probe cambiando el:
[gml] if(!cuadro2.activo)[/gml]
por:
[gml] if not(!cuadro2.activo)[/gml]
Y no ocurrio nada...
Espero me tengan paciencia... :-[
MM wadk si estoy consiente de que puede devolver 0 pero las provavilidades de que salga son como de 99.99999999 a 0.000000001 devido a que el random de game maker devuelve numeros con 10 digitos despues del punto y para comprovarlo lo que hice fue usar este codigo en step
[gml]var hola;
hola=1
while hola!=0{hola=random(0.000001)}
game_end()[/gml]
y nunca me se cerro el juego, si pon?a n?meros como 0.0000001 se cerraba en unos 3 segundos y n?meros menores instant?neo bueno y si con 0.000001 nunca se cerro bueno con random(3) casi se podr?a decir que es imposible que de 0
edit:slampdesign creo que if(!cuadro2.activo) es lo mimso que if not (cuadro2.activo) bueno creo que poniendo if not (!cuadro2.activo) se contradice una contradicci?n y queda como if (cuadro2.activo)
brunoxzx, si sabes que es posible de que tu c?digo falle aunque sea por una improbabilidad no puedes darte el lujo de ignorarlo; es mejor cambiar el m?todo e ir a la segura. Por eso floor(random()) es una mejor combinaci?n.
yo nunca puse en mi codigo ceil(random()) :-X simplemente dije que pens? que wadk lo hab?a puesto 8)
Perfecto, pero yo te digo que no lo hagas y te volv?s loco.
@slamp: ! es lo mismo que not, como dijo bruno.
Como sea, no veo errores en el ?ltimo c?digo que puse, deber?a funcionar bien sin que tengas que cambiar nada.
Hola programadores, como algunos saben coloque en este tema [CERRADO] por no encontrar respuestas claras o que me realizaran la funcion que yo necesito, sin embargo, agradezco a los que por algun motivo quisieron ayudarme, como yo no se usar muy bien el GML, solo copio y pego en mi editor de codigo....
Estuve analizando el problema...y creo que talvez no me funcionan los codigos porque los a?adi en un evento de ALARMA, no se si eso tenga que ver, seguro ustedes pensaron que estaba en el evento STEP....
Espero que puedan comprenderme y ayudarme un poco mas.....
Yo no asum? que el c?digo estaba en step ni en ning?n lado...
Puede ser posible que el c?digo simplemente no se est? ejecutando, pero lo dudo ya que dijiste que se te tranc? el juego al poner un c?digo de bruno... si quer?s estar seguro, agreg? un show_message() al principi? del c?digo.
Prob? con el ?ltimo c?digo que puse y no cambies nada, s?lo copi? y peg?. Si quer?s que te explique como funciona el c?digo decime, no tengo problema.