martes, 18 de julio de 2017

PROGRAMACIÓN DE VIDEOJUEGOS

DEFINICION Y TIPOS DE VIDEOJUEGOS
Es una aplicación interactiva orientada al entretenimiento que, a través de ciertos mandos o controles, permite simular experiencias en la pantalla de un televisor, una computadora u otro dispositivo electrónico.
Los videojuegos pueden ser muy distintos entre sí, tanto en complejidad como en calidad gráfica y en temática. Veamos a continuación algunos de los géneros principales:
Plataformas: se trata de una experiencia que gira en torno a desafíos de tipo físico, que exigen un gran nivel de precisión por parte de los jugadores para avanzar a través de complejas estructuras, generalmente enfrentándose a diversos enemigos.
De disparos: un género amplio, al cual pertenecen tanto algunos títulos de guerra como de naves espaciales.
De aventuras: son juegos en los cuales la historia es la protagonista. Deben ser construidos en base a una rica narrativa, que atrape poco a poco al jugador en el mundo virtual, y le transmita la necesidad de resolver una serie de misterios.
De rol: suelen confundirse con los juegos de aventuras pero, a diferencia de estos últimos, su foco son los personajes y su evolución a lo largo de la historia. Este género es especialmente popular en Japón, aunque existen muchas comunidades de jugadores de rol en todas partes del mundo.
Deportes: Si bien su nombre parece decirlo todo, existe una línea muy delgada entre este género y el de simulación. Estos dos, a su vez, están emparentados con el género de acción; todo depende del grado de realismo de la experiencia y del tipo de interacción que se espere del jugador, entre otros factores.

AREAS DE DESARROLLO DE VIDEOJUEGOS
Programación del motor: Son los encargados de implementar la base sobre la que se sustenta el videojuego. Comunicación con el sistema operativo, gestión de memoria, gestión de cadenas, gestión de recursos, etc. Son necesarios grandes conocimiento de la plataforma para la que se programa, algoritmia y complejidad, opimización y gestión a bajo nivel.
Programación gráfica: Su misión es lidiar con los diferentes apis gráficas como DirectX y OpenGL. Conocimienos de dichas apis, y matemáticas sobre todo álgebra y geometría.
Programación de física: Se encarga de emular los comportamientos físicos del videojuego. Conocimientos de matemática vectorial y física dinámica y mecánica.
Programación de inteligencia artificial: Es la encargada de hacer nuestros enemigos (o nuestros aliados) inteligentes. Conocimientos de lenguajes de script, matemáticas y algoritmos de IA como pathfinding, máquinas de estados finitos o redes neuronales.
Programación de red: Se encarga de la parte multijugador, servidores y todo lo que sea conectar una máquina con otra.

Programación de Gameplay: El equipo que se encarga de programar la lógica del juego, sus reglas. Conocimientos de lenguajes de script y uso de las partes desarrolladas por los otros equipos.

LENGUAJES PARA PROGRAMAR VIDEOJUEGOS

Lenguajes de programación de videojuegos web

A pesar de que la mayoría de los juegos de Facebook siguen usando Flash, el futuro está en el JavaScript.
El problema de Flash es que Adobe ya no dará soporte a dispositivos móviles y recientemente anunció que no desarrollará ActionScript 4, por lo que aprenderlo tiene cada vez menos sentido.
Para comenzar podéis leer el clásico, JavaScript: The Good Parts, de Douglas Crockford (2008).

Lenguajes de programación de videojuegos para PC o consolas

Deberás empezar programando en lenguaje C#. Es un buen lenguaje para que te inicies en la programación de videojuegos, existen librerías y frameworks muy maduros que te facilitarán el aprendizaje.
Hay mucha gente que recomienda que aprendas C++, pero no te será necesario salvo que te especialices en el desarrollo de motores de gráficos o motores de inteligencia artificial.

Lenguajes de Programación  de juegos para móviles

