Text-RPG para Pascal

Qué temática quieres para el RPG?

Aventuras
2
22%
Ciencia-Ficción: estilo Akira
0
No hay votos
Ciencia-Ficción: estilo Alien
3
33%
Ciencia-Ficción: estilo Ghost in the Shell
0
No hay votos
Ciencia-Ficción: estilo Tron
1
11%
Fantasía: Orcos, enanos, dragones y compañía
3
33%
Histórico (especificar)
0
No hay votos
Mitología clásica
0
No hay votos
Otro (especificar en la sección de comentarios)
0
No hay votos
 
Votos totales: 9

Avatar de Usuario
WhatIsAMan
Mensajes: 435
Registrado: 10 Dic 2017 17:06
Ubicación: El castillo invertido
Agradecido : 123 veces
Agradecimiento recibido: 124 veces

Text-RPG para Pascal

Mensajepor WhatIsAMan » 05 Ago 2019 14:29

A raíz de un tema de Pascal que emergió por aquí hace unos días, he decidido recuperar mis programas viejos. Entre ellos hay material mara montar un juego estilo Tron (eso tan molón de las motos) y un RPG basado en texto. Estos programas están pensados para consola, es decir no hay gráfico alguno. Para el tipo Tron se necesita color así que he decidido publicar un refinamiento de mis mecánicas RPG en los próximos días. No puedo publicar mi código tal cual, por dos motivos:

  1. Es de los primeros programas que hice, por lo tanto está lejos de ser óptimo o legible para la mayoría de gente. Las líneas no están comentadas (y ni tan sólo están identadas).
  2. Nació como fan-game de una de mis series favoritas de la época (nunca pensé que publicaría mi código). Me comportaría problemas por temas de copyright y, lo que es peor: muy probablemente me convertiría en el hazmereír del foro y eso si que no. -no

Así que voy a separar la mecánica pura de la temática del juego. El problema es que un RPG sin tema no tiene sentido alguno y, puesto que tengo cosas mejores en las que pensar he decidido dejarlo abierto para que decidais qué es lo que queréis con un encuesta. Si la opción que queréis no está, podéis proponer en los comentarios. Lo dejaré abierto 10 días, entonces la encuesta se desactivará. Luego, me gustaría que escribiéseis algo. No sé, sobre protagonistas, lugares, monstruos, etc... yo voy a concentrarme en la lógica aunque tal vez haga alguna aportación a la historieta.

Especificaciones:
  • Código fuente en Pascal.
  • Monocromo, basado en texto. Puede usar intefície semigráfica jugando con la reversión de color o por comandos de texto. Perfecto para PET, P2, etc. si se traduce a BASIC o ensamblador.
  • 3a persona con control de grupo.
  • Movimiento por salas.
  • Inventario.
  • Distintas mecánicas de combate, algunas simples y otras más avanzadas.
  • Combate entre grupos de oponentes.
  • Inventario.
  • Experiencia.
Seguro que me dejo alguna cosa, pero lo cierto es que dediqué mucho tiempo a programarlo. Lo típico cuando a un estudiante de informática le das tiempo, motivación y un lenguaje de programación.

dancresp
Mensajes: 5374
Registrado: 13 Nov 2010 02:08
Agradecido : 175 veces
Agradecimiento recibido: 297 veces

Re: Text-RPG para Pascal

Mensajepor dancresp » 06 Ago 2019 01:36

A ver si el RPG se puede compilar sin problemas en el Turbo Pascal.
Así se podría disfrutar de una versión en CP/M y CP/M-86.

Avatar de Usuario
minter
Mensajes: 2574
Registrado: 22 Jul 2014 18:51
Agradecido : 2465 veces
Agradecimiento recibido: 1076 veces

Re: Text-RPG para Pascal

Mensajepor minter » 06 Ago 2019 17:25

Pero porque en la segunda parte, Olivia Wilde lo vale. -507

Avatar de Usuario
WhatIsAMan
Mensajes: 435
Registrado: 10 Dic 2017 17:06
Ubicación: El castillo invertido
Agradecido : 123 veces
Agradecimiento recibido: 124 veces

Re: Text-RPG para Pascal

Mensajepor WhatIsAMan » 08 Ago 2019 17:04

Hola,

He intentado colgar parte del código unas cuantas veces, pero un error 403 me lo impide. Alguna idea?
A lo mejor estoy chocando contra un límite que desconozco, pero tampoco es para tanto...

