Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Necesito ayuda con juego de Mesa  (Leído 319 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Zhekken

en: Agosto 18, 2019, 02:20:52 pm
Bueno les explico, ayer por la mañana desperté con la idea de hacer un mini juego de Mesa (solo para practicar mas con el programa, nada serio)  iguales a los que son como: Ludo o Monopoly, para los que no hayan jugado este tipo de juegos, en resumen, tu personaje seria una ficha con una figura cualquiera, lanzas un dado y el numero que te salga el personaje avanzara, si cae un 3 entonces avanzas 3 casillas y así hasta que el primer jugador en llegar a la meta gana...

primero tenia que saber como hacer que el personaje avanzara por casillas, osea si una Room tiene casillas de 32x32 entonces el personaje se moverá de una en una, así como se mueven los personajes en Rpg Maker, investigando conseguí este codigo que me funciono bien:

Evento Create del personaje:

key_nokey=true;

Evento Step del personaje:

if (keyboard_check(vk_down)) {
 key_nokey=false;
 if (place_snapped(32,32)) {
 motion_set(270,2);
 }
}
if (keyboard_check(vk_up)) {//Arriba
 key_nokey=false;
 if (place_snapped(32,32)) {
 motion_set(90,2);
 }
}
if (keyboard_check(vk_left)) {//Izquierda
 key_nokey=false;
 if (place_snapped(32,32)) {
 motion_set(180,2);
 }
}
if (keyboard_check(vk_right)) {//Derecha
 key_nokey=false;
 if (place_snapped(32,32)) {
 motion_set(0,2);
 }
}
if (keyboard_check_released(vk_right) or keyboard_check_released(vk_left) or keyboard_check_released(vk_up) or keyboard_check_released(vk_down)) {
 key_nokey=true;
}
if (key_nokey=true) {
 if (place_snapped(32,32)) {
 motion_set(0,0)
 }
}

el personaje con las teclas, arriba,abajo,izquierda y derecha se mueven por casillas... ya con eso pude mover el personaje como quería, pero luego pensé que los jugadores no pueden mover libremente porque se supone que las fichas deben seguir una ruta especifica, algo obvio, pero igual la idea esta en que se mueva por casillas, luego pensé en usar Paths, que con esto sigues una ruta especifica y logre hacer una donde el personaje seguía la ruta que yo quería, llegando desde el inicio hasta la meta...

lo que yo tenia en mente era hacer que al presionar una tecla cualquiera, de manera aleatoria se elija cuantos pasos debe dar el personaje (osea cuantas casillas debe moverse) del 1 al 6 como un dado.

podría usar:

dado = choose (1,2,3,4,5,6)

una vez elija un numero al azar, entonces el personaje se mueva x cantidad de veces... pero con los Paths, no se como hacer que se detenga una vez entra en una casilla o que se mueva las casillas especificas que yo quiero (sin perder la ruta del path).

y aquí va mi pregunta, ¿hay una manera de hacer que el personaje se mueva las casillas que yo quiera y que nunca pierda su ruta?

Ahí les dejo un ejemplo de mas o menos como seria, la imagen la hice rápido así que dura poco

Disculpen que no tarde tanto en volver a preguntar algo de nuevo pero no se que cantidad de tiempo debo esperar para eso o si las preguntas que debo hacer deban ser sobre algo mas complejo que esto.

======================
Editado
======================
Después de inventar con los Paths, resolví el problema (sin eso de usar casillas, aunque la verdad me hubiera gustado mas así para que sea mas exacto)

Evento Create del jugador:

path_start(path0,0,0,0)
alarm[0] = 0

Evento alarm[0]

path_speed = 0

Evento Step:

if keyboard_check_pressed(ord("1")){
path_speed = 2
alarm[0] = 16
}
if keyboard_check_pressed(ord("2")){
path_speed = 2
alarm[0] = 32
}
if keyboard_check_pressed(ord("3")){
path_speed = 2
alarm[0] = 48
}
if keyboard_check_pressed(ord("4")){
path_speed = 2
alarm[0] = 64
}
if keyboard_check_pressed(ord("5")){
path_speed = 2
alarm[0] = 80
}
if keyboard_check_pressed(ord("6")){
path_speed = 2
alarm[0] = 96
}

ya solo me queda hacer que elija uno de estos 6 de manera aleatoria para que se mueva las casillas que salga en el dado. pero de igual forma, no se estaría moviendo en casillas exactas, aun así, de manera visual seria lo mismo.

por cierto la room es de 320x320 así que cada 1 segundo el personaje que es de 32x32 se mueve un cuadro equivalente a el que serian las casillas.

(si lees esto y tienes la respuesta a mi pregunta de mas arriba, igual dímela por favor que preferiría un método mas exacto)
« última modificación: Agosto 18, 2019, 03:49:59 pm por Zhekken »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado getnoff

Respuesta #1 en: Septiembre 06, 2019, 12:02:13 pm
Saludos.

Bien lo primero que diré es que crear juegos de mesa es difícil. Hay que saber un poco sobre estructuras de datos.

Ahora al tema: si yo hiciera un juego de parchís/ludo intentaría en lugar de usar paths, usar arrays (arreglos) para en ellos guardar las coordenadas de cada casilla. Como el trayecto suele ser irregular, hay que guardar manualmente todos los valores.

Entonces luego cuando una ficha tenga que mover cierta cantidad (por ejemplo 3 casillas), hago un algoritmo que desplace la ficha desde la casilla 0 a la 1, y cuando termine de la 1 a la 2, y al final de la 2 a la 3, y para que se mueva correctamente entre cada una, leer los datos de coordenadas de cada casilla que fue guardada en los arrays.

Hace un tiempo hice un prototipo de un parchís con este método, si te interesa verlo lo puedo subir.

 


Desconectado kostra

  • Legendario
  • *
  • Puntos: 2419
  • Mensajes: 2.003
  • Agradecido: 84 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Respuesta #2 en: Septiembre 06, 2019, 01:18:29 pm
Crea una variable en la casilla llamada por ejemplo "dir" y la pones como necesites en el creation code de la instancia, así el personaje al colisionar puede saber qué dirección es la siguiente, ejemplo colisión del personaje con una casilla:

Código: [Seleccionar]
nextdirection = other.dir;
y ahí ya sabes hacue qué dirección será la siguiente jugada.

Piensa que si te mueves varias casillas en un turno, este checkeo tendrá que hacerlo en cada movimiento.
« última modificación: Septiembre 06, 2019, 01:22:55 pm por kostra »

"ola k ase clickarme o k ase"
la imagen no se quita xD