Autor Tema: Naval Battle (proyecto online colaborativo bajo GM Server)  (Leído 350 veces)

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

Desconectado Arcadian

Naval Battle (proyecto online colaborativo bajo GM Server)
« en: Octubre 10, 2017, 01:40:59 pm »
Buenas!

Estoy buscando uno o varios colaboradores con los que potenciar mis habilidades en juegos online, no tengo nada pensado por lo que me gustaría escuchar propuestas de posibles juegos que tengáis en mente, mi campo es la programación, suelo hacer pinitos a nivel de interfaz pero si me vienen dados, mejor.
Ojo, proyectos desde cero, en idea inicial, ya que a veces me han llegado ofertas para proyectos ya bien adelantados y adaptar ahí el online suele ser más trabajoso.

Uso GM Studio Professional con export Android, y vivo en el norte de España, por tema horario.
« última modificación: Noviembre 12, 2017, 03:46:47 pm por Arcadian »


 
Los siguientes usuarios dieron las gracias a este tema: desplo

Desconectado luisdi

  • Visitante
  • *
  • Puntos: 3
  • Mensajes: 1
    • Ver Perfil
Re:Colaboración en proyecto online
« Respuesta #1 en: Octubre 13, 2017, 08:42:48 pm »
Hola Arcadian, tengo desde hace tiempo unos proyectos de juegos on line para empezar pero mi experiencia como programador deja mucho que desear, si aun buscas proyecto te puedo contar los mios y hablarlo un poco por privado, espero tu respuesta gracias.
 

Desconectado Arcadian

Re:Colaboración en proyecto online
« Respuesta #2 en: Octubre 18, 2017, 01:18:44 pm »
Hola Arcadian, tengo desde hace tiempo unos proyectos de juegos on line para empezar pero mi experiencia como programador deja mucho que desear, si aun buscas proyecto te puedo contar los mios y hablarlo un poco por privado, espero tu respuesta gracias.
Te he enviado privado.
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #3 en: Noviembre 12, 2017, 04:37:55 pm »
He recibido varias peticiones apoyando el proyecto-tutorial de cómo realizar un juego online bajo GM Server, y aprovechando el parón de trabajo en el que me encuentro, he decidido darle una segunda oportunidad. Como no encuentro el hilo en el que lo creé (quizá se autodestruyera cuando aparecieron aquellos problemas del foro) he pensado en reciclar este hilo para retomar el proyecto (si a los moderadores les parece bien, sino que alguien me diga por favor dónde está dicho hilo, o dónde debo poner este otro).
Por refrescar un poco las neuronas: la idea base de este proyecto consiste en realizar un juego con modo online multijugador bajo GM Server, en modo tutorial, explicandoos todos los pasos. Para empezar, establecemos los pilares básicos del proyecto, que son:

a) Tipo de juego: juego de hundir barcos (batalla naval)
b) Plataformas: PC y Android
c) Versión de GameMaker utilizada: Studio v1.4.1773
d) Versión de GM Server utilizada: 1.9.9f
e) Disposición de pantalla: Landscape
f) Tamaño de pantalla: 1280x720
g) Sincronización de archivos del proyecto: vía Dropbox solamente
h) Link acceso (sino pedidme compartir): https://www.dropbox.com/sh/gki7g8j995pb4j1/AABD0-nss0C1VWJ87nshPqdaa?dl=0

NOTA: Este ejemplo como ya veis NO es para la versión 2 de GameMaker. Sinceramente, no sé si funcionaría bajo la versión más reciente, y si tengo que apostar, diría que NO. Por tanto, si funciona bien, pero sino, NO postéeis dudas sobre dicho supuesto, para no desviar la atención, este proyecto está orientado solamente a la versión 1.4, y todo lo que se explica se va a encontrar englobado siempre dentro de dichos márgenes.
De la misma forma, NO voy a explicar ni sacar exports para otras plataformas, sólo para Android y PC.


Puntualizado todo eso, comenzamos.

Abrimos GameMaker, y creamos un nuevo proyecto al que llamaremos Naval Battle (por ejemplo, tampoco es que importe mucho). Es un proyecto que usa Gamemaker Server, por tanto vamos a la página de descarga, y lo bajamos:
http://gamemakerserver.com/en/download/
Del pack que bajamos, que viene con tres versiones posibles de server, elejimos la que pone "All", ya que nos vale para todo, y la importamos desde nuestro proyecto de GM:
Los primeros sprites del proyecto (los barcos) los tenéis dentro de la carpeta "Lowder2 Sprites", Lowder2 es el creador de dichos sprites (sacados de la página de OpenGameArt), a quien le damos las gracias desde este post por su contribución.
Seguiré añadiendo más cosillas a partir de ahora, sobre todo tema de recursos gráficos, que son básicos para el juego ;)
Con cualquier duda, la vamos comentando aquí.
 