Gracias

Avatar de Usuario
minter
Mensajes: 2574
Registrado: 22 Jul 2014 18:51
Agradecido : 2465 veces
Agradecimiento recibido: 1076 veces

Re: Text-RPG para Pascal

Mensajepor minter » 09 Ago 2019 08:49

WhatIsAMan escribió:He intentado colgar parte del código unas cuantas veces, pero un error 403 me lo impide. Alguna idea?


Esto te lo respondo de oídas con un café en la mano y una magdalena en la otra.

No se si había escuchado en algún sitio de este foro, que algunos códigos no se pueden pegar como código, por temas de evitar ejecuciones de scrips y cosas de esas raras. Por eso podría reportar errores o contenidos no permitidos.

Igual haciendo capturas de pantalla del código y pegando fotillos... Un jpg de un texto con fondo blanco no debería de ocupar mas allá de unos pocos kas.

Avatar de Usuario
ron
Mensajes: 18499
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1672 veces
Agradecimiento recibido: 1392 veces

Re: Text-RPG para Pascal

Mensajepor ron » 09 Ago 2019 09:11

y a las malas , pillas el código lo metes en un zip, lo subes y santas minters.

Avatar de Usuario
WhatIsAMan
Mensajes: 435
Registrado: 10 Dic 2017 17:06
Ubicación: El castillo invertido
Agradecido : 123 veces
Agradecimiento recibido: 124 veces

Re: Text-RPG para Pascal

Mensajepor WhatIsAMan » 10 Ago 2019 13:05

dancresp escribió:A ver si el RPG se puede compilar sin problemas en el Turbo Pascal.
Así se podría disfrutar de una versión en CP/M y CP/M-86.

El compilador que uso es de Free Pascal, aunque supongo que se podría traducir sin problemas. De momento me mantendré en el mismo entorno de desarrollo, porque es el mismo que usé en mis tiempos de Pascal y estoy familiarizado con él.

El lunes estuve buscando mi código. Tuve que ir a buscarlo a mi viejo portátil. Después de seis años y dos incidentes de disco duro pude recuperar casi todo. Tras examinar los archivos recuperados me dí cuenta que las últimas versiones, las más avanzadas, faltan. Otras partes son tan pobres e ineficientes que he decidido reescribirlas. Así que el martes me dediqué a reescribir el sistema de movimiento por salas después de volver del trabajo. He decidido empezar por éste porque los pocos ejemplos que me he encontrado me han dado un poco de miedo... cuando empecé no me importaba cargar ciegamene contra los problemas aunque mi conocimiento fuera pobre, y el código que he encontrado lo refleja. La nueva versión és más simple, ocupa menos, es más legible y es más eficiente. Otra cosa, este post ha estado casi listo desde el martes por la noche, pero un malvado 403 ha evitado que lo publicara. Como ya he comentado, tengo que reescribir parte y eso significa que no habrá una publicación de una sola tirada, sino más bien por partes. De esta manera, a parte de tener más tiempo para estudiar código y hacer cambios también lo puedo plantear como un tutorial. Bueno, empecemos:

PARTE 1: Movimiento básico

En esta parte (muy básica), se implementa de manera muy sencilla el movimiento por salas. Volveremos a esta parte más tarde, cuando se haya avanzado en otras partes, para hacerla más compleje e interesante.

Código: Seleccionar todo

location = record
    region, room: byte;
    name, description: string;
    adjacent: directions;
end;

Esto es el tipo de datos estructurados que uso para el sistema de desplazamiento. No es mínimo, si se quisiera hacer espartano, sólo la última línea del registro sería necesaria para su funcionamiento, pero si el nodo no contiene información tampoco se puede probar nada. A medida que el proyecto avance se van a añadir algunas cosillas.

Código: Seleccionar todo

directions = record
    options: byte;
    choices: array[1..6] of direction;
end;

Esto es una pequeña lista basada en array, contiene las direcciones de las salas adyacientes. Si no contiene ninguna, el primer campo debe ser 0 (y lo es cuando se inicializa).

Código: Seleccionar todo

direction = ^location;

player = record
    currentLocation: direction;
end;

Finalmente, los otros tipos definidos para montar el sistema básico es el tipo puntero para la sala y un registro que contiene variables del jugador. De momento sólo he definido la posición (el puntero a la sala) en que se encuentra, aunque otros campos se añadirán en el futuro.

Ahora toca definir funciones y métodos varios.

