El bosque encantado [en FreeBASIC]
Descripción del contenido de la página
Juego de aventuras de texto en escrito en FreeBASIC.
Proyecto abandonado. Iniciado en 2010-03-23. 20% completado.
Este proyecto de aventura conversacional, iniciado en marzo de 2010 y actualmente aparcado, es una versión en FreeBASIC de El bosque encantado, escrita por Kevin Jones en el BASIC de la computadora Commodore 64 y publicada a mediados de los 1980 en la enciclopedia Mi computer, página 1478 (Mi computer es la versión española de la enciclopedia Home Computer Course).
El bosque encantado original no tiene nada especial, es una aventura pequeña y sencilla escrita en un BASIC clásico y desestructurado, sin ninguna sofisticación, y rudimentaria incluso para la época... Por eso precisamente era una buena candidata para mi objetivo: familiarizarme de forma fácil con FreeBASIC, un BASIC libre, moderno, compilado y multiplataforma en el que desde hacía tiempo quería realizar algunos proyectos. Hacer una conversión de lenguaje durante la cual cualquier cambio sería una mejora significativa parecía un buen aliciente para aprender las peculiaridades de FreeBASIC.
Pero poco después de iniciar la tarea me empecé a preguntar si hubiera sido más fácil escribir el programa desde cero en vez de partir del código original, que estaba muy desestructurado (como era habitual en ese tipo de BASIC s). Por otra parte creo que, con sus muchos tipos de datos y su necesidad de declarar por duplicado los procedimientos y funciones, Free BASIC se me atragantó... Por todo ello, y porque tenía otros proyectos más interesantes en marcha, siete meses después haber escrito la primera línea, y con el código aún en fase muy temprana, aparqué el proyecto en espera de mejor ocasión para ocuparme de él.
Poco después tuve más suerte con un proyecto paralelo de intención similar, en OPL+ (lenguaje mucho menos potente pero más amigable): El bosque encantado [en OPL+].
Código fuente
Muestro algunos ejemplos del código en su estado 2010-10.
' El bosque encantado de Friburgo
' A simple text adventure in Spanish, written in FreeBASIC.
' Copyright (C) 2010 Marcos Cruz (http://programandala.net)
' Licencia/Permesilo/License: http://programandala.net/license
' This a FreeBASIC port of "El bosque encantado" (for Commodore 64), by Kevin Jones,
' published in "Mi computer" (the Spanish version of "Home Computer Course"), page 1478.
La introducción y el borrador del bucle principal:
' -------------------------------------------------------------
' Intro
tell("Bienvenido al bosque encantado de Friburgo")
print
tell("Al despertarte de un profundo sueño, el suelo del bosque está suave y seco.")
tell("No sabes cómo has llegado hasta aquí pero sabes que, para estar a salvo, debes encontrar el poblado que linda con el bosque.")
print
tell("Miras a tu alrededor tratando de orientarte.")
print
tell("Pulsa cualquier tecla para empezar.")
sleep
cls
' -------------------------------------------------------------
sub main()
' Main loop.
' 2010-03-24 First draft.
randomize
current_location=int(rnd*locations+1)
describe_location()
do
if not special_location() then
get_command()
interpret_command()
if not known_command then
tell("No comprendo.")
end if
end if
loop
end sub
Procedimiento para listar las salidas de un escenario:
sub list_exits(north as byte,east as byte,south as byte,west as byte)
' List the given exists.
' Every parameter is a location or zero.
' 2010-03-23 First version.
if north or east or south or west then
message="Hay salida"
if (north>0) + (east>0) + (south>0) + (west>0) < -1 then
' there's more than one exit
message=message+"s" ' plural
end if
message=message+" hacia "
if north then
message=message+exit_join(0,east or south or west)+"el norte"
end if
if east then
message=message+exit_join(north,south or west)+"el este"
end if
if south then
message=message+exit_join(north or east,west)+"el sur"
end if
if west then
message=message+exit_join(north or east or south,0)+"el oeste"
end if
tell(message+".")
end if
end sub
Impresión de textos formateados:
sub tell(text as string)
' Print a text without breaking words.
' 2010-03-23 First version.
dim word_start as integer = 1
dim word as string
dim character as integer
text=text+" "
for character=1 to len(text)
if mid(text,character,1)=" " then
word = mid(text,word_start,character-word_start)
if len(word)>(columns-pos) then
print
else
if pos>1 then
print " ";
end if
end if
print word;
word_start = character+1
end if
next character
print
end sub