francisco jesus ruiz pons ©. Con la tecnología de Blogger.
Mostrando entradas con la etiqueta Programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programacion. Mostrar todas las entradas

12/4/13


La verdad es que estuvo muy bien, aprendi mucho, conoci mucha gente y he conseguido informacion e ideas para explicar esto de los videojuegos de una forma mas completa.

Las 2 primeras ponencias me las perdí porque nos perdimos de camino(era a unas 2 horas de valencia sin perderse). Estuvimos pateando Vinaros durante mucho rato. Las 2 ultimas ponencias tambien me las perdí, tenia que volver a valencia a tiempo de llegar a clase de inteligencia artificial.


Voy a resumir un poco las 3 ponencias que vi:

Arte conceptual por Vicente Molina (describir como va a ser el juego en imagenes, dibujos rapidos).

Es muy importante un buen arte conceptual, porque cuanto mas detallado esta, mas facil es luego hacer el juego. Es como pasar de un libro a una pelicula. Cuanto mas detalladas son las descripciones, cuanto mas explican como es una cosa, mas facil es luego de representar.


E-sports por Arturo Castello (deportes electronicos).

No, no es jugar al futbol o baloncesto en la consola. Es todo lo que genera la competicion: partidos de videojuegos competitivos en los que participan equipos enfrentados, retransmitido por los medios y visto por millones de espectadores. No es muy diferente del futbol en esto ¿No? Hablare de esto en otras entradas, porque tiene mucha tela.


Prensa del sector de los videojuegos por Antonio Santo.

Otro tema muy largo y con mucha miga del que hablaré en futuras entradas extendiendome mas. Hay muchos tipos de prensa: criticas, guias, recomendaciones, rumores, etc... Y no es toda esta prensa exclusivamente para gamers(jugones). Hay quien tambien intenta llegar a los que no saben que es y como funciona esto de los vieojuegos, quienes creen que solo es una perdida de tiempo dedicarse a estudiar o trabajar en el desarrollo de estas completisimas obras de arte. No me extiendo mas, me lo guardo para otras entradas.


Además tuve la suerte de conocer a varios alumnos de la universidad Jaime I de acstellon, donde este año por promera vez se ha añadido un grado de videojuegos, el primero en España. No se muy bien lo que estudian, o a que perfiles profesionales estan orientados, porque por lo que he hablado con ellos, han juntado los perfiles de programador y artista en la misma aula. Una hora pueden estar haciendo dibujo y a la siguiente programando en lenguajes de bajo nivel(ensamblador).

Tengo mucha curiosidad por saber que y como se estudia en la carrera publica de videojuegos en España. A ver si consigo que alguno de estos alumnos se anime y haga alguna entrada en el blog contandonoslo.

6/1/13

Feliz año, estas navidades el blog ha estado algo inactivo, por compromisos familiares, avanzar con los proyectos de clase y demás. Pero aquí viene una entrada nueva.

Esta entrada es un poco mas técnica, para programadores. Voy a subir y comentar la practica que nos han mandado hacer en navidad para la asignatura de bajo nivel.

Programación de bajo nivel es programar en un lenguaje mas cercano a la maquina, no solo el lenguaje, también las instrucciones que se utilizan, lo que implica conocer la maquina sobre la que se va a programar.

Parte de lo que se nos pide para esta practica es:


-Que esté libre de corrupciones de memoria
- Que no abuse del espacio de pila
- Que no use recursos de lenguaje C poco portables

- Ausencia de llamadas innecesarias a librerías matemáticas en runtime
- Ausencia de reservas y liberaciones de memoria en runtime
- Uso de inst. rápidas en lugar de otras más lentas o potencialmente lentas
- Uso correcto del código inline
- Uso de enteros o coma fija en lugar de coma flotante
- Uso eficiente de la memoria

De entre la lista de efectos que nos daban a elegir, yo he elegido este:
Esfera de puntos rotando sobre varios ejes.

El lenguaje para la practica es C y la plataforma es PC.

He hecho 2 versiones, una es en coma flotante(esfera roja) y la otra en coma fija(esfera azul) en formato 24:8(24 bits para la parte entera y 8 para la parte fraccionaria).



Si hubiese rotado con matrices, tendría que hacer multiplicación de matrices, y eso son muchas operaciones.
En lugar de eso, he realizado las rotaciones utilizando cuaterniones.

La mayor parte del trabajo se realiza en los inner loops(la parte interna de los bucles que se van a repetir muchas veces en cada fotograma) ya que no es lo mismo optimizar instrucciones que se van a ejecutar 1 vez por fotograma que optimizar otras que se ejecutan mil o dos mil veces cada fotograma.

No voy a comentar las operaciones en coma fija o como operar con cuaterniones porque ya hay muchos sitios que hablan de lo mismo, pero si voy a hablar de una cosa, los saltos condicionales.

Los procesadores actuales, tienen un sistema de predicción por el cual si los saltos condicionales salen siempre igual, le cuesta muy poco, pero si sale un resultado diferente en cada fotograma, le cuesta muchísimo.

Pero, si hay que escribir en una pantalla, y la esfera puede tener puntos fuera de la pantalla, ¿como se puede hacer sin un condicional?

La idea que se me ocurrió es la siguiente:
w1 es la longitud de la pantalla menos uno(width -1), h1 es la altura de la pantalla menos uno(height -1).

#define Max(A,B) ((B & ((A-B) >> 31)) | (A & (~((A-B) >> 31))))
#define Min(A,B) ((B & (~((A-B) >> 31))) | (A & ((A-B) >> 31)))

   color = 0x0000ccff; // se carga el color azulado