Código: Seleccionar todo

procedure printLocation(player: player);
procedure printChoices(player: player);
procedure move(var player: player; choice: byte);
function  createDirection(region, room: byte; name, description: string): direction;
procedure connectRoom(var originRoom: direction; destinationRoom: direction);
procedure connectRoomBidirectional(var room_A, room_b: direction);

"printLocation" escribe los datos propios de la sala en la que el jugador se encuentra. "printChoices" escribe en pantalla los nombres de las salas adyacientes. "move" cambia la sala en la que se encuentra el jugador. "createDirection" crea una nueva sala y devuelve un puntero hacia ella. "connectRoom" añade el puntero de una sala en la lista de adyacientes de otra sala, funciona solo en una dirección, lo que es conveniente. "connectRoomBidirectional" añade el puntero de cada una de las dos salas que se pasan como parámetro en la lista de adyacientes de la otra, de manera que la conexión resulta bidireccional.

Definido esto, se procede a la implementación.

code_1.png
code_1.png (39.77 KiB) Visto 444 veces

code_2.png
code_2.png (33.89 KiB) Visto 444 veces


Esto no es un programa, sino una "unit", que es el nombre que reciben las librerías de Pascal. Un RPG, incluso el más sencillo, requiere de un numero bastante elevado de registros, listas y otros datos estructurados, además de bastantes métodos y funciones. Separando la definición de tipos y la lógica del programa en sí mejora la lectura en el programa y permite que distintos programas (como programas de pruebas o ejemplos básicos) puedan usarlos sin tener que reescribirlo todo otra vez.

Código: Seleccionar todo

program MovementTest;
uses RPGLogic, crt;

var
   player: player;
   well, stairs: direction;
   choice: byte;
begin

   player.currentLocation := createDirection(1,1,'Starting Room','Nothing worth to be seen...');
   well := createDirection(1,2,'Well', 'Smell is awful!');
   stairs := createDirection(1,3,'Stairs', 'Some old and fragile stairs... They seem dangerous buuuut...');

   connectRoom(player.currentLocation, well);
   connectRoomBidirectional(player.currentLocation, stairs);
   connectRoomBidirectional(well, stairs);

   repeat
         clrscr;
         printLocation(player);
         printchoices(player);
         choice := inputDirection(player);
         if choice > 0 then
            move(player, choice);
   until choice = 0;
end.

Esto es el programa de prueba. La entrada de datos está ejecutando el futuro comando "go" permanentemente, pero sólo para ilustrar ya sirve. Voy a recuperar código para hacer una entrada de datos más decentilla la próxima vez. El programa es un ejemplo sencillo de navegación usando vínculos unidireccionales y bidireccionales. Tanto la librería como el programa compilan con Dev-Pascal. Si hay alguna cosa que no se entienda, no dudéis en preguntar. Si hay alguna sugerencia, idea o mejora que se quiera proponer soy todo oídos. -thumbup

También tenéis disponibles los archivos, por si queréis compilar.
Movement.rar
(1.34 KiB) Descargado 4 veces


Saludos!

Avatar de Usuario
WhatIsAMan
Mensajes: 435
Registrado: 10 Dic 2017 17:06
Ubicación: El castillo invertido
Agradecido : 123 veces
Agradecimiento recibido: 124 veces

Re: Text-RPG para Pascal

Mensajepor WhatIsAMan » 26 Ago 2019 22:49

Buenas noches!

Por si alguien empezaba a pensarlo: no, no me he muerto -no. Mala hierba nunca muere -laughing. Lo que pasa es que desde que he empezado a trabajar me he vuelto silencioso en todas partes. Supongo que tengo que volverme a acostumbrar a darle al lomo.

Volviendo al proyecto, tiene muchos cambios. En primer lugar, mejoré la manera en la que se visualiza por lo que es más fácil de seguir. Luego, implementé el sistema básico de comandos. Está sucio y tengo que mover algunas cosas, así como crear uun sistema para destruir todos los nodos generados al vuelo (ahora mismo no lo controlo y debería). También debería asignar nuevos nombres a algunas de mis librerías, que heredan su nombre actual de ficheros de hace seis años dónde todo estaba junto. Siento no dar detalles esta vez, pero me siento bastante cansado.

Cómo en el último post, esto también compila usando Dev-Pascal.

Saludos!
Adjuntos
Command.rar
(3.79 KiB) No descargado aún


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado