lunes, 29 de agosto de 2011

Esqueleto proyecto

Juego medieval

Clase: Monito
{
En esta clase se describe el monito

}

Clase: Escenario
{
Especificamos características del escenario

}

Objeto: Monito
{
Especificamos al monito como un objeto el cual se desplazaré mediante el escenario

}


Objeto: Escenario
{
Escenario estilo un bosque lejano, lleno de hierbas, muy verde, algunas piedras tiradas. Aquí se encuentran los objetos que puede vender el jugador

}

 Métodos:
{
Caminar()
RecogerObjetos()
VenderObjetos()
ComprarObjetos()
BuscarObjetos()

}
Atributos
{
Características del monito como: color de cabello, altura, complexión, postura.
Características del escenario como: zacate verde, piedras, arbustos, árboles.
}


Conforme tenga más firme la idea de mi proyecto iré modificando esta entrada.

Responsabilidades de Clase


Anteriormente mencioné en una entrada las 2 clases que tengo en mente para mi proyecto del juego medieval. En lo siguiente explico la responsabilidad que tendrá cada clase en cuestión al juego.

Clase Monito: Esta clase se encargará de los movimientos del jugador (DesArr: desplazamiento hacia arriba, DesAba: desplazamiento abajo, DesDer: desplazamiento hacia la derecha, DesIzq: desplazamiento hacia la izquierda) Todo eso en función del escenario, que es mi siguiente clase.

Clase Escenario: Se ocupa de mantener al jugador dentro de él, y en este apareceran cosas en el suelo que el jugador irá recogiendo (RecObj: Recoger objeto) para después venderlo (VenObj: Vender objeto)

Eso es lo que tengo pensado hasta ahora para el proyecto de mi juego.


Nota: En esta entrada no fue requerida ninguna fuente de ningún tipo.

domingo, 28 de agosto de 2011

Casos de uso: Juego

Aquí presento los casos de uso del juego Traffic Rush. El juego trata de unos trenes que tienen que pasar por los carriles pero sin chocar entre ellos. También en el escenario existen elementos que te ayudan a tener puntos extra.






Caso: PresFle
Actor: Jugador
Acción: Jugador presiona flecha y aparece un tren en dicho carril

Caso: EmpTre
Actor: Jugador
Acción: Jugador empuja tren y avanza más rápido.

Caso: DetTre
Actor: Jugador
Acción: Jugador toca el tren y lo detiene.

Caso: TocCar
Actor: Jugador
Acción: Jugador toca carro y cambia de color para hacer puntos extra

Caso: TocFlo
Actor: Jugador
Acción: Jugador toca flores y acumula puntos.

Caso: TocTop
Actor: Jugador
Acción: Jugador toca topo que está en el zacate y acumula puntos.

Caso: TocArb
Actor: Jugador
Acción: Jugador toca arbusto sale una estrella y acumula puntos.

Caso: Pausar
Actor: Jugador
Acción: El juego está en pausa.

Caso: Rean
Actor: Jugador
Acción: El juego se reanuda

Aquí el diagrama:

Fuentes: Las mismas de la entrada anterior: http://www-2.dc.uba.ar/materias/isoft1/2001_2/apuntes/CasosDeUso.pdf
http://topappleapps.net/traffic-rush



Y quiero agradecer a mi compañera Anais Venegas porque en su blog tiene una explicación muy detallada de cómo usar el programa de los diagramas (Umbrello)

Casos de uso

Los Casos de uso son series de interacciones que tiene una persona u objeto con un servicio. Es una forma de explicar cómo alguien o algo utiliza un servicio que ofrece el software.

Cabe destacar que no siempre el software es utilizado por personas, sino también pueden ser otros software o hardware, a estos se les llama actores.

Una de las mayores finalidades de los Casos de uso es entender un sistema y analizarlo, ya que al describir sus funciones se llega a comprender mejor sus servicios.

Mi proyecto trata de un juego, y haré los Casos de uso de este.


Juego Medieval

Caso: DesArr
Actor: Jugador
Acción: Jugador se mueve hacia arriba en el escenario

Caso: DesAba
Actor: Jugador
Acción: Jugador se mueve hacia abajo en el escenario

Caso: DesDer
Actor: Jugador
Acción: Jugador se mueve hacia la derecha en el escenario

Caso: DesIzq
Actor: Jugador
Acción: Jugador se mueve hacia la izquiera en el escenario

Caso: RecObj
Actor: Jugador
Acción: Jugador recoge objeto del escenario

Caso: VenObj
Actor: Jugador
Acción: Jugador vende objeto obtenido

Caso: Pausa
Actor: Jugador
Acción: El juego se mantiene en pausa

Caso: Rea
Actor: Jugador
Acción: El juego se reanuda después de la pausa.

Los casos de Pausa y Rea están ligados, ya que si no hay pausa, reanudar no sería un servicio disponible.









Fuentes: http://www-2.dc.uba.ar/materias/isoft1/2001_2/apuntes/CasosDeUso.pdf


miércoles, 24 de agosto de 2011

Diseño proyecto

Aquí presento el objeto, clase, atributos y métodos de mi proyecto mencionado unas entradas atrás.

Objeto: Monito, escenario, objetos dispersos, herramientas

Clase: Monito, Escenario.

Atributos: Rudimentario, bosque, día, forma herramientas

Métodos: Encontrar, buscar, comprar, vender, matar, cazar.


Espero que con el paso del tiempo y a como vaya desarrollando las ideas sobre el proyecto, todo esto se vaya haciendo mucho más claro para mí, ya que aún hay cosas sobre las que tengo duda.

martes, 23 de agosto de 2011

Herramientas Taller POO

Mi proyecto será un videojuego en Python. Las herramientas que necesito para desarrollarlo son:

Ubuntu
Ubuntu es una distribución de GNU/Linux basada en Debian. La palabra Ubuntu viene de una etnia de Sudáfrica, en la cual sus creyentes se consideraban fieles y creían en sí mismos.



Al inicio se estaba trabajando en Debian, pero era un proyecto demasiado burócrata y la gente que trabajaba en él empezaron a interesarse más en Ubuntu, la que es ahora la distribución de Linux sin fines de lucro más popular del mundo.

Ubuntu es muy amigable a los usuarios enfocados en la programación.

Si se quiere tener en una USB pueden checar mi primer entrada de este blog donde lo explico paso a paso.


Python
Lenguaje de programación con sintáxis muy fácil de recordar. Lenguaje de alto nivel por su gran cantidad de instrucciones. Se le considera lenguaje multiparadigma ya que puede ser orientado a objetos, imperativo y a veces funcional, es un lenguaje interpretado. Y en particular estaremos usando la librería de Pygame para poder realizar el videojuego.




Para saber si nuestro Ubuntu tiene Python basta con escribir: "which python" en la terminal y nos aparecerá la dirección de alojamiento de dicho lenguaje.




Emacs
Editor de texto ideal para la gente que quiera prorgamar. Con un interfaz muy agradable gracias a sus colores conforme se va escribiendo el código del lenguaje de programación indicado, indica las llaves iniciales y las finales con sólo señalarlas.



Paa instalarlo en Ubuntu, tecleamos "emacs" en el terminal y seleccionamos el paquete llamado: "emacs23"



Pygame
Es un conjunto de librerías diseñadas propiamente para realizar creaciones de videojuegos con el lenguaje de programación Python. No vienen en dicho lenguaje, las tenemos que instalar, para esto tenemos que ir al terminar y teclear: "sudo apt-get install pygame"







Estas son todas las herramientas que tengo en mente utilizar para mi proyecto por ahora.

Fuentes: http://manzanamecanica.org/2008/12/tutorial_escribiendo_juegos_en_python_i.html
http://foro.elhacker.net/scripting/tutorial_de_programacion_de_juegos_con_python_y_pygame-t238489.0.html
http://ubuntu.com.es/

Metodologías de Análisis y Diseño de software

Cada vez que se quiera realizar algo de calidad y que tenga satisfecho a nuestro cliente, debemos tomar en cuenta tener una Metodología

