logoTh!nk Again


Tirador de penales en Processing

Posted in Ejemplos, Juegos, Processing by admin on the August 7th, 2009

No se parece ni remotamente al Winning Eleven, pero describe muy bien el tiro parabólico. La barra degrada de potencia y el selector del ángulo de disparon son sólo caprichos que quise agregar.

La parte divertida es la forma de controlar el disparo:

  • con click derecho se posiciona el punto de tiro.
  • con la posición del puntero del mouse en el eje y se controla la medida del ángulo [0,90]
  • y la fuerza del disparo se mide en relación al tiempo que se mantiene presionado el botón izquierdo del mouse.

!Me gustó el resultado final!

Va, les dejo el código y los ejecutables para güindous, linux y mac.

//Escrito por Dennys Regalado Díaz
//06/08/09
PImage bg,balon,mira,flecha;
float teta = 0;
int x_ini,y_ini,c_x,c_y;
float delta_t = 0;
float vel_ini;
float aceleracion_y = -1.8;
boolean lanzar = false;
boolean mira_enable=false;
int mira_x,mira_y;
int colores[];
void setup(){
  size(600,327);
  bg = loadImage("background.jpg");
  balon = loadImage("balon.png");
  mira = loadImage("mira.png");
  flecha = loadImage("flecha.png");
  background(255);
  colores =new int[25];
  //  frameRate(1);
  x_ini = 0;
  y_ini = height;
  c_x = x_ini;
  c_y = y_ini;
  //aceleracion constante
  vel_ini = 5;
  fill(255,0,0)
  smooth();
  //  image(balon,c_x,c_y);
  colorMode(HSB, 100);
  for (int i = 0;i<colores.length ;i++){
    colores[i] =color(colores.length-i, 100, 100);
  }
  colorMode(RGB);

}

void draw(){

  if (mira_enable==true){
      background(bg)
    teta = map(mouseY,mira_y,mira_y-100,0,HALF_PI);
    teta = constrain(teta,0,HALF_PI);
    image(mira,mira_x-mira.width/2,mira_y-mira.height/2);
    fill(255,234,0,50);
    noStroke();
    arc(mira_x,mira_y, 90, 90, -teta,0);
    stroke(0);
    strokeWeight(4);
    pushMatrix();
    translate(mira_x,mira_y);
    rotate(-teta);
    image(flecha,0,0-flecha.height/2);
    //    line(mira_x,mira_y,mira_x+50*cos(teta),mira_y-50*sin(teta));
    popMatrix();
  }
  if (lanzar == true){
    delta_t +=1;
    c_x = x_ini + int(vel_ini*cos(teta)*delta_t);
    c_y = y_ini - int(vel_ini*sin(teta)*delta_t + 0.5*aceleracion_y*delta_t*delta_t);   
    image(balon,c_x,c_y);
    if (c_x > width || c_y > height){
      lanzar = false;   
      vel_ini = 5;
    }
  }
  else{
    if (mousePressed==true && mouseButton==LEFT){
      lanzar = false;
      if (vel_ini < 40)
        vel_ini+=2;
      int ancho = int(map(vel_ini,5,40,0,25));
      for(int i=0; i< ancho; i++){       
        //int index = int(map(i,0,ancho,0,colores.length));
        fill(colores[i]);
        noStroke();
        //line(i,height-10,i,height-5);
        rect(10+i*5,height-10,5,5);
      }
    }

    delta_t=0;
    x_ini= mira_x-balon.width/2;
    y_ini =mira_y-balon.height/2;
  }
}
void mouseReleased(){
  if (mouseButton==RIGHT){
    mira_enable = true;
    mira_x = mouseX;
    mira_y = mouseY;
  }
  else{
    lanzar = true;
    mira_enable=false;
  }
}

eXitium: mini mod del Juego Left4Dead

Posted in Hecho en México, Juegos, Uncategorized, proyectos by admin on the June 10th, 2009



Daniel Reynoso nos cuenta desde su página, sobre la modificación que le hizo al juego de acción Left4Dead. Se trata de un juego en primera persona que tiene como escenario el anexo a la Facultad de Ingeniería de la UNAM, México. Daniel nos cuenta de cómo surgió la iniciativa de este proyecto:

Después de jugar HalfLife 2 un par de veces, decidí probar las herramientas de desarrollo. Así que construí un mapa aleatorio, coloqué una esfera roja y pensé: “mmm, esta podría ser la Leonardita (la escultura roja del Anexo de Ingeniería, UNAM)  sería excelente hacer el mapa completo” Y así, un nuevo mod para el HL2 había nacido.

¿Cuál es la historia? Bueno, es el mismo inexplicable apocalipsis de zombies, pero en otro país (México). Mismo concepto, distintas circunstancias.

Mas información en la página oficial, gracias Daniel!

Juego 5 o más con mobil processing

Posted in Ejemplos, Hecho en México, Juegos, Mobile Processing, proyectos by admin on the February 24th, 2009

Esta es una versión mobil para el clásico juego 5 o más. El objetivo es conectar 5 o más esferas del mismo color formando una línea vertical, horizontal o en diagonal. Espero que lo disfruten tanto como yo disfrute escribiéndolo. Un par de cosas interesantes implementadas en este juego:

  1. El algoritmo BFS implementado con una cola simulada.
  2. La animación al mover una bola.

Lo probé en dos modelos de nokia 5300 y 5610.

LG cookie

LG cookie

Código de la cola simulada

class Queue{
  int array[];
  Queue(){
    array = new int[0];
  }
  void push(int x){
    array = append(array,x);
  }
  void pop(){
    array = reverse(shorten(reverse(array)));
  }
  int front(){
    if (!empty())
      return array[0];
    return -1;
  }
  boolean empty(){
    return (length(array)==0);
  }
}

Descargar el juego gratis desde aquí.