#ifdef noifs
   xp=Max(xp,0);//si la x proyectada es menor que cero, la pongo a cero
   xp=Min(w1,xp);//si es mayor que la longitud, se situa a la longitud maxima
   yp=Max(yp,0);//si la y proyectada es menor que cero, la pongo a cero
   yp=Min(h1,yp);//si es mayor que la altura, se limita a la altura maxima

//con esto se consigue que en lugar de pintar fuera de los limites, pinte en los bordes, pero
//como no es muy bonito ver puntos raros en los bordes
// voy a hacer que si pinta en un borde pinte negro        

//ahora se calcula una mascara que sera todo ceros si esta pintando en borde
// y como cualquier numero multiplicado por cero, es cero, si esta en algun borde, pintara negro
   color  = color & ( (((-xp)>>31) & ((xp-w1)>>31) & (((-yp)>>31) & ((yp-h1)>>31) ); 
        
 #else 
   //Si la x o la y proyectadas quedan dentro de la pantalla se pinta
   if (( xp >= 0) && (xp < w) && (yp >= 0) && (yp < h))
 #endif
     pixels [ xp + (yp * pitch)] = color;


El código compila en plataformas Unix y Windows.

                                                            Fuentes    Ejecutable




12/12/12

Escribo esta entrada porque hay una cosa que no se suele saber. Yo mismo, no tenia ni idea de como era el desarrollo de un videojuego el día que alegremente fui a la ESAT, y muy feliz dije: quiero aprender a hacer videojuegos.

El día de mi entrevista con el director de la carrera de programación, le dije que quería hacer mi propia versión del mario creyendo que hacer un videojuego era una tarea imposible, a día de hoy, he ido desmintiendo muchos mitos, y para que no le pase a mas gente, lo pondré aquí, y si alguien lo lee, pues de eso se libra.

Uno de esos "mitos" es que no se conoce como se estructura un equipo de desarrollo de videojuegos.

Una metáfora que usa mi profesor de programación, es que un equipo de desarrollo de videojuegos es como una mesa que se sostiene sobre 4 patas: programación, arte, diseño y producción (si, diseño y arte no son lo mismo).

Diseño: no son diseñadores gráficos, como se podría suponer, el diseño de un videojuego es concebir de forma conceptual el videojuego como juego. Establecer las reglas, las mecánicas, el diseño de los niveles del juego(si los tuviese), ejemplos de mecánicas: "el jugador puede saltar, moverse hacia los lados y agacharse", ejemplos de reglas: "si el jugador choca con una seta marrón desde arriba, la seta marrón muere", "si el jugador cae por un precipicio, muere", "si el jugador golpea un bloque de abajo a arriba, este se rompe", etc...

Arte: se encargan de hacer visibles las ideas del diseñador. Si el diseñador quiere que un fontanero bigotudo salte sobre setas marrones, coma setas rojas y verdes, pueda disparar fuego, y mas cosas del estilo, los artistas son los que dibujan/modelan/texturan todo lo necesario para que ese concepto de juego sea visible.

Programación: aportan la tecnologia necesaria para llevar a cabo todo esto, si el diseñador necesita un sistema de maquetado para ver como quedarían los niveles, o probar mecánicas  El artista necesita una herramienta especial para hacer distintos efectos sobre sus imágenes. la parte de programación les proporciona las herramientas necesarias. Además, se encargan de que lo que ha dicho el diseñador sea posible: que al chocar de arriba a abajo con una seta, nuestro fontanero gane puntos y la seta desaparezca. que si tiene tamaño grande y golpea un ladrillo, en vez de seta salga una flor, y al tocarla se vuelve blanco y dispara, que dispare, etc...

La ultima pata(pero probablemente la mas importante) es la Producción  Son los encargados de empaquetar ese juego y venderlo. ¿Qué hubiese sido del gran super mario bros si no hubiese tenido detrás un equipo de producción muy grande? no lo hubiera conocido nadie. Hoy en día, nadie sabría que es el mario, y hubieran tenido un videojuego completo, y nadie lo habría comprado.


Siento que haya quedado tan larga la entrada, pero espero que ahora se entienda un poco mejor como se estructura un equipo de desarrollo videojuegos ( muy por encima).

11/12/12



En la carrera de programación de videojuegos, hay algo básico que aprender. Hay que aprender a programar. Pero no solo programar, hay que programar bien, de forma eficiente.

Yo estudie el ciclo formativo de grado superior DAI(Desarrollo de aplicaciones informáticas), donde nos enseñaron a programar en java, php, html, xhtml, sql, css2 y 3. Cuando llegué a primero de carrera, yo creía saber programar, hasta que me pusieron delante un lenguaje como C.

Los lenguajes que yo sabia, eran orientados a objetos, o a datos. C es un lenguaje imperativo, procedural, muy diferente a los demás. El primer año de carrera lo pasamos aprendiendo geometría computacional, sistemas operativos(el funcionamiento interno), algo de web, bases de datos, arquitectura del hardware y sobre todo, a programar en C.

Al final, conseguí desaprender lo que sabia de programación para aprender a programar de forma diferente, ya que los programadores de videojuegos tienen que hacer cosas que los programadores de gestión ni se plantean. Después de un año estudiando, todos los compañeros de clase(los que veniamos de ciclos formativos, que algo sabiamos de programar y los que venian de bachiller, que no habian programado en la vida) eramos capaces de hacer practicas medianamente complejas.


Dejo el proyecto de final de curso de programación para que lo veais. Es una aplicación de gestión de una empresa de autobuses, implementando la base de datos en ficheros. Dejo el programa y los fuentes, por si a alguien le sirven de ayuda.

 Link a los fuentes.                 Link al ejecutable.