miércoles, 3 de febrero de 2021

videojuego con processing sapito

 juego sapito creado con processing

El juego consiste en que el sapo tiene q llegar a la casa sin ser atropellado por un coche

Como funciona:

manejas el sapo con las teclas a, w, s, d y se reinicipo

si miras el codigo,te dice que modifica cada cosa





 String[] carritos = {"camioncito.png","camioncito2.png","carrito.png","carrito2.png","carrito3.png"};

int espaciomin = 40;

int espaciomax = 120;

int velmin = 3;

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;

 }

 //50 fps

 frameRate(50);

 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,200,15);

}

 

//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;

 }

}

No hay comentarios:

Publicar un comentario