Para crear juegos para smartphones Android el lenguaje rey es el Java, por encima del Python.
Si tu trabajo se va a centrar más en dispositivos que tienen incorporado el sistema Windows, entonces en lenguaje escogido será el C#, estándar de Microsoft.
Por último, en los iPhones e iPads y su iOS, tendremos que programar en Objective-C o Swift, el futuro para la casa de la manzana mordida.

OTROS EJEMPLOS DE LENGUAJES
C: SDL
C++: SFML
C#: XNA / MonoGame
Python: PyGame
Java: libgdx, spiller
Ruby: Gosu
Flash: Flixel
Lua: Love2D
ESTRUCTURA DE BASE DATOS
Es un sistema que almacena datos que están relacionados. Es un repositorio en donde guardamos información integrada que podemos almacenar y recuperar. Un conjunto de información almacenada en memoria auxiliar que permite acceso directo y un conjunto de programas que manipulan esos datos 
 MySQL
*  XML
*  SQL
APIS GRAFICAS
DirectX


 DirectX esta compuesto de 7 componentes: DirectGraphics (incluye 3D y 2D), DirectInput, DirectSound, DirectPlay, DirectShow, DirectMusic. Y ha venido ganando mucha popularidad en los últimos años entre los programadores de videojuegos, en especial desde que Microsoft comenzó a mejorar la parte de Direct3D haciéndolo más amigable y eficiente, y se ha vuelto una seria competencia para OpenGL. Sin embargo, Algunos juegos programados usando DirecX son "Age of Empires", "Close Combat" y "Flight Simulator", además de todos los juegos para el Xbox. Microsoft desveló en la Game Developer´s Conference que su proyecto XNA consistirá en un Visual Studio en versión para el desarrollo de videojuegos.
VENTAJA.
Una de sus principales ventajas es que no está hecho solamente para la parte gráfica, sino que puede manejar toda la multimedia de la computadora como sonidos, música, dispositivos de Entrada/Salida como teclado, joystick, y varias otras cosas más.
DESVENTAJA.
DirectX tiene una gran desventaja: no es portable, es decir, una vez terminado de programar el juego estará condenado a trabajar solamente en Windows, y cuando se quiera convertir para que correrá en otras computadoras que usen Mac, Linux, o consolas, hay que hacerle muchos cambios al código.

OpenGL

Librería Grafica Abierta: Creado por Silicon Graphics en 1992, es el principal ambiente de programación para desarrollar aplicaciones gráficas que existe. Es multiplataforma (habiendo incluso un openGL para móviles). Esta diseñado para usarse en una gran variedad de sistemas operativos sin tener que modificarlo o modificándolo muy poco, esto significar una gran ventaja para cualquier desarrollador al abarcar el mayor mercado posible. Además su arquitectura fue pensada para poder evolucionar conforme avanza el tiempo, de modo que pueda adaptarse con facilidad a las novedades que van surgiendo en la industria.

Desde que apareció, OpenGL ha sido un ambiente de programación estable y confiable, y quizás la razón por la que es más conocido es porque fue la primera en ofrecer la posibilidad de desarrollar aplicaciones 3D; fue precisamente con OpenGL que se hicieron los primeros juegos 3D como Wolfenstain y Doom, hoy también es muy usado en juegos como Quake y muchos más.

LIBRERIAS DE VIDEOJUEGOS

