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