Single Tech Games

Processing 2

Hola gente! Hoy volvemos un poco a programación, como muchos son nuevos por acá hace muchos años atrás hice mi primer tutorial de Processing 1.0 – ¡Dios! me estoy haciendo viejo 🙁 – Bueno les cuento que ya está en la versión 2.0 y ahora está mejor que pan recién salido del horno, ya puedes exportar a javascript y android. Con lo fácil que es programar en Processing podría sernos una excelente herramienta de prototipado, bueno ya les había comentado antes que estaba llevando este curso, bueno ya presente mi primer trabajo, fue un remake de Frogger que tanto jugaba de niño en mi atari, tiempos aquellos… ¡¡¡¡Noooooo!!!! realmente me estoy haciendo viejo… :'(
Bueno en el post de hoy les voy a compartir el código y los recursos que utilice para el proyecto, no esperen demasiado pero por lo menos para reconocer el código, esta todo explicado, tristemente no lo voy a poder continuar, estoy haciendo un proyecto que usa el motor física y Sapito (nombre del juego) no se vería beneficiado en nada de la física, por lo menos yo no veo como meterle física a su jugabilidad.

Si estás en el curso también y te gusto el proyecto, siéntete libre de mejorarlo 🙂 las imágenes las encuentran en la otra pagina junto con el mismo código pero en inglés y más abajo está un vídeo del juego en funcionamiento.
pd-> Mucha gente he visto que no puede llegar a la página 2, abajo después de donde dice “me gusta” hay 2 números en azul remarcados ( 1 2 ) le dan clic al número 2
me gusta

