BeBee


To view this content, you need to install Java from java.com


Anno scolastico: 2006/07
Componenti:
  • Andres Felipe Quintero, disegno originale delle api
  • ValCon, codice
Mouse
pesta le pesti!
Scopo del gioco
gli insetti cambiano colore, e velocitÓ, se colpiti
ogni insetto rinasce dopo 3 colpi
dopo un certo numero di successi nasce un nuovo insetto
Punteggio
-1: ogni secondo che passa
-1: per ogni colpo
+25: per ogni insetto che (ri)nasce

Codice
// 2007/06/15

final int RATE=12,        // numero massimo di frame al secondo
          nFRAME=8,       // numero frame per un insetto
          minVELOCITA=5,  // velocitÓ quando Ŕ stato colpito
          nSTATI=2,       // numero stati (vivo, colpito, ...)          
          vivo=0,
          colpito=1,  
          nTIPI=3,        // numero tipi (blu, azzurro, rosso, ...)
          pSUCCESSO=25;   // punti per nuova nascita

int contaSUCCESSI, totSUCCESSI,
    contaCOLPI,
    contaMOSCHE,
    contaTEMPO,
    contaORE,
    contaMINUTI,
    contaSECONDI;
String sTEMPO;

Vector    MOSCHE;  
PImage    immagini[][][];

int       dx, dy;        // dimensioni applet
PImage    sfondo;
PFont     font;  

void setup()
{                     
  size(640, 480);

  immagini=new PImage[nTIPI][nSTATI][nFRAME];                          
  for(int T=0; T < nTIPI; T++)
     for(int i=0; i < nFRAME; i++)
     {        
         immagini[T][vivo   ][i]=loadImage("mosca"+T+vivo   +i+".gif");
         immagini[T][colpito][i]=loadImage("mosca"+T+colpito+i+".gif");
     }                         

  dx=width;
  dy=height;

  contaSUCCESSI=0;
  totSUCCESSI=0;            
  contaCOLPI=0;

  sfondo=loadImage("sfondo.jpg");      

  MOSCHE=new Vector();        
  MOSCHE.add(new Mosca(20, dx, dy));      

  font=loadFont("Courier14Bold.vlw");
  textFont(font);
  cursor(HAND);
  frameRate(10);
}

void mousePressed()
{        
  contaCOLPI++;

  int x=mouseX;
  int y=mouseY;          
  for(int i=0; i < MOSCHE.size(); i++)
  {      
    Mosca m=(Mosca)MOSCHE.elementAt(i);
    m.colpo(x, y);
  }
}

void draw()
{
  contaMOSCHE=MOSCHE.size();
  if(contaSUCCESSI >= contaMOSCHE)
  {
    MOSCHE.add(new Mosca(20, dx, dy));              
    contaSUCCESSI=0;    
  }
 
  contaTEMPO=millis()/1000;            contaORE=contaTEMPO/3600;  contaTEMPO=contaTEMPO%3600;
                                       contaMINUTI=contaTEMPO/60;
                                       contaSECONDI=contaTEMPO%60;

  sTEMPO=(contaORE     < 10 ? "0" : "") + contaORE    + ":" +
         (contaMINUTI  < 10 ? "0" : "") + contaMINUTI + ":" +
         (contaSECONDI < 10 ? "0" : "") + contaSECONDI;
 
  background(sfondo);      
  fill(  0, 0, 255);   text("BeBee! > " + (pSUCCESSO*totSUCCESSI-contaTEMPO-contaCOLPI), 10,  20);  
  fill(255, 0, 0);     text("Target > " + contaSUCCESSI+"/" + contaMOSCHE,               10,  35);    
  fill(200, 200, 0);   text("Time   > " + sTEMPO,                                        10,  50);  
//                     text("Shot   " + contaCOLPI,                                    10,  65);  


  for(int i=0; i < MOSCHE.size(); i++)
  {       
    Mosca m=(Mosca)MOSCHE.elementAt(i);
    m.aggiorna();
    m.draw();
  }
}


class Mosca
{

  int    stato;        // viva, colpita o morta?
  int    tipo;
  boolean neonato;
  int    frame;        // frame attuale  
  int    maxX, maxY;   // limiti per le coordinate
  int    vMAX;         // velocitÓ da viva
  int    velocita;
  float  direzione;
  int    x, y;         // coordinate attuali  
  int    raggio;       // raggio attivo dell'immagine
  int    diametro;  

  Mosca(int RAGGIO, int MAXX, int MAXY)
  {                       
    raggio=RAGGIO;      
    diametro=2*raggio;        
    vMAX=raggio/2;
    velocita=vMAX;
    direzione=random(-180, +180);
    maxX=MAXX-3*raggio;        
    maxY=MAXY-3*raggio;        
    nuova_posizione();
    frame=0;    
    tipo=0;
    stato=vivo;  
    neonato=true;        
    totSUCCESSI++;
  }

  void nuova_posizione()
  {
    x=int(random(maxX));
    y=int(random(maxY));
  }  

  void draw()
  {
     image(immagini[tipo][stato][frame], x, y);
     if(neonato)
     {
         fill(255, 255, 0);
         text("+"+pSUCCESSO, x+random(diametro), y+random(diametro));
     }
  }

  void aggiorna()
  {        
    frame++;
    if(frame==nFRAME)      // se Ŕ alla fine dell'animazione
    {      
      frame=0;            // ricomincia
      if(neonato)
         neonato=false;
      if(stato==colpito)      // se era stata colpito
      {          
        stato=vivo;     // si riprende...
        tipo++;
        if(tipo==nTIPI)
        {      
             tipo=0;        
             neonato=true;
             contaSUCCESSI++;
             totSUCCESSI++;    
             nuova_posizione();
        }
        velocita=vMAX+tipo*10;
        direzione+=random(-90, +90);
      }    
    }
    cambiaposizione();      
  }                                

  void cambiaposizione()
  {
    boolean ancora=true;
    int     newx,
            newy;
   
    do
    {
       direzione +=random(-10, +10);
       
       newx=(int)Math.round(x+velocita*Math.sin(Math.toRadians(direzione)));
       newy=(int)Math.round(y+velocita*Math.cos(Math.toRadians(direzione)));
     
       if(newx >= 0 && newx <= maxX &&
          newy >= 0 && newy <= maxY)
       {
           x=newx;
           y=newy;
           ancora=false;          
       }
    }
    while(ancora);      
  }

  boolean colpo(int cX, int cY)
  {
    if(stato==vivo)
    {          
      if(Math.abs(x+raggio-cX) <= raggio && Math.abs(y+raggio-cY) <= raggio)
      {        
        stato=colpito;
        frame=0;        
        velocita=minVELOCITA;
        return true;
      }    
    }
    return false;
  }  
}
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki