lunes, 12 de diciembre de 2011

Antipatrón de diseño

Que es un patrón de diseño?
Los patrones de software facilitan la reutilización del diseño y de la arquitectura, capturando las estructuras estáticas y dinámicas de colaboración de soluciones exitosas a problemas que surgen al construir aplicaciones

Ahora

Que es un antipatrón de diseño ?
es un patrón de diseño que invariablemente conduce a una mala solución para un problema.




Al documentarse los antipatrones, además de los patrones de diseño, se dan argumentos a los diseñadores de sistemas para no escoger malos caminos, partiendo de documentación disponible en lugar de simplemente la intuición





Algunos Antípatrónes  de diseño
# Big ball of mud <-- Gran bolla de mierda (como muchas de nuestras prácticas)
# Blame storming <-- Echar la culpa a otros
# Continuous obsolescence <-- Abstinencia continua¿?
# Copy and paste programming <-- llevamos toda la carrera así xD
# Dead end <-- Pues eso...
# Death by planning <-- Muerte por planifiación
# Email is dangerous <-- Inundando el correo de prácticas atrasadas
# Idiot proof process <-- Proceso a prueba de idiotas, muchos 'if' para vigilar que los tontos no la lien
# If it is working don't change <-- Si funciona no lo toques, otra gran frase
# Intellectual violence <-- Cuando dos cracks se juntan o mejor dicho, se solapan
# It is an operator problem <-- Es culpa del usuario, no del programador...
# Kill two birds with one stone <-- Matar dos pajaros de un tiro
# National ism <-- ¿¿¿¿Nacionalismo????
# Not invented here <-- Copiando ideas...
# Reinvent the wheel <-- Reinventando la rueda, típico...
# Shoot the messenger <-- Puto messenger xD
# The customers are idiots <-- Los clientes son idiotas, jojojo
# Walking through a mine field <-- Caminando sobre un campo de minas!
# We are idiots <-- Somos idiotas, cuando nadie de los 4 tiene ni puta idea de como se hace
# Yet another meeting will solve it <-- emmm.. este asunto lo resolvemos en la proxima quedada
# Yet another programmer <-- Anda, ahora nos acoplan a un Erasmus que se habia quedado solo sin grupo... y a explicarle toda la tela del programa desde 0, que bien!



Referencias
Wiki
Patrón
3...

Diagrama de clases

Conceptos

UML
Lenguaje Unificado de Modelos (LUM) o en sus siglas en inglés Unified Modeling Lenguage (UML) es un lenguaje de modelado de tipo gráfico que sirve para la visualización, especificación construir y documentar un sistema. Este ofrece un estándar para describir un plano que puede incluir aspectos conceptuales como el proceso de negocios, funciones del sistema, entre otras cosas.

OMG
El Object Management Group se encarga del cuidado de diversos estándares de tecnologías orientadas a objetos y al establecimiento, dichas tecnologías pueden ser la de UML, XMI y CORBA. Esta organización promueve el uso mediante guías.

OOSE
El Object-oriented software engineering es un lenguaje de modelación de objetos, dicho lenguaje fue desarrollado como la primera metodología orientada a objetos de diseño para emplear los casos de uso.

OOSAD
Object-oriented analysis and design es una ingeniería de software, dicho método es el que se encarga de la modelación de sistemas para que un grupo sea una interacción de objetos. Dicha ingeniería se aplica en el modelado de objetos y las técnicas de análisis de unos requerimientos funcionales de un sistema.

POO
es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.




Referencias
UML
OMG
OOAD
OOSE
POO

domingo, 11 de diciembre de 2011

codigo para bajar la pieza mas rapida

if(!game.getStatus()){

if (keyPressed){
      if (key==CODED){
        if (keyCode==DOWN){
          if (millis()-t1>=20){
            t1=millis();
            if (game.validMove("DOWN")){
              piece.move("DOWN");
            }
            else{
              game.saveBoard();
              score.linesUp(board.checkLines());
              piece.restart(int(random(0,7 )));
            }
          }
        }
      }
    }

Cuarta Entrada

Pruebas unitarias





codiigo para bajar las piezas automatica mente

 //Baja automaticamente la pieza
    if (millis()-t1>=score.vel){
      t1=millis();
      if (game.validMove("DOWN")){
        piece.move("DOWN");
      }
      else{
        game.saveBoard();
        score.linesUp(board.checkLines());
        piece.restart(int(random(0,7 )));
      }
    }
  }
  else{
    fill(255,0,0);
    textSize(70);
    text("Game Over",50,250);
    textSize(30);
    text("Presione R para reiniciar",50,320);
  }

};

Tercera Entrada

Diagrama de Secuencia 
Este diagrama es para checar filas en donde una vez que se inicia el juego se hace una selección de piezas y el jugador las va acomodando y después se hace un chequeo de filas para ver que  filas ya esta completa y quitarla para que el jugador tenga una fila mas.


Interfaz Grafica
Para la interfaz grafica fue creado con PFont. el boton de jugar es con el que empieza para que caigan todas las piezas y el boton de About te manda a otro panel que tiene la descripcion del juego


Eventos



Excepciones

viernes, 9 de diciembre de 2011

proyecto de Orientado a objetos

bueno para mi proyecto elegui hacer un tetris por su facilidad en la programacion uso de arreglos y para la implementacion del proyecto elegi java 
este es su diagrama de clases

El codigo consta 4 clases y el programa principal tetris que es el que le da la secuencia al juego, veremos cual es la funcion de cada clase:
  • pieza: Esta clase es la que contiene la forma que tendra cada figura y sus rotaciones posibles, contiene los metodos para girar la pieza y moverla dentro del tablero.
  • tablero: Es una matriz que contiene los espacios utilizados por las piezas, sus metodos permiten saber cuando las lineas están completas y nos dice cuantas son, ademas de que nos da el valor de cada uno de los espacios si esta lleno o vacío, para determinar si una pieza puede ocupar esa posición.
  • marcador: Contiene los datos de puntuación, nivel y las lineas que llevamos, sus metodos son muy sencillos ya que solo incrementan los contadores.
  • juego: Esta es la clase que determina las acciones que se pueden realizar, restringe los movimientos de las piezas en el tablero, actualiza los valores del tablero y los valores del marcador; esta clase lleva como parámetros las 3 clases anteriores ya que interactua directamente con sus propiedades y metodos.

Las piezas del juego
como ya habia mencionado las piezas se manejan mediante array


Pieza cuadrada




Pieza cuadrada, posee dos casilleros de lado. Por lo tanto el array que la define poseerá la siguiente información:
{2, 1, 1, 1, 1}
El primer 2 indica que la pieza posee dos casilleros de lado. Los siguientes unos codifican la forma de la pieza. Estos cuatro unos serán interpretados como una matriz de 2×2 por parte del juego.
Letra T
Esta pieza posee tres casillas de lado. Todas las piezas serán creadas dentro de una matriz cuadrada debido al modo en el cual se encuentra implementada la rotación de las fichas. El modo en el cual será definido el array para esta pieza será el siguiente:
{3, 0, 0, 0, 0, 1, 0, 1, 1, 1}

Letra Z
Esta pieza  tambien posee tres de lado. Y todas las piezas serán creadas dentro de una matriz cuadrada debido al modo en el cual se encuentra implementada la rotación de las fichas. El modo en el cual será definido el array para esta pieza será el siguiente:
{3, 1, 0, 0, 1, 1, 0, 0, 1, 0}
y las demas letras son iguales.

ahora un poco de este codigo para lo que fue el color y rotacion de las piezas

  public int[] pivot= new int[2];//[x][y]
  private int rot,pX,pY;
  int type;
  final private int block;

  pieza(int ptype,int h,int w,int b, color[] col){
    color[] colors=col;
    type=ptype;
    rot=0;
    block=b;
    pX=block*offset[type][rot][0]+4*block;
    pY=-5*block-block*offset[type][rot][3];
    pivot[0]=(3+offset[type][rot][0])+4;
    pivot[1]=-2-offset[type][rot][3];
  }

  void draw(){
    stroke(255);
    fill(colors[type]);
    for (int x=0;x<=4;x++){
      for (int y=0;y<=4;y++){
        if(form[type][rot][y][x]!=0){
          stroke(255);
          fill(colors[type]);
          rect(pX+block*x,pY+block*y,block,block);
        }
void rotate(){
    rot+=1;
    if (rot>3){
      rot=0;
    }
  }