¿Qué es una metodología?

Podemos llamar como Metodología a una guía de pasos, procedimientos y técinas que tendremos en un proceso, con una serie de pasos que seguiremos para llevar a cabo satisfactoriamente lo que se quiere realizar.

Cuando queramos realizar los procedimientos, técnias o tareas descritas en nuestra metodología, debemos contar con Herramientas, las cuales sirven para apoyarnos cuando estemos contruyendo un software.



Si no se tiene una metodología, sucede algo muy parecido a la Crisis del Software que comenté en mi entrada pasada ya que no se sigue una serie de pasos los cuales te ayudan a tener un patrón, seguirlo y al final tener un producto de buena calidad.

Desde mi punto de vista muy personal, tener una metodología, es algo muy parecido a la hora de querer elaborar una receta. La receta viene siendo la metodología, las herramientas los moldes para cocinar, los procedimientos son cuánto tiempo se hornea, y el producto es el alimento preparado.

Al contar con metodologías se tienen reglas definidas para seguir, planificación y control, mantenimiento si es necesario, comunicación efectiva y sincera con los demás miembros del proyecto, y lo más importante de todo reutilización de software.

Hay diferentes tipos de metodologías:
- Estructuradas (datos jerárquicos)
- Orientadas a objetos
- Para sistemas de tiempo real

Estructuradas (Datos jerárquicos)
 Se definen primero los datos de entrada y salida y después se ordena lógicamente hasta ajustarlos a dicha estructura. Debe estar separado del diseño físico.



Orientados a Objetos
Son los revolucionarios o puros, y los sintetistas o evolutivos. Como sus nombres lo indican son metodologías que van evolucionando, porque no es lo mismo utilizar la misma metodología cuando se programaba perforando tarjetas, a como se programa ahora con el lenguaje ensamblador, o con lenguajes de alto nivel como es el Java, Python, C++, etc. Se tiene que ir cambiando de metodologías según las necesidades que se tengan.

Sistemas de tiempo real 
Como en estos sistemas se trabaja en un tiempo real, debe haber sincronía de tareas, saber qué hacer cuando se presente un problema, tener datos continuos, saber cómo manejar las interrupciones que haya.



Existen varios pasos para la metodología:
*Estudio Preliminar: En este paso debe saberse bien qué es lo que se hará, cómo manejarlo, en qué consiste y cuánto tiempo aproximadamente puede llevarse.
*Estudio Detallado: Aquí ya se ve más a fondo las herramientas que se utilizarán, el presupuesto que se tiene, las ganancias que tendrán al final, un tiempo más exacto del cual disponen, cómo comenzar el proyecto, qué hacer ante distintas situaciones como pueden ser: falta de personal para elaborar el proyecto y tener en cuenta las cosas que puedan llegar a fallar.
*Implementación: Ir elaborando lo que se tiene pensado, ya no es tanto de pensar qué se hará, sino hacerlo, ver cómo se va desenvolviendo el proyecto y si se está haciendo a como lo esperado.
*Realización e instalaión: Ya se instala el software elaborado en las máquinas que lo necesitan.






También debe tenerse en cuenta el mantenimiento del proyecto, por si llega a presentarse alguna falla poder tener contacto con la gente que lo elaboró y que lo puedan solucionar lo más rápido que se pueda.


Fuentes  http://alarcos.inf-cr.uclm.es/doc/ISOFTWAREI/Tema04.pdf
http://analisisydiseoiii.blogspot.com/2011/05/diagrama-de-interaccion-global.html
http://www.sistemasinformaticos.com.ve/about.html
http://sosmaveco.com/?page_id=25

Crisis del software

Sin duda, muchos de nosotros hemos utilizado alguna máquina la cual contenga cualquier tipo de sofwtare. Ya sea celulares, computadoras, GPS, teclados musicales, reproductores de música, etc., y siempre y cuando todo funcione bien, no nos quejamos de nada.



Los problemas comienzan cuando hay fallas en estos aparatos, empieza alguna falla y la gente se queja de por qué no hicieron bien el producto antes de comenzar a venderlo. O me imagino que es porque tienen una fecha determinada para entregar el proyecto que se tuvo desde meses atrás y como no fue el tiempo suficiente o no hubo mucho interés de parte de los creadores, y con tal de entregarlo el día estipulado entregan lo que tengan y a como lo tengan.

Esto sucede ya que no se tuvo el suficiente tiempo para analizar la creación del producto, ya que si se hubiese hecho bien, a la hora de diseñarlo y de construirlo no hubiera habido el problema que tienen ahora los clientes que compraron el producto.

Desde aproximadamente 1950 que se comenzó a utilizar software (elaborado muy diferente a como ahora se hace) hasta el presente sigue habiendo muchos fallos y una muy poca evolución en el tema.

Muchos diseñadores y programadores prefieren hacer las cosas por su cuenta y es por esto que el producto: o no se entrega a tiempo, o resulta con fallos que pudieron haberse evitado si se hubiese tenido el tiempo necesario para su elaboración.

Es por eso que se debe tener una metodología a la hora de trabajar, para trabajar paso a paso y en un orden establecido. Así las cosas estarían mucho más claras y fáciles de hacer.

Un ejemplo que no sé si sea el más adecuado para este tema, pero aún así hablaré de él es el Windows Vista.



Después del Windows XP (que fue lanzado en el 2001 y la última versión que se tuvo fue en el 2008, tiempo más largo entre dos SO de Microsoft) llegó el Windows Vista con una interfaz notablemente mejorada. Los iconos eran mucho más modernos y bonitos, pero ocuapaba mucho espacio en la memoria y los procesos eran muy lentos. Mucha gente tuvo problemas con compatibilidad de hardware con este Sistema Operativo. Pienso que es por eso, y por otras razones más, por la cual la gente decidió quedarse con Windows XP hasta que hubiera una actualización de Vista o por lo menos otra versión de SO.



Es sorprendente que aún después de muchos años entre Windows XP y Windows Vista no se haya tenido una mejora que deje contento a su público, aquí podría decirse que hubo una crisis de software y no necesariamente la causa fue el tiempo, ya que hubo mucho.

Las cosas parecieron establecerse cuando salió el Windows 7 que recibió muchas críticas positivas, lo contrario al Vista, y con esto nos podemos dar una idea que el tiempo a veces no es un factor tan importante para hacer algo de calidad y que al público tenga satisfecho.

Es todo por esta entrada.

Fuentes http://www.angelfire.com/space/equipo_5/diana/crissoft.htm
http://www.youtube.com/watch?v=zqgMQYl15rE
http://lsi.ugr.es/~mvega/docis/crisis.pdf
http://es.wikipedia.org/wiki/Windows_7
http://www.elwebmaster.com/actualidad/fallas-y-problemas-de-windows-vista
http://es.wikipedia.org/wiki/Windows_XP

Proyecto POO

En esta entrada explicaré el proyecto que tengo en mente que quiero hacer este semestre en la clase de Programación Orientada a Objetos.

Proyecto POO

Lo que yo quiero hacer para proyecto es un juego en el lenguaje de programación Python. Este lenguaje lo estuve utilizando en tercer semestre y me gustó mucho lo agradable que es la sintáxis que utiliza, es por eso que elegí ese lenguaje.



Estuve investigando un poco y vi que es relativamente sencillo comparado con otros lenguajes ya que existen librerías llamadas Pygame que facilitan enormemente la creación de un juego, ya que cuentan con herramientas útiles para insertar gráficos, sonidos, etc.



Lo que me gustaría hacer de juego por ahora es que trate de un jugador que se desplace por un escenario al aire libre y que recolecte cosas que se vaya encontrando en el camino. Después que las pueda vender en alguna de las tiendas dispersas en el escenario y luego pueda comprar cosas o herramientas con el dinero que se gana al venderlas.

Quiero que sea de un solo jugador, que tenga una música agradable al usuario, que el monito protagonista del juego tenga un aspecto un tanto antiguo como si viviera en la époda medieval, que las herramientas que pueda comprar le sirvan para explorar más caminos y encontrar aún más cosas.