Los siguientes usuarios dieron las gracias a este tema: yokaiworld

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #4 en: Noviembre 13, 2017, 01:42:13 pm »
Cuaderno de bitácora 2:
Acabo de añadir al proyecto:
1 background que se asemeja al océano, desde una vista cenital y proporciones 1280x720 que nos servirá como fondo para las partidas de juego en si.
1 boceto de botón clicable. He pensado en usar un botón rectangular, de apariencia metalica y remaches a ambos lados, asemejando las planchas metalicas de un barco.
1 sprite de torpedo, que usaran los jugadores para atacar.
Habrá una room inicial, y luego otra para el juego en si.
La premisa del juego llegado este punto sera: cada jugador controla con sus barcos una zona de la pantalla, ésta se encuentra dividida en dos a lo largo de la misma (en horizontal) por lo que el jugador 1 dispara desde arriba, y el dos, desde abajo. Hay un cañón de torpedos en el centro de la pantalla de cada jugador, y con el se apunta antes de disparar (flechas de movimiento para Android o cursores para PC).
Se busca que haya la mayor amplitud y distancia de tiro posible, es decir, que no sea tan fácil apuntar ni acertar por tanto, he pensado en fijar dos parámetros para el disparo: uno, el ángulo que tiene el cañón torpedero (modificable a derecha e izquierda), y otro, un temporizador de en qué momento explotará el torpedo (esto se calibra dejando pulsado mas o menos tiempo el botón de disparo). El temporizador es una barra que se va llenando, y si la dejas mucho tiempo pulsada vuelve a empezar de cero; cuando sueltas el botón de disparo, es cuando el torpedo sale disparado con dicho ángulo y temporizador de explosión. Así que el jugador tiene que pensar a donde va a disparar, y cuanto tiempo va a tardar el torpedo en explotar. Si dicho calculo es acertado el torpedo causa daños a X distancia de su punto de explosión. Lo divertido es que si fallas en esto, volarás por los aires tus propios barcos, e incluso puedes (por proximidad) acertar a dos barcos a la vez incluso.
Lógicamente habrá barcos que aguanten 1 impacto, 2, 3, 4 o los que sean, todo eso se puede ajustar con facilidad posteriormente.
Implementaremos estos sprites, backgrounds y objetos y luego comenzaremos a abordar la programación en si.
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #5 en: Noviembre 14, 2017, 06:51:21 pm »
Cuaderno de bitácora 3: Preparando nuestro juego para ser utilizado bajo GM Server

Una parte importante para poder usar GM Server, consiste (si no lo hemos hecho antes ya con otro juego) en crearnos una cuenta de Developer en la página de GM Server, y "dar de alta" nuestro juego, que es tan sencillo como:

a) Nos vamos a la página de GM Server, y nos logueamos con nuestro usuario. Ya veis que podemos registrarnos igualmente:


b) Una vez logueados, nos volvemos a identificar como "Developers", pinchando en el apartado correspondiente, y metiendo nuestra password de Developer (se puede fijar la misma que tengas como usuario del servidor, para que os sea más fácil):


c) Nos vamos a la parte de abajo de la página que se nos abre, y rellenamos los campos de "Register a New Game". Ya veis que el Game ID se corresponde con el Game Identifier de nuestro juego (sacado de la pestaña de "Global Game Settings" en GM, más abajo):



d) Hecho eso, le damos a "Add game", y listo, ya tenemos nuestro juego añadido a la página de GM Server ;)


Mañana empezaremos a programar desde ya nuestro juego multijugador, asi que descansad, y desayunad fuerte!

