domingo, 25 de septiembre de 2011

Ejercicio Biblioteca

La universidad X tiene un sistema de información que le maneja el catálogo de biblioteca y los préstamos.
El usuario ingresa con un nombre (matrícula, # de nómina) y contraseña (nip asignado por biblioteca).
Puede buscar dentro del catálogo aquellos libros que le interesan; se le despliegan los datos bibliográficos (incluida imagen).          – Considerar que el libro no siempre está disponible: prestado, en reparación, en encuadernación, apartado, etc.
También se puede sacar los libros prestados.           – Siempre y cuando el usuario no tenga muchas multas.           – Si los libros son de consulta, no se pueden sacar.           – El tiempo de préstamo es diferente si se trata de un alumno de licenciatura, maestría, doctorado o un maestro.
Préstamo
Atributos: Tipo, tiempo
Métodos: Solicitar préstamo
UsuarioAtributos: Nombre, contraseña, multas, límite de préstamo
Métodos Iniciar sesión, cerrar sesión, multar usuario
Libro Atributos: Autor, título, editorial, año, portada, estado
Métodos Buscar libro, ver datos
Nombre Actor Descripción Caso relacionado
Solicitar préstamo Maestro, alumno licenciatura, alumno maestría, alumno doctorado Usuario pide préstamo

Iniciar sesión Maestro, alumno licenciatura, alumno maestría, alumno doctorado Usuario accede al sistema

Cerrar sesión Maestro, alumno licenciatura, alumno maestría, alumno doctorado Usuario sale del sistema Iniciar sesión
Ver datos Maestro, alumno licenciatura, alumno maestría, alumno doctorado Usuario consulta datos de libro

Buscar libro Maestro, alumno licenciatura, alumno maestría, alumno doctorado Usuario ingresa datos de libro a buscar Ver datos
Multar usuario Administrador Administrador multa usuario por romper alguna regla

Actualizar datos Administrador Administrador cambia estado de libros

Agregar libro Administrador Administrador ingresa datos de libros nuevos

Empezando videojuego (Parte 4)

Ahora veremos cómo mover objetos con el teclado.


 #!/usr/bin/python
import pygame


def main():
    pygame.init()
    pantalla=pygame.display.set_mode([600,400])
    pygame.display.set_caption("Juego Medieval")
    salir=False

    reloj1=pygame.time.Clock()
    verde=(0,100,0)
    rojizo=(200,20,50)
    azulado=(70,70,190)
    r1=pygame.Rect(50,50,45,45)
    r2=pygame.Rect(200,200,100,50)
    

    while salir!=True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                salir=True
            if event.type == pygame.KEYDOWN: #Nuevo
                if event.key == pygame.K_LEFT:    #Nuevo
                    r1.move_ip(-10,0)                         #Nuevo
                if event.key == pygame.K_RIGHT:  #Nuevo
                    r1.move_ip(10,0)                          #Nuevo
                if event.key == pygame.K_UP:        #Nuevo
                    r1.move_ip(0,-10)                         #Nuevo
                if event.key == pygame.K_DOWN:  #Nuevo
                    r1.move_ip(0,10)                          #Nuevo
    
        reloj1.tick(20)
        pantalla.fill(verde)
        
        pygame.draw.rect(pantalla,rojizo,r1)
        pygame.draw.rect(pantalla,azulado,r2)
        pygame.display.update()

    pygame.quit()

main()


Como ya sabemos, Python trabaja con eventos, es decir que cada movimiento será un evento en el juego.


if event.type == pygame.KEYDOWN: Esta función es para que cuando ocurra el evento de apretar una tecla, suceda algo. La cual desarrola las siguientes funciones.

if event.key == pygame.K_LEFT:   
                    r1.move_ip(-10,0) 
Esta función es específica para mover hacia la izquierda, "K.LEFT" indica que será la tecla es la flecha direccional izquierda y que se moverá -10 a la izquierda, y 0 para la derecha.
                     
if event.key == pygame.K_RIGHT:  
r1.move_ip(10,0)          Esta función es para mover hacia la derecha, "K_RIGHT" esta parte indica que se moverá si oprimimos la flecha direccional derecha.

 if event.key == pygame.K_UP:       
  r1.move_ip(0,-10)    Esta función es para mover hacia arriba de la pantalla, "K_UP" nos indica que orimiendo la flecha direccional hacia arriba, se hará movimiento hacia arriba.

if event.key == pygame.K_DOWN: 
 r1.move_ip(0,10)   Esta función es para mover hacia abajo de la pantalla, "K_DOWN" nos indica que oprimiendo la flecha direccional hacia abajo, se hará moviemiento hacia abajo en la pantalla.




Fuentes:
http://www.pygame.org/docs/ref/key.html
http://www.youtube.com/watch?v=S5D2-IOwQfM&feature=related

Empezando videojuego (Parte 3)

Mover objetos


  #!/usr/bin/python
import pygame


def main():
    pygame.init()
    pantalla=pygame.display.set_mode([600,400])
    pygame.display.set_caption("Juego Medieval")
    salir=False

    reloj1=pygame.time.Clock()
    verde=(0,100,0)
    rojizo=(200,20,50)
    azulado=(70,70,190)
    r1=pygame.Rect(50,50,45,45) #Nuevo
    r2=pygame.Rect(200,200,100,50) #Nuevo
    

    while salir!=True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                salir=True
            if event.type == pygame.MOUSEBUTTONDOWN: #Nuevo
                r1=r1.move(1,0) #Nuevo
    
        reloj1.tick(20)
        pantalla.fill(verde)
        
        pygame.draw.rect(pantalla,rojizo,r1) #Nuevo
        pygame.draw.rect(pantalla,azulado,r2) #Nuevo
        pygame.display.update()

    pygame.quit()

main()


Como podemos ver, le añadí comentarios a las líneas de código que no estaban en el anterior. Aquí la explicación de lo que hacen:

r1=pygame.Rect(50,50,45,45) Esta función pygame.Rect() nos hace un rectángulo en la pantalla, (como las superficies de la entrada pasada) El primer número de la función, el 50, es la coordenada x en la que se sitúa, el segundo número de la función, el 50 es la coordenada en y; el tercer número, el 45 es el tamaño de la base, y el último número 45, es el tamaño de la altura.

En la función de r2 es lo mismo.

if event.type == pygame.MOUSEBUTTONDOWN: Esta función corresponde a eventos de pygame, esta nos dice que si el evento es igual a oprimir botón del mouse, se moverá dicha figura.

 r1=r1.move(1,0) Esta es la figura que se mueve. El número 1 dentro de la función indica que se moverá 1 pixel en la coordenada x, y el 0 quiere decir que se moverá 0 pixeles en la coordenada y. r1 es que se moverá la figura 1.


pygame.draw.rect(pantalla,rojizo,r1)          pygame.draw.rect(pantalla,azulado,r2) Estas 2 funciones nuevas son otra forma para dibujar rectángulos, la anterior era de superficies, esta es de rectángulos, el parámetro primero, que viene siendo "pantalla", quiere decir que el dibujo se hará en la pantalla establecida, "rojizo" es el color del rectángulo, y "r1" es el nombre de la figura.

Cuando despleguemos la pantalla, al darle clic en la pantalla, el rectángulo rojo se moverá por cada clic.

Fuentes:
http://www.youtube.com/watch?v=qIhUiDP5wW8&feature=related
http://www.pygame.org/docs/ref/rect.html

Empezando videojuego (Parte 2)

En esta segunda parte ya tengo color en la pantalla, y algunas figuras dentro de ella.

#!/usr/bin/python
import pygame


def main():
    pygame.init()
    pantalla=pygame.display.set_mode([600,400])
    pygame.display.set_caption("Juego Medieval")
    salir=False
    reloj1=pygame.time.Clock()
    verde=(0,100,0)
    rojizo=(200,20,50)
    azulado=(70,70,190)
    s1=pygame.Surface((100,150))
    s1.fill(rojizo)
    s2=pygame.Surface([25,25])
    s2.fill(azulado)
    

    while salir!=True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                salir=True
        reloj1.tick(20)
        pantalla.fill(verde)
        pantalla.blit(s1,[100,200])
        pantalla.blit(s2,[10,10])
        pygame.display.update()

    pygame.quit()

main()



Como podemos ver, ya tenemos nuevas líneas de código respecto al de la entrada pasada.

reloj1=pygame.time.Clock() Esta función es de tiempo, la cual nos sirve para esta otra:
reloj1.tick(20) Esta nos indica que cada 20 frames por segundo se actualizará la pantalla, esto es para que no se trabe tanto al momento de ejecutar
  verde=(0,100,0) Esta función es el color que le pondré a la pantalla completa, en RGB el color verde es 0,100,0 pero para no volver a escribirlo lo represento con la palabra "verde", y está relacionada con esta:
pantalla.fill(verde) Esta hace que toda la pantalla sea del color verde, que ya especificamos con RGB en la anterior.

rojizo=(200,20,50)
    azulado=(70,70,190)
Estas funciones son sólo los nombres de los colores para no tener que escribir de nuevo toda la asignación de colores.

 s1=pygame.Surface((100,150))
    s1.fill(rojizo)
    s2=pygame.Surface([25,25])
    s2.fill(azulado) 
  Estas funciones son para hacer superficies en la pantalla que se nos despliega, la primera de s1 el 100 y el 150 nos indica el tamaño de los rectángulos que haremos, y el segundo indica de qué color será este.

  pantalla.blit(s1,[100,200])
        pantalla.blit(s2,[10,10])
Esta es para que las superficies estén en pantalla.



Aquí dejo una página que contiene los códigos en hexadecimal de los colores.
http://www.yellowpipe.com/yis/tools/hex-to-rgb/color-converter.php

sábado, 24 de septiembre de 2011

Empezando videojuego (Parte 1)

Estaré haciendo varias entradas para el Taller de Programación Orientada a Objetos con el fin de ir reportando los avances que llevo sobre mi videojuego mencionado en entradas anteriores.

Paso 1: Estando en el SO Ubuntu, nos vamos al terminal y escribimos "which python" para saber la localización de python en nuestra máquina.




Paso 2: Después abrimos el editor de texto emacs para iniciar a escribir nuestro código con este comando: "emacs avance1.py" emacs es por el editor con que queremos que se abra, "avace1" es el nombre que le quiero poner al archivo que voy a crear, y ".py" es la extensión que le pertenece al lenguaje de programación python.



Paso 3: Damos Enter y se abrirá automáticamente una ventana en Emacs, escribimos al inicio: "#!/usr/bin/python" la cual es la ubicación que obtuvimos al inicio pero agregándole el #!
Saltamos una línea y escribimos "import pygame" esta instrucción indica que importaremos la librería pygame que ya habíamos instalado previamente en entradas anteriores.



Paso 4: Escribimos "def main():" el cual es nuestro método main.



Paso 5: Después del inicio del main, escribimos "pygame.init()" el cual nos indica que estarán disponibles todas las funciones de la librería pygame sin necesidad de habilitar una por una.



Paso 6: Escribimos la función: pygame.display.set_mode([600,450]) esta sirve para que se nos despliegue una pantalla de la resolución indicada en los paréntesis, en mi caso será de 600x450




Paso 7: Ahora escribimos:
    while salir!=True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                salir=True
        pygame.display.update()
Todas estas instrucciones son para que la pantalla no se nos cierre inmediatamente después de que se abra,  también para poder utilizar el botón de cerrar ventana y salir del programa, y para ir actualizando la pantalla (pygame.display.update() es para eso)



 Paso 8: Ahora sólo terminamos escribiendo el final del método main con "main()"



Paso 9: Lo guardamos con el comando "Ctrl x" y "Ctrl s" y nos vamos al terminal para ejecutarlo. Ya estando en el terminal escribimos: "chmod u+x avace1.py" este nos permite autorizar la ejecución de nuestro programa. Le damos Enter y escribimos "./avance1.py" para ejecutarlo.



Paso 10: Damos Enter y se nos desplegará una ventana como la siguiente: Como podemos observar, aparece arriba "Juego medieval" ya que se lo establecimos al inicio.



Es todo por esta entrada.

Fuente: http://www.youtube.com/watch?v=Puslqhr9beM&feature=related
http://www.pygame.org/docs/

lunes, 19 de septiembre de 2011

Diagrama en Umbrello

Aquí una imagen de un diagrama que hicimos en clase utilizando la herramienta Umbrello.


Este diagrama lo hicimos en clase http://ak-fime.blogspot.com (Anais Venegas) y yo.

Conceptos vistos en clase

UML (Unified Modeling Language)

El Lenguaje Unificado de Modelado es un lenguaje gráfico que sirve para representar visualmente un sistema. Este sirve como un plano para un proyecto que se tenga en mente.


Este lenguaje es para describir un modelo antes de llevarlo a cabo. Pero debe tenerse claro que utilizar este recurso NO es programar, ya que aquí sólo se modela, y en la programación ya se construye.

POO (Programación Orientada a Objetos)

Este tipo de programación es un paradigma en la que se busca una solución a la situación planteada mediante el uso de objetos.

La programación orientada a objetos surgió cuando se trabajaba en un lenguaje para diseñar simulaciones, el Simula 67. Ahí se trabajaba simulando explosiones de distintas naves al mismo tiempo, y se vieron en la necesidad de separar tipos de naves en diversas clases de objetos, donde cada clase se encargaba de tener sus propias características que la hacían diferenciarse de las otras clases.

Con la ayuda de C++ este tipo de programación tuvo mucho más éxito entre los programadores, ya que es un lenguaje que se adapta muy bien al momento de ser orientado a objetos.

Algunos de los conceptos relacionados con la programación orientada a objetos son:

Clase: Se definen las propiedades y comportamientos de un objeto.

Herencia: Es cuando se pueden utilizar las mismas variables y métodos que otra clase.

Objeto: Entidad que contiene una serie de propiedades o atributos, y tienen comportamientos que reaccionan a objetos.



OOSAD (Object Oriented Analysis and design)

Es un software utilizado para la ingeniería que modela un grupo de objetos que interactúan entre sí. Donde cada objeto representa una entidad en el modelado, y es caracterizado por su clase, por su estado y por su comportamiento.



Se utiliza para hacer técnicas de análisis de los requerimientos de un sistema.

OMG (Object Management Group)

Es un grupo formado por diferentes compañías y organizaciones que se dedica a cuidar los estándares de la programación orientada a objetos. Esta promueve el uso de la POO dando acceso a guías sobre esto.





OOSE (Object Oriented Software Engineering)

Combina tres técinas utilizadas desde hace tiempo. La primera es la programación orientada a objetos, la OOSE usa los conceptos de encapsulación, herencia y relaciones principalmente entre las clases y casos.

En segundo lugar el trazado conceptual que se utiliza para crear los diferentes modelos del sistema en cuestión que será analizado. Y en tercer lugar el plan de bloque origina el plan de hardware para el área de las telecomunicaciones, estos se conectan junto a las interfaces ya definidas.


Fuentes: http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado

http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos

http://en.wikipedia.org/wiki/Object-oriented_analysis_and_design

http://3nibbles.blogspot.com/2011/05/optimizacion-de-javascript-x-oop-con.html

http://lanuevaeconomia.com/ideas-de-empresas-y-negocios-rentables-de-diseno-web-para-ganar-dinero-en-internet.html

http://diasdnuestrasvidas.blogspot.com/2011/06/si-acepto.html

http://usuarios.multimania.es/nmartinez/oose.htm