Actionscript. Esta es una lista de librerías para desarrollar juegos, la iré modificando para incluir más librerías. Ustedes mismos sugieran sus librerías favoritas en este hilo para incluirlas:
Allegro: Librería en C altamente portable a muchas plataformas que incluye rutinas básicas de videojuegos: gráficos 2D, matemática 3D, sonido y controles.
SDL: Simple DirectMedia Layer está hecho en C y es una librería madura utilizada en grandes proyectos. Loki, una empresa que estuve a principios de 2000 portando juegos a Linux utilizó esta librería para esta tarea.
OGRE: Es una librería open source para hacer gráficos 3D.
Crystal Space: Crystal Space es una librería open source para hacer gráficos 3D en tiempo real. Fue la librería utilizada para hacer Yo Frankie, o también conocido como Project Apricot.
ODE: Open Dynamics Engine (ODE) es una librería en C++ que facilita la implementación de fenómenos físicos en tu juego. Es la librería que se utilizó para implementar la física de World of Goo.
ClanLib: ClanLib Game SDK es una biblioteca de herramientas multiplataforma cuyo principal enfoque se encuentra en la creación de juegos de video. La misma es de código abierto y gratuito para uso comercial, bajo la licencia ClanLib.
Python

Panda3D: Panda3D es una librería open source implementada en Python y C++ por la gente del Entertainment Technology Center, en la Universidad Carnegie-Mellon. Disney utilizó esta librería para hacer el juego online de Pirates of the Caribbean

ENTORNOS PARA PROGRAMACION DE VIDEOJUEGOS


Unreal Engine
Antiguamente, este entorno de desarrollo venía con los propios juegos creados en este editor cuando este salía al mercado, de este modo el jugador que quisiera podría editar los contenidos del juego e incluso los escenarios y crear nuevos modos de juego.

Pero se cambió el modelo de negocio de y ahora se puede descargar de forma gratuita, con el añadido que si tu juego supera los 3.000 dolares de beneficios, a partir de ese momento Unreal se llevaría un porcentaje de los beneficios.
El entorno se parece mucho al de Unity 3D, permitiéndonos agregar formas geométricas al escenario y que después tengan sus texturas, interacciones… Sin lugar a dudas un gran competidor para Unity 3D y muy útil para los desarrolladores y creadores de juegos. 

GDevelop
Es un programa de creación de videojuegos en 2D de código libre. Con este entorno podremos crear juegos para Windows, Linux e incluso para la web utilizando HTML5. 


Al igual que Stencyl, cuenta con una interfaz drag and drop facil de utilizar. En su web podemos encontrar muchos ejemplos y tutoriales para aprender a utilizar esta herramienta perfectamente y de este modo empezar con el proceso de creación.
Lo que hace a GDevelop único y tan sencillo de utilizar son los eventos, ya que estos utilizan una forma de expresar la lógica de nuestro juego sin tener que aprender un lenguaje de programación a fondo.


Unity 3D
Considerada por muchos la mejor herramienta para crear y diseñar un videojuego. Con Unity 3D podremos sacar versiones de nuestro futuro videojuego para Xbox, PC, Linux, HTML5, iOS, Android, Play Station, BlackBerry, Samsung TV y una de las características que lo hace realmente potente es la integración del lenguaje C#.


Este entorno de desarrollo tiene tiene motor de diseño de juegos 3D y otro diferente para juegos 2D. Por último recalcar que dispondremos de una librería muy extensa con documentación con la que poder empezar a aprender cómo iniciarnos en el proceso de creación de un juego básico.

Stencyl
Este software se llamaba originalmente StencylWorks, mientras que en el desarrollo de las últimas versiones para el público se decidió que el nombre se debería acortar llagando a llamarse Stencyl.


Stencyl es una plataforma de creación de videojuegos en 2D. Esta plataforma nos permite crear videojuegos desde Linux, OS X y Windows para varias plataformas como iPhone, iPad, Android, Windows, macOS y Linux.
El método de empleo se basa en el Drag and Drop mediante diferentes bloques con distintas funcionalidades. Sin embargo, para aquellos usuarios más avanzados, también tiene la opción de extender las funcionalidades a través de código.

PyGame
Para finalizar este apartado vamos a presentaros PyGame, el entorno de desarrollo de juegos en Pyton. Tiene una estética muy retro pero sin embargo sus módulos son muy potentes.