« última modificación: Noviembre 14, 2017, 06:53:17 pm por Arcadian »
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #6 en: Noviembre 15, 2017, 01:43:55 pm »
Cuaderno de bitácora 4: Modos de juego
Hay dos modos de juego posibles utilizando GM Server: con el "VS Mode" activado, o con el "VS Mode" desactivado.
"Qué narices es eso Arcadian, hablamos en cristiano". Pues muy sencillo, el VS Mode es una funcionalidad del server (que puede resultar mas o menos favorable según el perfil de cada jugador), y que consiste básicamente en que el server "coge las riendas", o sea el control de nuestro juego, y se encarga personalmente (él) de controlar todo lo que tenga que ver con el "matchmaking" ("creación de partidas ", para entendernos).
Es decir, si un jugador carga el juego, y alguien mas esta disponible para jugar en ese momento, ambos son sincronizados y movidos a la room de juego sin mas preámbulos, sin paños calientes, para entendernos.
Eso es bueno o malo? Vosotros juzgareis. Puede haber juegos donde la gente quiera jugar con sus amiguetes o con una persona concreta, no al azar, o donde ver las partidas activas sea interesante para filtrarlas por nivel de los jugadores, países, etc.
Importante decir que el VS Mode es por la brava, es decir, el jugador no puede interrumpir el matchmaking, ni elegir contra quien se le empareja... Es el server quien lo hace!!
Para nuestro caso particular, NO usaremos VS Mode de inicio, ya que requiere asimismo ser usuario registrado del server, y nosotros queremos que cualquiera pueda jugar, simplemente indicando su nick, nada mas. Pero, mas adelante si me gustaría plantearos un ejemplo de este, solo para,que veáis cómo manejarse, ok?
Comentaros finalmente que el VS Mode lo podéis activar o desactivar desde la pagina del juego (dentro de la pagina oficial de GM Server, es marcar un simple check).


« última modificación: Noviembre 15, 2017, 01:47:07 pm por Arcadian »
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #7 en: Noviembre 16, 2017, 07:19:23 pm »
Cuaderno de bitácora 5: El Objeto GMS y cómo saber si estás conectado/logueado

Ayer veíamos la necesidad de tener nuestro juego registrado en la página del servidor para poder interactuar con él, pero a nivel de código, nuestro juego también deberá tener una serie de requisitos para que esta comunicación bilateral sea posible.

Uno de ellos es el Objeto GMS. Este objeto actúa a modo de "set up" e inicializa las funciones de GM Server dentro del juego.

Par dar vida al objeto_gms, basta con crear un objeto sin sprite, persistente, que tenga una depth bien negativa (-100000 por ejemplo) y darle prioridad dentro de todas las instancias ubicadas en la room (es decir, que se ejecute la primera de ellas en la lista de instancias).

Además, le meteremos cuatro eventos diferentes: Create, Step, Networking y Draw, con los siguientes trozos de código:

Evento Create
Código: [Seleccionar]
gms_init(objeto_gms)
gms_settings(true,1.0,-1,-1)  //  Este código inicializa la configuración de la extensión de GM Server

Evento Step
Código: [Seleccionar]
gms_step()

Evento Networking
Código: [Seleccionar]
gms_network()

Evento Draw
Código: [Seleccionar]
gms_draw()

Tras esto, ya tenemos la connectividad básica necesaria para que nuestro juego se comunique con GM Server.

Segunda parte: dentro de los juegos online, el jugador puede encontrarse en tres supuestos diferentes: estar desconectado (y por tanto, no logueado dentro del servidor), estar conectado pero no logueado, o estar conectado y logueado.

De momento solo nos interesan los dos primeros casos, por lo que vamos a obviar temporalmente el tema de estar logueado (es decir, identificado como usuario registrado).

Un juego que tenga correctamente configurado todo el setup (anterior) que hemos comentado para poder "hablar" con GM Server, se conecta al servidor desde el mismo inicio, es decir, desde que arranca, no es necesario ningún otro tipo de función a utilizar.

