Domingo 3 de Septiembre de 2006 a las 23:58
A día de hoy (03/09/2006) esta es la funcionalidad que esta finalizada en motor de aventuras gráficas:
Y poco más. Todavía me queda un largo camino hasta finalizar el proyecto.
Ahora mismo estoy terminando de desarrollar el analizador sintáctico y posteriormente me pondré con el semántico. Mi prioridad es finalizar cuanto antes el lenguaje de script.
Posteado en Motor Aventura Gráfica | Sin Comentarios »
Domingo 3 de Septiembre de 2006 a las 18:29
Después de estar dos días cerrado, por fin este sitio vuelve a estar en funcionamiento, esta vez con dominio propio.
El proveedor de hosting me ha cerrado la página sin dar ningún tipo de explicación ni responder a ninguno de los mails que le he enviado.
Para evitar que esto volviera a suceder en un futuro me he decidido por tener un dominio propio y un hosting de pago que me de más seguridad de que no me dejarán sin servicio de buenas a primeras.
Restaurando los datos de la base de datos he tenido algunos problemas con los acentos debido a las diferentes codificaciones de los caracteres, pero afortunadamente también está solucionado este tema.
He de pedir a aquellos que tengan enlazado este sitio que actualicen los links por favor.
Posteado en General | 6 Comentarios »
Miércoles 30 de Agosto de 2006 a las 23:54
Este pequeño juego lo desarrollé hace ya bastante tiempo, a finales del 2004. Esta programado en Visual Basic .Net con el framework 1.1.
No tiene nada de especial, es el típico tetris. Permite establecer el nombre del jugador y guarda las mejores puntuaciones. Según se van consiguiendo puntos se va subiendo de nivel con lo que la velocidad de caída de las fichas aumenta y por lo tanto la dificultad. Pese a su sencillez es bastante adictivo.
Solo cuenta con 1178 líneas de código. Para dibujar los gráficos se utiliza GDI+ usando la técnica del doble buffer. El juego no contiene más imágenes que la del icono del ejecutable ya que los gráficos son cuadrados y líneas.
Tetris.
Posteado en Otros Proyectos | 1 Comentario »
Martes 29 de Agosto de 2006 a las 23:59
Hoy hace un mes desde que se inauguró el blog, y haciendo balance, creo que resultó ser una buena idea lo de crear un blog donde ir escribiendo los progresos que voy realizando en el proyecto que estoy desarrollando (un motor para aventuras gráficas). Me está motivando para seguir desarrollando y no abandonar el proyecto, cosa que en un proyecto tan ambicioso como este no sería raro que sucediese y que ya me ha pasado con un proyecto anterior que he abandonado y retomado por lo menos en cinco ocasiones.
También he de reconocer que el mantener el blog me lleva bastante tiempo que podría dedicar a desarrollar. De hecho probablemente le haya dedicado más tiempo a configurar el blog y escribir post que al desarrollo del proyecto. He de decir que esto de mantener un blog es bastante adictivo
En estos diecisiete días (descontando las vacaciones) he publicado diez post.
De momento, y pese al pequeño paréntesis de las vacaciones, estoy bastante contento con el ritmo de trabajo que estoy llevando y con como evoluciona la aplicación. Sobre todo teniendo en cuenta el poco tiempo del que dispongo.
Posteado en General, Blog | 5 Comentarios »
Lunes 28 de Agosto de 2006 a las 23:53
A mí siempre me ha resultado interesante contar las líneas que tienen los proyectos que estoy realizando e ir viendo como evolucionan las dimensiones de los distintos módulos y clases.
Hace tiempo desarrollé un add-in para el Visual Studio 2003 que realizaba esta tarea. Pero no era tan completo como otros existentes.
El más interesante que he encontrado de los gratuitos es el Line Counter que puede descargarse desde aquí y que se puede utilizar con todas las versiones del Visual Studio.
Muestra las líneas por fichero, por proyecto y el total de la solución, permitiendo filtros para obviar ciertos ficheros o para tener en cuenta solo un determinado proyecto. Te muestra el número de líneas, las que son solo de código, las que son solo de comentarios, las que son de código y comentarios y las que están en blanco. También te muestra los porcentajes que representan cada una de ellas sobre el total.
Pagina web de la aplicación
Posteado en General | 3 Comentarios »
Domingo 27 de Agosto de 2006 a las 23:35
Este artículo es la continuación de:
Creando un analizador léxico (Parte I)
Trás definir todos los posibles tokens procederemos a la implementación del analizador léxico que los reconocerá.
El analizador antes de poder reconocer los tokens debe fraccionar el código fuente en las palabras que lo componen, teniendo en cuenta para ello los separadores (salto de línea y espacio en blanco). Además se debe tener en cuenta que los espacios en blanco dentro de una cadena no deben ser tenidos en cuenta.
Una vez separadas todas las palabras existentes en el código fuente se deben intentar reconocer cada una de ellas. Para ello nos serviremos de autómatas finitos deterministas, que desarrollaremos según lo expuesto en un artículo anterior, para los componentes léxicos más complejos. Para aquellas palabras cuyo reconocimiento es trivial, como los operadores o las palabras reservadas, simplemente compararemos con dichas elementos. Como se muestra en el siguiente fragmento de código que es utilizado para reconocer si una palabra es una constante lógica o no.
VB.NET:
-
Private Shared Function EsConstanteLogica(ByVal palabra As String) As Boolean
-
Return palabra.ToUpper = "VERDADERO" Or palabra.ToUpper = "FALSO"
-
End Function
El analizador recibe como parámetros la ruta de un fichero que contiene el script, una cadena con el script o un array de cadenas conteniendo cada una línea del script. Como salida genera una colección de palabras o componentes léxicos. Para cada uno de ellos se proporciona la siguiente información:
- Palabra en si tal y como aparece en el script
- Tipo de componente léxico
- Componente sintáctico con que se corresponde y que será utilizado posteriormente por el analizador sintáctico
- Linea y columna del script en la que aparece la palabra. Utilizado para mostrar los errores resaltándolos en el código del script y notificar en que punto se ha producido el posible error.
El analizador reconoce los siguientes componentes léxicos:
- Identificador
- CTE_Cadena
- CTE_Numerica
- CTE_Logica
- Palabra_Reservada
- Simbolo_Especial ",", "(" y ")"
- Operador
- Salto_Linea
- Fin_Fichero
- Erronea
La siguiente entrada del analizador léxico:
n1 "hola" "hño l!'a" "\\as" "ac\\as\"11\"22\"dd fas" c2
fin
variable 3 * a verdadero Y
fas"dfas "as"asf"
"a\aas" 1234.34
c3 c3 "AAAA BB
CC"
"fasdfs\"
numerica 3 / 456 <> != 3 O
fadvariable c3
si
falso
cadena
( , 3 )
produce la siguiente salida:
Salida del analizador léxico.
Creando un analizador léxico (Parte I)
Posteado en Motor Aventura Gráfica, Artículos | 5 Comentarios »
Domingo 27 de Agosto de 2006 a las 2:06
Este artículo versa acerca del desarrollo de un analizador léxico. Debido a su tamaño ha sido dividido en dos partes, siendo este la primera parte y esta la segunda.
La función de un analizador léxico es examinar el código fuente y reconocer las palabras o tokens que formen parte del lenguaje así como determinar si hay elementos que no pertenecen al lenguaje. Como resultado del análisis léxico se devolverá la lista de tokens que forman el código fuente.
Lo primero que debemos hacer es definir los tipos de palabras que compondrán el lenguaje así como las reglas para formar palabras
En el lenguaje que estoy creando he identificado los siguientes tipos de palabras:
- Identificadores
- Cadenas
- Valores o constantes numéricas
- Valores o constantes lógicas
- Palabras reservadas
- Símbolos especiales como ",", "(" y ")"
- Operadores
- Saltos de línea
- Fin de fichero
Dicho lenguaje pretende ser bastante sencillo y fácil de utilizar. Por ello se utilizan palabras en castellano en vez de en ingles como la mayoría de lenguajes de programación.
Ahora pasaremos a definir las reglas de formación de cada uno de esos tipos de palabras. Hay tipos de palabras que se definen por enumeración como son los operadores, los símbolos especiales, las palabras reservadas, etc. Para definir otros tipos de tokens utilizaremos autómatas finitos deterministas como ya se explico en el artículo Autómata finito determinista para reconocer constantes numéricas.
Definiciones
- Operadores:
- + , -, *, /, =, !=, <, >, >=, <=, Y, O
- Palabras reservadas:
Variable: para declarar variables
Constante: para declarar constantes
Logica: tipo de dato
Cadena: tipo de dato
Numerica: tipo de dato
Si: Forma parte de la estructura condicional
Entonces: Forma parte de la estructura Condicional
Fin: Forma parte de la estructura Condicional e Iterativa
Mientras: Forma parte de la estructura Iterativa
- Símbolos especiales:
- Constantes lógicas:
- Constante cadena:
Secuencia de caracteres delimitados por las comillas (“) Si la cadena contiene el carácter “ o \ debe ir precedido del carácter de escape \
A.F.D. Reconocedor de cadenas.
- Constante numérica:
Una constante numérica debe estar formada por al menos un dígito, puede ir precedida o no por el signo y puede tener o no decimales. Si contiene el punto decimal debe tener al menos un dígito en la parte de los decimales.
A.F.D. Reconocedor de ctes numéricas.
- Identificadores:
Una letra seguida una secuencia de 0 o más letras o dígitos o el signo _
A.F.D. Reconocedor de identificadores.
Continuación
Creando un analizador léxico (Parte II)
Posteado en Motor Aventura Gráfica, Artículos | Sin Comentarios »
Viernes 25 de Agosto de 2006 a las 0:01
El primer ordenador que tuve, con unos 8 años, y del que guardo buenísimos recuerdos fue un MSX: el Spectravideo SVI 728. Gracias a este ordenador se despertó en mi la pasión por la informática y la programación. Posteriormente, cuando tuve que decidir a que profesión dedicarme, fue decisivo para que me inclinara por dedicarme a la programación.
La de horas de mi niñez que pasaría frente a su pantalla azul haciendo mis primeros pinitos en el mundo de la programación. La de veces que habré leído aquello de "Syntax Error". El MSX se programaba en Basic, un sencillo lenguaje en cuyos programas abundaban los GOTOS, tan denostados hoy en día y que suenan tan lejanos. Recuerdo cuando descubrí que existía una sentencia llamada GOSUB que permitía hacer algo parecido a los procedimientos.
En la pagina de proyectos se pueden ver algunos de los juegos que realice en BASIC con el MSX.
Además realice alguna pequeña aplicación de gestión. Una de ellas permitía gestionar una biblioteca doméstica.
También guardo gratísimos recuerdos de esos grandes juegos que han hecho historia sin tener los gráficos sumamente realistas de los actuales. Juegos como Batman, Head Over Hells, Pac man, Sea Hunter, La abadia del crimen, Army moves, Navy moves, Goody, Arkanoid, Las tres luces de Glaurung, Livingstone supongo y una larga lista de títulos tremendamente adictivos.
Este era el aspecto que tenía:
Spectravideo SVI 728.
Un par de enlaces sobre este ordenador, en uno de ellos hay un error ya que la fecha de lanzamiento tengo entendido que fue en 1983.
http://www.zonadepruebas.com/modules/wfsection/article.php?articleid=586
http://www.museo8bits.com/svi728.htm
Posteado en General | 6 Comentarios »
Domingo 20 de Agosto de 2006 a las 23:06
En este breve artículo voy a explicar el proceso de creación de un sencillo autómata finito determinista para reconocer constantes numéricas. Este autómata forma parte del analizador léxico que estoy implementando para el lenguaje de script, que utilizaré en el motor de aventuras gráficas que estoy desarrollando.
Al final del artículo incluiré el código del autómata en su totalidad.
Lo primero que debemos hacer es definir lo que será una constante numérica valida. Una constante numérica debe estar formada por al menos un dígito, puede ir precedida o no por el signo y puede tener o no decimales. Si contiene el punto decimal debe tener al menos un dígito en la parte de los decimales.
Autómata finito determinista reconocedor de constantes numéricas.
Se trata de un autómata conexo ya que todos los estados son accesibles desde el inicial. Es un autómata determinista, ya que desde un estado y para una determinada entrada solo existe transición a un estado, nunca a varios estados.
Una vez definida la constante numérica formalmente mediante el diagrama de estados anterior, la implementación del autómata es muy sencilla. Debemos definir cuales serán los estados finales (aquellos marcados con un doble circulo en la imagen) y que transiciones son válidas para cada estado según las entradas que reciba y cuales no. Una vez procesados todos los caracteres que forman la palabra, la habremos reconocido como una constante numérica correcta, si no se ha producido ninguna transición no válida y si estamos en uno de los estados finales.
VB.NET:
-
Option Explicit On
-
Option Strict On
-
-
''' <summary>
-
''' Autómata finito determinista que reconoce constantes numéricas. Pueden tener signo inicial y contener
-
''' el punto decimal o no. Si tiene el punto decimal debe tener al menos un digito despues. El 012 se
-
''' considera correcto
-
''' </summary>
-
''' <remarks></remarks>
-
Public Class AFDCteNumerica
-
Private Const ESTADO_FINAL_1 As Integer = 2
-
Private Const ESTADO_FINAL_2 As Integer = 4
-
-
Public Shared Function Reconocer(ByVal p As String) As Boolean
-
Dim estado As Integer
-
Dim correcto As Boolean
-
Dim i As Integer
-
Dim c As Char
-
-
estado = 0 'estado inicial
-
i = 0
-
correcto = True
-
'recorremos todos los carácteres de la palabra
-
While correcto And i <p.Length
-
c = p.Chars(i)
-
-
If Char.IsDigit(c) Then
-
Select Case estado
-
Case 0
-
estado = 2
-
Case 1
-
estado = 2
-
Case 2
-
estado = 2
-
Case 3
-
estado = 4
-
Case 4
-
estado = 4
-
End Select
-
ElseIf c = "."c Then
-
Select Case estado
-
Case 0
-
correcto = False
-
Case 1
-
correcto = False
-
Case 2
-
estado = 3
-
Case 3
-
correcto = False
-
Case 4
-
correcto = False
-
End Select
-
ElseIf c = "+"c Or c = "-"c Then
-
Select Case estado
-
Case 0
-
estado = 1
-
Case 1
-
correcto = False
-
Case 2
-
correcto = False
-
Case 3
-
correcto = False
-
Case 4
-
correcto = False
-
End Select
-
Else
-
correcto = False
-
End If
-
-
i = i + 1
-
End While
-
-
Return correcto And (estado = ESTADO_FINAL_1 Or estado = ESTADO_FINAL_2)
-
End Function
-
-
End Class
Posteado en Motor Aventura Gráfica, Artículos | 4 Comentarios »
Sábado 19 de Agosto de 2006 a las 20:14
Acabo de llegar de las vacaciones. Razón por la que durante lo que va de mes he tenido abandonado este sitio y la programación de la aventura gráfica. Espero continuar su desarrollo, aunque no al nivel que desearía ya que tengo que ponerme ha estudiar para los inminentes exámenes de Septiembre en el poco tiempo libre que tengo tras el trabajo.
Posteado en General | Sin Comentarios »