String[] carritos = {"camioncito.png","camioncito2.png","carrito.png","carrito2.png","carrito3.png"};
int espaciomin = 40;
int espaciomax = 120;
int velmin = 1;
int velmax = 5;
int tamCarros = 40;
Sapo sapito;
int i,j,k;
Carro[] misCarros1;
Carro[] misCarros2;
Carro[] misCarros3;
int[] nuevaVel = new int[3];
int[] nuevaX = new int[3];
void setup() {
 size(400,200);
 //Inicializa 6 carros por carril
 misCarros1 = new Carro[6];
 misCarros2 = new Carro[6];
 misCarros3 = new Carro[6];
 //Inicia los carros, le pasamos el array con los carros, la altura donde se encuentra, y si va de izquierda a derecha pasaremos true
 carros(misCarros1, 75, true);
 carros(misCarros2, 105, false);
 carros(misCarros3, 135, true);
 //Iniciamos al sapo a la mitad de la pantalla en la posicion y: 165 y de un tamaño de 20
 sapito = new Sapo(width/2, 165, 20, "sapito.png");
}
void draw() {
 //Espacio entre lineas blancas
 j = 60;
 background(100);
 //Carga la imagen del sapo
 sapito.cargar();
 //Carga la casa
 casa();
 //Dibuja las lineas blamcas
 while(j<height-40){
 i = 0;
 while(i<width){
 stroke(255,255,255);
 line(i, j,i+5,j);
 i= i+10;
 }
 j=j+30;
 }
 //30 fps
 frameRate(30);
 int l = 0;
 //Avanzamos los autos (retocede en caso vaya de derecha a izquierda el carro)
 while(l<misCarros1.length){
 misCarros1[l].avanza();
 misCarros2[l].retrocede();
 misCarros3[l].avanza();
 //Atropello al sapito?
 if(sapito.atropellado(misCarros1[l])||sapito.atropellado(misCarros2[l])||sapito.atropellado(misCarros3[l])){
 sapito.setImagen("sapitomuerto.png");
 //Cargamos la imagen del sapito muerto
 sapito.cargar();
 }
 //Si salio de la pantalla
 if(misCarros1[l].paso){
 if(l==0){
 //Va de izquierda a derecha?
 if (misCarros1[l].adelante){
 //Generamos una nueva velocidad random
 nuevaVel[0] = int (random(velmin,velmax));
 //lo ponemos al inicio
 nuevaX[0] = 0;
 }else{
 nuevaVel[0] = int (random(-velmax,-velmin));
 //Lo ponemos al final
 nuevaX[0] = width;
 }
 }
 //Cambio el carro
 cambiar(misCarros1[l], 0);
 }
 if(misCarros2[l].paso){
 if(l==0){
 if (misCarros2[l].adelante){
 nuevaVel[1] = int (random(velmin,velmax));
 nuevaX[1] = 0;
 }else{
 nuevaVel[1] = int (random(-velmax,-velmin));
 nuevaX[1] = width;
 }
 }
 cambiar(misCarros2[l], 1);
 }
 if(misCarros3[l].paso){
 if(l==0){
 if (misCarros3[l].adelante){
 nuevaVel[2] = int (random(velmin,velmax));
 nuevaX[2] = 0;
 }else{
 nuevaVel[2] = int (random(-velmax,-velmin));
 nuevaX[2] = width;
 }
 }
 cambiar(misCarros3[l], 2);
 }
 //incremento l
 l++;
 }
}
//Esta funcion genera los carros, cuando esta al inicio genera todos los carros pero los pone en posiciones negativas, solo aparecen cuando el X llega a 0 en
//case vayan de izquierda a derecha
void carros(Carro[] autos, int y, boolean adelante){
 k=0;
 int vel = 0;
 int espacio1 = 0;
 int espacio2 = 0;
 int nux = 0;
 //Si va de izquierda a derecha
 if (adelante){
 //Le damos una velocidad random
 vel = int (random(velmin,velmax));
 //ponemos el espacio max y minimo en negativo, para que vaya sumando a la derecha y vayan apareciendo los autos
 espacio1 = espaciomax*-1;
 espacio2 = espaciomin*-1;
 nux = 0;
 //Si va de derecha a izquierda
 }else{
 vel = int (random(-velmax,-velmin));
 //ponemos el espacio max y minimo en positivo, para que vaya restando a la derecha y vayan apareciendo los autos
 espacio1 = espaciomin;
 espacio2 = espaciomax;
 nux = width;
 }
 //escogemos una imagen random
 int ima = int(random(0,carritos.length));
 while(k<autos.length){
 //Inicializamos el carro
 autos[k]=new Carro(nux,y,vel,tamCarros,carritos[ima],adelante);
 //aumentamos la distancia entre uno y otro carro
 nux = nux + int(random (espacio1, espacio2));
 //escogemos una imagen random
 ima = int(random(0,carritos.length));
 k++;
 }
}
//Cargamos la casa
void casa(){
 PImage pi = loadImage("casita.png");
 imageMode(CENTER);
 image(pi,22,25);
}
//Genera un nuevo carro y lo unico que hace es reutilizar el objeto y cambiar sus valores
void cambiar(Carro car, int lug){
 if (car.adelante){
 //Nueva posicion
 nuevaX[lug] = nuevaX[lug] + int(random (espaciomax*-1, espaciomin*-1));
 }else{
 nuevaX[lug] = nuevaX[lug] + int(random (espaciomin, espaciomax));
 }
 //Cambia la posicion x, la velocidad y la imagen
 car.cambio(nuevaX[lug],nuevaVel[lug],carritos[int(random(0,carritos.length))]);
 //El auto no ha cruzado la pantalla todavia
 car.paso = false;
}
void keyPressed( ){
 //Si el sapito no murio
 if(!sapito.murio){
 //Si presionamos w
 if(key=='w'||key=='W'){
 //El sapito va hacia arriba si esta dentro de la pantalla
 if(sapito.getPosy() > 0){
 sapito.setPosy(sapito.getPosy() - 30);
 }
 //Si presionamos s
 }else if(key=='s'||key=='S'){
 //El sapito va hacia abajo si esta dentro de la pantalla
 if(sapito.getPosy() < height){
 sapito.setPosy(sapito.getPosy() + 30);
 }
 //Si presionamos a
 }else if(key=='a'||key=='A'){
 //El sapito va hacia la derecha si esta dentro de la pantalla
 if(sapito.getPosx() > 0){
 sapito.setPosx(sapito.getPosx() - 30);
 }
 //Si presionamos d
 }else if(key=='d'||key=='D'){
 //El sapito va hacia la izquierda si esta dentro de la pantalla
 if(sapito.getPosx() < width){
 sapito.setPosx(sapito.getPosx() + 30);
 }
 }
 }
}
//Si presionamos un boton del mouse
void mousePressed(){
 //Reiniciamos el juego
 setup();
}
class Carro
{
 private int posx;
 private int posy;
 private int velocidad;
 private int tamano;
 private String imagen;
 boolean adelante;
 boolean paso=false;
//Inicializamos el carro
 Carro(int px, int py, int ve, int ta, String im, boolean adel) {
 posx = px;
 posy = py;
 velocidad = ve;
 tamano = ta;
 imagen = im;
 adelante = adel;
 }
 void setPosx(int x){posx=x;}
 void setPosy(int y){posy=y;}
 int getPosx(){return posx;}
 int getPosy(){return posy;}
 int getTam(){return tamano;}
 //Avanza a la siguiente posicion de izquierda a derecha, pero si cruza la pantalla "paso" lo hace true
 void avanza () {
 PImage b = loadImage(imagen);
 imageMode(CENTER);
 image(b,posx,posy,tamano,tamano/2);
 posx = posx + velocidad;
 if (posx > width+tamano) {
 posx = -tamano;
 paso = true;
 }
 }
 //Avanza a la siguiente posicion de derecha a izquierda, pero si cruza la pantalla "paso" lo hace true
 void retrocede (){
 PImage b = loadImage(imagen);
 imageMode(CENTER);
 //Que solo afecte a este carro no a los demas
 pushMatrix();
 scale(-1,1);
 image(b,-posx,posy,tamano,tamano/2);
 popMatrix();
 posx = posx + velocidad;
 if (posx < 0-tamano) {
 posx = width+tamano;
 paso = true;
 }
 }
 //Cambia la posicion x, la velocidad y la imagen
 void cambio(int x, int v, String i){
 posx = x;
 velocidad = v;
 imagen = i;
 }
}
class Sapo{
 private int posx;
 private int posy;
 private int tamano;
 private String imagen;
 boolean murio = false;
 Sapo(int px, int py, int ta, String im) {
 posx = px;
 posy = py;
 tamano = ta;
 imagen = im;
 }
 //Carga la imagen
 void cargar(){
 PImage b = loadImage(imagen);
 imageMode(CENTER);
 image(b,posx,posy,tamano,tamano/2);
 }
 void setPosx(int x){posx=x;}
 void setPosy(int y){posy=y;}
 int getPosx(){return posx;}
 int getPosy(){return posy;}
 void setImagen(String im){imagen = im;}
 //Simple Deteccion de colisiones
 boolean atropellado(Carro auto){
 int CmaxX = auto.getPosx()+(auto.getTam()/2);
 int CmaxY = auto.getPosy()+(auto.getTam()/2);
 int CminX = auto.getPosx()-(auto.getTam()/2);
 int CminY = auto.getPosy()-(auto.getTam()/2);
 int SmaxX = posx+(tamano/2);
 int SmaxY = posy+(tamano/2);
 int SminX = posx-(tamano/2);
 int SminY = posy-(tamano/2);
 if(SmaxX<CmaxX && SmaxX >CminX){
 if(SmaxY<CmaxY && SmaxY >CminY){
 murio = true;
 }
 }
 if(SminX < CmaxX && SminX >CminX){
 if(SminY < CmaxY && SminY > CminY){
 murio = true;
 }
 }
 return murio;
 }
}

Páginas: 1 2

0 0 votes
Article Rating
Subscribe
Notify of
guest
2 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Lenny

Jajaja yo me acuerdo de ese juego, te quedo muy bien, gracias por compartir.
Y por la fisica ponlo a saltar 😉