Al principio no me decidía entre un chat en Java o lo que expliqué anteriormente, pero cuando vi videos en youtube sobre juegos hechos en Pygame, me animé a intentar hacerlo de proyecto.


Nota: No tengo nada en contra de Java, lo contrario, se me hace un lenguaje que promete mucho, sólo quería poner la imagen expresando que no utilizaré Java.

Fuentes http://www.losersjuegos.com.ar/traducciones/pygame
http://blogubuntu.com/pygame-o-como-simplificar-la-programacion-de-juegos-en-python

http://foro.elhacker.net/scripting/tutorial_de_programacion_de_juegos_con_python_y_pygame-t238489.0.html
http://www.losersjuegos.com.ar/_media/traducciones/pygame/pygame_esp_20090205.pdf
http://manzanamecanica.org/2008/12/tutorial_escribiendo_juegos_en_python_i.html
http://www.programacionenjava.com/

Programa en Java

Para esta primer entrada del Taller de POO hice un programa que convierte centímetros en pulgadas y viceversa, siempre y cuando se le ingrese un dato qué convertir.

Esta vez no explicaré la sintáxis del programa, ya que me enfocaré en explicar lo que son las clases, los objetos, los atributos, contructores y métodos de la Programación Orientada a Objetos.

Clase: Conversión
Objetos: cm y pul
Métodos: convertir1 y convertir2
Atributos: cantidades ingresadas por el usuario.

Antes de poner el código, quiero aclarar que importé una librería para poder escanear los datos que íbamos a convertir llamada: import java.util.Scanner



import java.util.Scanner;
import java.util.*;

public class conversion{
    private static double convertir1;
    private static double convertir2;
    private static double cm;
    private static double pul;
    private static double cm1;
    private static double pul1;
    int opcion;

    public conversion(){
	cm1=2.54;
	this.cm1 = cm1;
	pul1=0.39;
	this.pul1 = pul1;
	convertir1();
	convertir2();
}

    public double conversion1(){
	convertir1 = (cm * pul1);
	return convertir1;
}
    public double conversion2(){
	convertir2 = (pul * cm1);
	return convertir;
}

    public static void main(String args []){
	Scanner salida = new Scanner(System.in);
	System.out.println("Programa convertidor de cm -> pul y de pul - > cm");
	System.out.println("\n1- De centímetros a pulgadas");
	System.out.println("\n2- De pulgadas a centímetros");
	int opcion=1;
	System.out.println("Elige una opcion");
	opcion = salida.nextInt();


	if(opcion==1){
		System.out.println("Elegiste de cm -> pul\nIngresa la cantidad de cm");
		cm = salida.nextDouble();
		pul1=0.39;
		convertir1 = cm*pul1;
		System.out.println("\nEl resultado es: "+ convertir1);
	}
	if(opcion==2){
		System.out.println("Elegiste de pul -> cm\nIngresa la cantidad de pul");
		pul = salida.nextDouble();
		cm1=2.54;
		convertir2 = cm1*pul;
		System.out.println("\nEl resultado es: "+ convertir2);
	}
}

}


 

Si surge alguna duda sobre el programa, no duden en comentar.

Fuentes: http://ak-fime.blogspot.com/
               http://kodrs.com/suma-resta-division-multiplicacion-java/
               http://www.forosdelweb.com/f45/error-java-might-not-have-been-initialized-750292/

Hasta luego.


Nota: Modifiqué la entrada ya que mis compañeras Anais y Gemma me hicieron ver un error que tenía en cuanto identificar métodos y atributos, les quiero agradecer por habérmelo dicho.

jueves, 11 de agosto de 2011

Programación Orientada a Objetos (Clase y taller)

Esta entrada es para indicar que a partir de esta se hablará sobre Programación Orientada a Objetos en el blog.

La clase de POO se lleva a cabo en el salón 4-212 en la FIME UANL de 7:00 am a 9:30 am
El taller de POO se lleva a cabo en el salón 4-200 en la FIME UANL de 7:00 am a 8:40 am