Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Monigote en Septiembre 11, 2010, 10:18:47 AM

Título: Elegir aleatoriamente una acci?n
Publicado por: Monigote en Septiembre 11, 2010, 10:18:47 AM
Hola. Tengo una duda (quiz?s un poco tonta) y es que no s? c?mo hacer que un objeto elija al azar entre una serie de acciones que le ponga. S? que la acci?n 'random()' elige un n?mero al azar y te lo devuelve en forma de variable, pero no s? como hacer que elija una acci?n entre otras de forma aleatoria.

Gracias de antemano. :)
Título: Re: Elegir aleatoriamente una acci?n
Publicado por: Megaratanuva en Septiembre 11, 2010, 04:02:23 PM
Pues mira, hay otra muy parecida a random(), que es choose(), en esa puedes poner las acci?nes que quieras y todas se har?n o no aleatoriamente ;).

Ejemplo:

choose(acci?n1,acci?n2,acci?n3,...)

Espero que te sirva ;)
Título: Re: Elegir aleatoriamente una acci?n
Publicado por: Monigote en Septiembre 12, 2010, 11:37:49 AM
Creo que me sirve, el caso es que quiero que ejecute aletoriamente un conjunto de acciones, es decir:

choose(conjunto1,conjunto2)

Y eso he visto que no me deja hacerlo, asi que prob? poniendo una alarma (el choose se activa cuando colisiona con un objeto) como cada una de las acciones a elegir:

choose(alarm[0]=5,alarm[1]=5)

Pero el objeto ignora las alarmas completamente, ?a qu? se debe? ?se pueden poner conjuntos de acciones en el choose?

Gracias otra vez. :)
Título: Re: Elegir aleatoriamente una acci?n
Publicado por: Megaratanuva en Septiembre 12, 2010, 04:13:45 PM
MMM, ok, vamos a hacer que todos las cosas se reunan en una variable.
(ten en cuenta q todo lo que voy a decir es para que lo entienda un novato, independientemente de tu nivel, porq yo no lo s? ;))

Imaginate:
*acciones_1//conjunto de acciones 1
*acciones_2//conjunto de acciones 2
*acciones_3//conjunto de acciones 3
*end_acciones_1//fin de acciones 1
*end_acciones_2//fin de acciones 2
*end_acciones_3//fin de acciones 3

En el evento create:

acciones_1 = true
acciones_2 = true
acciones_3 = true
end_acciones_1 = true
end_acciones_2 = true
end_acciones_3 = true


//esto es en formato c?digo

Pero si quieres te puedes ir a control>set variable y hacer lo mismo
en "variable" pones: acciones_1,acciones_2,blablabla...
y en value pones false.
[/code]

Ahora en step:

if acciones_1 = true and end_acciones_1 = false //esto indica que se ha activa el grupo de acciones 1 y estas no han terminado (end_acciones_1)
{
   lo que sea//esto es la 1? acci?n que quieres que se produzca
   lo que sea
   lo que sea...
}
if acciones_2 = true and end_acciones_2 = false
{
   lo que sea...

Ahora vamos con el choose()
[code]//ahora pones:
choose(acciones_1 = true,acciones_2 = true, acciones_3 = true)


PERO!! Hay un problema, las accione, se activan, pero permanecen activadas, asiq tendr?s que poner, seg?n la acci?n, uqe cunado termine la ultima acci?n, el conjunto de acciones vuelva a false

Ejemplo:

if acciones_1 = true adn end_acciones_1 = false//si se pudene realizar las acciones y estas no han terminado...
{
   instance_create(obj_manzana,x,y)//hace la accion de crear  una manzana.
   x=1//se va al punto horizontal 1
   y=2//se va al punto vertical 2
   end_acciones_1 = true//indica que las acciones han terminado
}
else //sino
{
   exit//no lo hagas
}


PD: si esto te dice algo como..."unknown variable and" cambia el "and" por "&&" (sin comillas) que es lo mismo (pero creo que en versiones m?s bajas al gm7 no te lo admite ;))

PD2: Es posible que por la programaci?n de tu juego esto no te funcione, de ser as?, habria que ver como funciona para poder darte una respuesta, pero esto es muy en general




Título: Re: Elegir aleatoriamente una acci?n
Publicado por: Hackware en Septiembre 12, 2010, 11:59:01 PM
Hoyga!!!!!!!!!!!!!!!!!!! XD

Este parece un trabajo para... ?la sentencia switch! Yo nunca he utilizado la funci?n choose para escoger entre acciones sino entre valores, por lo que dudo de la efectividad de las soluciones anteriores (de hecho creo que no funcionan, corr?janme si me equivoco).

Volviendo a la soluci?n, Joe Pino que debes usar choose para escoger entre valores, en combinaci?n con switch del siguiente modo:

Citarswitch (choose('Comer','Dormir','VerTV','UsarGM','BuscarTesorosEnterradosEnElParqueDeLaCiudad'))
{
case 'Comer':
//AQU? DEBES PONER TODAS LAS ACCIONES QUE DESEES PARA COMER
break; //es importante cerrar el grupo de acciones con un break para detener el switch en este punto
case 'UsarGM':
//AQU? DEBES PONER TODAS LAS ACCIONES QUE DESEES PARA DORMIR
break;
case 'verTV':
//YA CONOCES LA RUTINA, ES AS? PARA CADA ACCI?N
break;
//Y AS? SUCESIVAMENTE...
}

Cabe resaltar que si lo deseas puedes usar valores num?ricos en el choose en vez de cadenas de texto, aunque las cadenas de texto mantienen mejor la legibilidad del c?digo. Para una mejor explicaci?n de c?mo trabaja la sentencia switch puedes referirte al manual en espa?ol online [CLIC AQU?] (http://www.comunidadgm.org/manual_GM/Sentencia_switch.htm). Alternativamente puedes guardar el resultado de la funci?n choose en una variable y luego pasarle esa variable como par?metro al switch.

Espero te ayude ?Saludos!