Lo cierto es que es perfecto para empezar a programar videojuegos y aprender cómo funcionan las diferentes variables y pantallas. Con PyGame encontraremos más programación que en los anteriores ya que es un requisito indispensable para desarrollar videojuegos.
También puede utilizarse para crear otros programas multimedia o interfaces gráficas de usuario. Herramientas y entornos para avanzados

CryEngine 3
Seguro que os suena este nombre. Esto es porque es el entorno en el que se han creado los juegos de la saga Crysis. Con este editor podremos desarrollar juegos para las plataformas más importantes del mundo incluyendo las consolas.


Tiene muchas herramientas para el desarrollo del juego que van desde el sistema de Scripting Visual a la posibilidad de editar pistas de audio y vídeo para el juego. CryEngine es para uso personal y no comercial, pero si nuestro proyecto prospera, podremos adquirir por Steam una licencia de 9 dólares al mes.




miércoles, 12 de julio de 2017

TESTER

PRUEBAS DE SOFTWARE "TESTING"

También conocidas como (Testing).- son los procesos que permiten verificar y revelar la calidad de un producto software. Son utilizadas para identificar posibles fallos de implementación, calidad, o usabilidad de un programa de ordenador o videojuego. Básicamente es una fase en el desarrollo de software consistente en probar las aplicaciones construidas.
Para determinar el nivel de calidad se deben efectuar unas medidas o pruebas que permitan comprobar el grado de cumplimiento respecto de las especificaciones iniciales del sistema.
TIPOS DE PRUEBAS

PRUEBAS DE VALIDACIÓN

Las pruebas de validación en la ingeniería de software son el proceso de revisión que el sistema de software producido cumple con las especificaciones y que cumple su cometido. Es normalmente una parte del proceso de pruebas de software de un proyecto, que también utiliza técnicas tales como evaluaciones, inspecciones, y tutoriales. La validación es el proceso de comprobar lo que se ha especificado es lo que el usuario realmente quería.
Las pruebas de validación empiezan tras la culminación de las pruebas de integración, cuándo se han ejercitado los componentes individuales. Se han terminado de ensamblar el software como paquete y se ha descubierto y corregido los errores de interfaz.

Tipos de pruebas de  validación

·   Pruebas de aceptación: desarrolladas por el cliente.
·  Pruebas alfa realizadas por el usuario con el desarrollador como observador en un entorno controlado (simulación de un entorno de producción).
· Pruebas beta: realizadas por el usuario en su entorno de trabajo y sin
   observadores.

Características de las pruebas de validación.

·        Se usan la mismas técnicas, pero con otro objetivo.
·        No hay programas de prueba, sino sólo el código final de la aplicación.
·        Se prueba el programa completo.
·        Uno o varios casos de prueba por cada requisito o caso de uso especificado.
·        Se prueba también rendimiento, capacidad, etc.
·        Pruebas alfa (desarrolladores) y beta (usuarios).

PRUEBAS DE INTEGRACIÓN

Pruebas integrales o pruebas de integración son aquellas que se realizan en el ámbito del desarrollo de software una vez que se han aprobado las pruebas unitarias. Únicamente se refieren a la prueba o pruebas de todos los elementos unitarios que componen un proceso, hecha en conjunto, de una sola vez.
Consiste en realizar pruebas para verificar que un gran conjunto de partes de software funcionan juntos.
Las pruebas de integración (algunas veces llamadas integración y testeo I&t) es la fase del testeo de software en la cual módulos individuales de software son combinados y testeados como un grupo. Son las pruebas posteriores a las pruebas unitarias y preceden el testeo de sistema.

PRUEBAS FUNCIONALES

Una prueba funcional es una prueba basada en la ejecución, revisión y retroalimentación de las funcionalidades previamente diseñadas para el software. Las pruebas funcionales se hacen mediante el diseño de modelos de prueba que buscan evaluar cada una de las opciones con las que cuenta el paquete informático.
Las pruebas funcionales están desarrolladas bajo la perspectiva del usuario, confirmando que el sistema hace lo que los usuarios esperan que haga. Un error funcional en su aplicación puede tener consecuencias catastróficas, desde la pérdida de credibilidad de sus clientes, hasta grandes pérdidas económicas.
Los consultores de pruebas funcionales de Testhouse tienen amplia experiencia en multitud de mercados a nivel global, adaptándose a todo tipo de metodologías de desarrollo y habiendo realizado pruebas funcionales en aplicaciones críticas de empresas líderes en el sector de finanzas, telecomunicaciones y media, entre otros.

PRUEBAS DE RECORRIDO

Incluye indagación y observación del flujo de transacciones dentro de procesos representativos desde el punto en que las transacciones son iniciadas hasta el punto en el que son reportadas en el mayor general. Recorremos los controles que hemos identificado para determinar que han sido diseñados e implantados eficazmente. El recorrido incluye el examen de los flujos de la documentación e información desde una perspectiva tanto manual como automatizada. Su objetivo es confirmar nuestra comprensión del flujo de las transacciones representativas, la exactitud de la información que hemos obtenido acerca de los controles preventivos y/o de detección relevantes sobre el flujo de transacciones, si los controles han sido diseñados eficazmente para prevenir o detectar y corregir aseveraciones equívocas materiales en forma oportuna, si lo los controles han sido implantados y la idoneidad de nuestra documentación.

PRUEBA UNITARIA

En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado. Luego, con las pruebas de integración, se podrá asegurar el correcto funcionamiento del sistema o subsistema en cuestión.
La idea es escribir casos de prueba para cada función no trivial o método en el módulo de forma que cada caso sea independiente del resto.

Característica de la prueba unitaria.

·Automatizable: no debería requerirse una intervención manual. Esto es especialmente útil para integración continúa
·   Completas: deben cubrir la mayor cantidad de código.
· Repetibles o Reutilizables: no se deben crear pruebas que sólo puedan ser ejecutadas una sola vez. También es útil para integración continua.
·  Independientes: la ejecución de una prueba no debe afectar a la ejecución de
   otra.
·  Profesionales: las pruebas deben ser consideradas igual que el código, con la misma profesionalidad, documentación, etc.
· Aunque estos requisitos no tienen que ser cumplidos al pie de la letra, se recomienda seguirlos o de lo contrario las pruebas pierden parte de su función.

PRUEBAS DE CAJA BLANCA.

Son realizadas directamente en el código y normalmente son hechos por el programador del software, un ejemplo de este tipo de prueba es la prueba de unidad (unit testing). Sin embargo, las pruebas de caja negra son hechos de manera funcional, donde el probador no tiene contacto directo con el código del programa, así lo programa es tenido como una caja negra donde al pasar valores de entrada para esta caja y ella retorna valores de salida. Muchas veces estos tipos de pruebas son hechos por un equipo específico de probadores, los cuales utilizan la especificación de requisitos del cliente para crear un plan de casos de prueba.

PRUEBAS DE REGRESIÓN

Se denominan Pruebas de regresión a cualquier tipo de pruebas de software que intentan descubrir las causas de nuevos errores (Bugs), carencias de funcionalidad, o divergencias funcionales con respecto al comportamiento esperado del software, inducidos por cambios recientemente realizados en partes de la aplicación que anteriormente al citado cambio no eran propensas a este tipo de error. Esto implica que el error tratado se reproduce como consecuencia inesperada del citado cambio en el programa.
Este tipo de cambio puede ser debido a prácticas no adecuadas de control de versiones, falta de consideración acerca del ámbito o contexto de producción final y extensibilidad del error que fue corregido (fragilidad de la corrección), o simplemente una consecuencia del rediseño de la aplicación.
Por lo tanto, en la mayoría de las situaciones del desarrollo de software se considera una buena práctica que cuando se localiza y corrige un bug, se grabe una prueba que exponga el bug y se vuelvan a probar regularmente después de los cambios subsiguientes que experimente el programa.
Existen herramientas de software que permiten detectar este tipo de errores de manera parcial o totalmente automatizada, la práctica habitual en programación extrema es que este tipo de pruebas se ejecuten en cada uno de los pasos del ciclo de vida del desarrollo del software.

