hola amigos soy novato y necesito por favor su ayuda para crear una peque?a aplicacion que me muestre una palabra aleatoria en la pantalla de una lista que yo mismo pueda modificar y que esto suceda al presionar una tecla como quien dice que me revuelva la lista cada vez que la presiono sin repetir . si no es mucho pedir me gustaria ver un ejemplo por favor y gracias de antemano.
Hola, basta con generar un array con las palabras:
palabra[0]="palabra0";
palabra[1]="palabra1";
...
palabra[N]="palabraN";
y dibujar alguna palabra aleatoria con:
azar=floor(random(N+1));
draw_text(x,y,palabra[azar]);
Saludos.
Yo lo haria distinto, me parece que se te simplifica mucho mas (Pero solo sirve hasta 16 palabras sino me equivoco):
Usaria la funcion "choose", pero como se usa y para que sirve?
Su sintaxis es: choose(val1,val2,val3,valetc)
val(1,2,3,etc): Determina los distintos valores que puede devolver aleatoriamente la funcion
Devuelve uno de los argumentos asignados de forma aleatoria.
Te dejo un ejemplo:
choose("hola", "chau", "nada", "etc");
Esto va a devolver aleatoriamente "hola", "chau", "nada" o "etc"
Saludos!
Aunque el ejemplo de MaanuRP es m?s sencillo de implementar, hay que notar que est? limitado a 16 palabras. Para m?s palabras hay que usar un formato espec?fico o el resultado no ser?a del todo balanceado.
El ejemplo de Zeit tiene un l?mite de, si no recuerdo mal, 32.000 palabras.
gracias amigos por sus respuestas pero como soy novato apenas estoy empezando con los codigos, por eso si no es mucho pedir les agardezco un ejemplo grafico pues as? analizo el codigo y aprendo mas ( es como para seleccionar de un grupo de estudiantes un nombre de cualquiera de ellos con solo presionar una tecla)
Con mi metodo solo te servira si son 16 alumnos, pero bueno, seria algo asi:
Crea un sprite que seria el boton con el que quieras que se haga el "sorteo" entre los nombres, crea un objeto con ese sprite y en un evento de clic izquierdo o en el que tu quieras, pon una accion de "Execute code" de la pesta?a "Control" escribe lo siguiente:
str = choose("Juan", "Pedro", "Rocio", "Sofia")
show_message(str)
str: Es una variable cualquiera, le puedes cambiar el nombre.
choose("","","",""): Funcion con sus argumentos (Estos son los nombres de los alumnos, eso los tienes que elegir vos, pero ya sabes, tiene limite de 16 argumentos.
show_message(variable): En este caso la variable es str, pero dependera del nombre que le pusiste vos. Eso hara salir un mensaje con el nombre que salio al azar.
PD: No se como cambiar el tama?o de la letra dentro de los codigos, por eso la letra chica, perdon.
Saludos!
Usando el ejemplo de Zeit...
Pon? los siguientes c?digos en un objeto:
Create:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
names = 2;[/gml]
Key Press Enter:
[gml]choosen = floor(random(names));[/gml]
Draw:
[gml]if (choosen == -1) {
draw_text(10, 10, "No hay un nombre elejido a?n.");
} else {
draw_text(10, 10, "Nombre: " + name[choosen] + ".");
}[/gml]
Para modificar los nombres ten?s que modificar el evento create. Por ejemplo, al agregar uno:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
name[2] = "baz";
names = 3; // Ese n?mero es el total de nombres.[/gml]
gracias WADK eso era justo lo que necesita gracias a todos por sus ayudas oportunas, ya lo implement? y quedo de maravilla.
ojo, estas diciendo que quieres que las palabras no se repitan, con ambos metodos las palabras podr?an repetirse.
si bien es un metodo mucho m?s complejo yo usar?a listas
crar?a una ds_list y luego la duplicar?a y la ordenar?a aleatoriamente con su respectiva funcion, ir?a sacando las entradas una a una a medida que las muestro de la segunda lista y cuando no haya m?s valores, muestro un mensaje y vuelvo a duplicar la lista... no se si se entiende...
ese metodo no repetir?a nunca una palabra hasta que no se haya ordenado la lista completamente...
si te interesa me dices y te puedo hacer un ejemplo con c?digo...
Cita de: Ciberman en Julio 21, 2011, 03:49:54 AM
ojo, estas diciendo que quieres que las palabras no se repitan, con ambos metodos las palabras podr?an repetirse.
Se me pas? eso :S.
El ejemplo que puse antes tambi?n se puede modificar para que las palabras no se repitan.
Solo hay que cambiar el c?digo de Key Press Enter por este:
[gml]if (choosen != -1) {
names -= 1;
name[choosen] = name[names];
}
choosen = floor(random(names));[/gml]
Eso deber?a ser suficiente.
Me parace mucho m?s sencillo que el m?todo que plantea Ciberman.
estas haciendo lo mismo que se hace con las listas de mi metodo pero manualmente usando arrays.
el problema de eso es que al no duplicar la lista, en el momento que se acabe la lista dar?a error, si se duplicara la lista se podr?a volver a resetear.
son metodos, nunca se me habr?a ocurrido esa forma de eliminar un elemento de la lista...
Hola, este ejemplo que puse en otro post hace tiempo puede servir para obtener sin repeticion una sublista dentro de una lista de palabras, objetos, rooms, etc... Saludos.
Post:
http://www.comunidadgm.org/index.php?topic=13803.msg68909#msg68909 (http://www.comunidadgm.org/index.php?topic=13803.msg68909#msg68909)
Ejemplo:
http://www.comunidadgm.org/index.php?action=dlattach;topic=13803.0;attach=8346 (http://www.comunidadgm.org/index.php?action=dlattach;topic=13803.0;attach=8346)
Perfecto!
Me sirve para poner comentarios al estilo minecraft XD ;D
O para dar consejos antes de empezar el juego :D
Cita de: Ciberman en Julio 21, 2011, 08:26:38 PM
estas haciendo lo mismo que se hace con las listas de mi metodo pero manualmente usando arrays.
el problema de eso es que al no duplicar la lista, en el momento que se acabe la lista dar?a error, si se duplicara la lista se podr?a volver a resetear.
Hmmm... seguro que eso se puede arreglar tambi?n ;).
Create:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
names = 2;
cnames = names;[/gml]
Step:
[gml]if (cnames == 1) {
cnames = names;
choosen = -1;
}
if (choosen != -1) {
var tmp;
cnames -= 1;
tmp = name[choosen];
name[choosen] = name[cnames];
name[cnames] = tmp;
}
choosen = floor(random(cnames));[/gml]
Draw:
[gml]if (choosen == -1) {
draw_text(10, 10, "No hay un nombre elejido a?n.");
} else {
draw_text(10, 10, "Nombre: " + name[choosen] + ".");
}
if (cnames == 1) {
draw_text(10, 26, "Este es el ?ltimo nombre. Presiona Enter para reiniciar la lista.");
}[/gml]
hola , el ultimo ejemplo que me da wadk, ya lo hice pero no funciona
Cita de: Wadk en Julio 22, 2011, 02:10:17 AM
Cita de: Ciberman en Julio 21, 2011, 08:26:38 PM
estas haciendo lo mismo que se hace con las listas de mi metodo pero manualmente usando arrays.
el problema de eso es que al no duplicar la lista, en el momento que se acabe la lista dar?a error, si se duplicara la lista se podr?a volver a resetear.
Hmmm... seguro que eso se puede arreglar tambi?n ;).
Create:
[gml]choosen = -1;
name[0] = "foo";
name[1] = "bar";
names = 2;
cnames = names;[/gml]
Step:
[gml]if (cnames == 1) {
cnames = names;
choosen = -1;
}
if (choosen != -1) {
var tmp;
cnames -= 1;
tmp = name[choosen];
name[choosen] = name[cnames];
name[cnames] = tmp;
}
choosen = floor(random(cnames));[/gml]
Draw:
[gml]if (choosen == -1) {
draw_text(10, 10, "No hay un nombre elejido a?n.");
} else {
draw_text(10, 10, "Nombre: " + name[choosen] + ".");
}
if (cnames == 1) {
draw_text(10, 26, "Este es el ?ltimo nombre. Presiona Enter para reiniciar la lista.");
}[/gml]
Ten?s que poner m?s detalles para que sea posible arreglar el error.
?C?mo implementaste el c?digo? Lo acabo de probar y a mi me funciona perfectamente.