No obstante, siempre es interesante indicar (a nivel de juego), el status en el que se encuentra el jugador a nivel de conectividad, cómo hacemos esto? Muy sencillo, vamos a utilizar si os parece un objeto_controlador dentro del juego, para llevar diferentes parámetros, lo haremos igualmente persistente pero con depth algo menos negativa que el objeto_gms (digamos -99999), lo pegamos en la room Inicial de nuestro juego y le metemos un código de este estilo en el evento Draw:
Código: [Seleccionar]
if gms_info_isconnected()=true  //  Si el jugador esta conectado
{
draw_sprite(...)  // dibujaremos sprite de conectividad
}
else
{
draw_sprite(...)  //  dibujaremos un sprite de "problemas"
}
Este código solo es informativo pero lo podremos usar en cada una de las habitaciones de nuestro juego para saber en todo momento si tenemos algún problema de conectividad hacia el Server.
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #8 en: Noviembre 18, 2017, 08:39:55 pm »
Cuaderno de bitácora 6: Usando variables de jugador
Antes de empezar: me habeis preguntado por correo alguna forma rápida de resolver dudas sobre la marcha con vuestros juegos bajo GM Server, os dejo mi DiscordTag, podéis consultarme por allí si queréis: Arcadian#2337
Otro mecanismo interesante de GM Server, son las variables de jugador. Es decir, podemos guardar datos del propio jugador, en el Server, y que esa información sea accesible (o no) para otros jugadores.
" Y para que es interesante esto, Arcadian?" Como ya sabéis, hemos decidido no usar VS Mode para nuestro juego de barcos, de forma que cualquiera pueda jugar sin tener que registrarse. Pero claro, cada jugador debería tener un nick, llamarse de una forma dentro de la partida, y queremos que cada jugador pueda saber a quien se esta enfrentando. Para esto usaremos variables de jugador, usando una función del server llamada gms_self_set("variable",valor)
Al empezar el juego, vamos a hacer que este pregunte al jugador por su nick, lo guardaremos en la variable global.nick, y además guardaremos esa string como variable (a nivel de juego) para el jugador:
Código: [Seleccionar]
gms_self_set("nick",global.nick)Estas variables de jugador pueden ser tambien accedidas desde otro jugador usando la función gms_other_get_string(player_id,"variable"). El player_id es una variable que asigna el server en automatico a cada jugador, lo único que tenemos que hacer para acceder a ella es hacer un ciclo "for" entre todos los jugadores conectados, y extraer la variable que estemos buscando de aquel que nos interese.
Usando diferentes variables de jugador, podemos saber si este ha creado una partida para jugar, si busca otras partidas a las que unirse, de que país es, edad, puntos de experiencia,  etc.
Otras funciones interesantes que veremos son:
a) Variables globales guardadas a nivel de servidor
b) Uso de INIs online a nivel de juego
c) Uso de INIs online a nivel del jugador
Con todos estos elementos vamos a conseguir construir nuestro juego online. Hasta aquí la teoría, en la siguiente bitácora veremos un ejemplo de todo esto y podremos (por fin) empezar a programar nuestro juego online ;)
 

Desconectado Arcadian

Re:Naval Battle (proyecto online colaborativo bajo GM Server)
« Respuesta #9 en: Noviembre 21, 2017, 06:48:27 am »
Cuaderno de bitácora 7: ¡Empezando a programar!
Cambio de planes... He descubierto algunas posibles incompatibilidades de GM Server intentando funcionar sólo con los jugadores conectados (es decir, sin estar estos logueados), por lo que para evitar problemas, vamos a empezar a programar bajo la premisa de que todos los jugadores tienen que estar identificados en el servidor para poder jugar.
No obstante, el registro en GM Server nunca es obligatorio, sino opcional, y los jugadores podrán seguir jugando como invitados (en estos casos os aparecerá la coletilla "Guest_" en el nombre de usuario, meterle un nick cualquiera a continuación, esto es igualmente válido para poder jugar).
Además, debido a este cambio, ¡empezaremos viendo el sistema VS Mode de "matchmaking"! Que os resultará más cómodo y rápido para jugar.
Para activar el VS Mode, sólo tenemos que ir a la página de GM Server, identificarnos como developers, meternos en la página del juego en cuestión, y dentro del apartado "Game Settings", marcar (o desmarcar) dicho check:
Número mínimo de jugadores, 2, número preferido y máximo, 2. Resto de configuraciones del VS Mode podemos dejarlo tal cual.

Ahora mismo tengo así el proyecto, podéis verlo en Dropbox:
https://www.dropbox.com/sh/gki7g8j995pb4j1/AABD0-nss0C1VWJ87nshPqdaa?dl=0

ROOM DE INICIO
a) Tenemos identificadores de jugador conectado, y jugador logueado. Hemos metido un código para saber número de jugadores conectados al servidor. También tenemos un código para saber los nombres de esos jugadores disponibles para jugar, clickando el botón donde se muestran los jugadores conectados.
ROOM DE JUEGO
b) Tenemos un background que se asemeja al mar, dividido en dos zonas de juego. El jugador 1 lo tendremos en la parte superior de la interfaz, y el jugador 2 en la inferior. En el próximo cuaderno abordaremos qué añadirle.