Tipos de regresión

Clasificación de ámbito
·        Local - los cambios introducen nuevos errores.
·        Desenmascarada - los cambios revelan errores previos.
·   Remota - Los cambios vinculan algunas partes del programa (módulo) e introducen errores en ella.
Clasificación temporal
· Nueva característica - los cambios realizados con respecto a nuevas funcionalidades en la versión introducen errores en otras novedades en la misma versión del software.
·  Característica preexistente - los cambios realizados con respecto a nuevas funcionalidades introducen errores en funcionalidad existente de previas versiones.

PRUEBAS DE PRESTACIONES

A veces es importante el tiempo de respuesta, u otros parámetros de gasto. Típicamente nos puede preocupar cuánto tiempo le lleva al sistema procesar tantos datos, o cuánta memoria consume, o cuánto espacio en disco utiliza, o cuántos datos transfiere por un canal de comunicaciones, o Para todos estos parámetros suele ser importante conocer cómo evolucionan al variar la dimensión del problema (por ejemplo, al duplicarse el volumen de datos de entrada).

PRUEBAS DE SISTEMA

Al final del desarrollo del software se incorpora otros elementos (hardware, personas, información) y se realiza una serie de pruebas de integración del sistema y de validación.
Estas pruebas están más allá del proceso del software y no las realizan únicamente los ingenieros del software. Sin embargo los pasos dados durante el diseño y la prueba mejoraran en gran medida la probabilidad de tener éxito y la integración del software del sistema mayor.
El software ya validado se integra con el resto del sistema donde algunos
Tipos de pruebas a considerar son:

Rendimiento: determinan los tiempos de respuesta, el espacio que ocupa el módulo en disco o en memoria, el flujo de datos que genera a través de un canal de comunicaciones, etc.

Resistencia: determinan hasta donde puede soportar el programa determinadas condiciones extremas.

Robustez: determinan la capacidad del programa para soportar entradas incorrectas.

Seguridad: se determinan los niveles de permiso de usuarios, las operaciones de acceso al sistema y acceso a datos la prueba comprueba que los mecanismos de protección integrados en el sistema realmente lo protejan de irrupciones inapropiadas

Usabilidad: se determina la calidad de la experiencia de un usuario en la forma en la que éste interactúa con el sistema, se considera la facilidad de uso y el grado de satisfacción del usuario.

Instalación: se determinan las operaciones de arranque y actualización del software.

Desempeño: está diseñada para probar el desempeño del software en tiempo de ejecución en tiempo de contexto de un sistema integrado. La prueba de desempeño se aplica en todos los pasos del proceso de la prueba, incluso a nivel de la unidad, el desempeño de un módulo individual debe evaluarse mientras se realizan las pruebas.

PRUEBAS DE CAJA NEGRA.

En teoría de sistemas y física, se denomina caja negra a aquel elemento que es estudiado desde el punto de vista de las entradas que recibe y las salidas o respuestas que produce, sin tener en cuenta su funcionamiento interno. En otras palabras, de una caja negra nos interesará su forma de interactuar con el medio que le rodea (en ocasiones, otros elementos que también podrían ser cajas negras) entendiendo qué es lo que hace, pero sin dar importancia a cómo lo hace. Por tanto, de una caja negra deben estar muy bien definidas sus entradas y salidas, es decir, su interfaz; en cambio, no se precisa definir ni conocer los detalles internos de su funcionamiento.

PRUEBAS DE ACEPTACIÓN

Cuando se construye software a la medida para un cliente, se llevan a cabo una serie de pruebas de aceptación para permitir que el cliente valide y verifique todos los requisitos. Estas pruebas las realiza el usuario final en lugar del responsable del desarrollo del sistema.