Lo scopo del gioco è quello di bloccare tutti i cubetti in arrico facendoli rimbalzare indietro muovendo la "racchetta". Per farlo è sufficiente impugnare il Wiimote in orizzontale e ruotarlo per far muovere la "racchetta" verso l'alto o verso il basso.
Ogni 5 punti, la velocità del gioco aumenta ed è possibile compiere al massimo 3 errori. Al terzo errore il gioco termina.
il codice non è molto complicato, tuttavia facciamo qualche considerazione su alcuni metodi:
- int ln(int n): serve per poi modificare la posizione del testo con il punteggio, in base al numero di cifre del punteggio;
- float stab(float Y): riduce l'effetto "vibrazione" della racchetta;
- void newpos(): assegna al mattoncino (o pallina a seconda di come lo volete vedere) una nuova posizione e un nuovo colore (entrambi casuali);
- boolean impact(): ritorna true se vi è un impatto tra la pallina e la racchetta;
- void backg(): disegna lo sfondo del gioco, che cambia di colore ad ogni avvio.
import lll.wrj4P5.*; Wrj4P5 wii; color c = color(0,0,0); //ball color int width_=600; int height_=500; float x = width_; //ball position float y = width_; //ball position float speed = 5; boolean back=false; float yuser=0; int imp=0; int lives=3; PFont f; float Y,oldY=0; boolean conn=false; float r=random(255/20); //background float g=random(255/20); float b=random(255/20); void setup() { size(width_,height_); f=loadFont("Purisa-48.vlw"); newpos(); wii=new Wrj4P5(this); wii.connect(); } void draw() { if(conn==true || (wii.rimokon.isConnected())){ conn=true; backg(); if(lives<=0){ textFont(f,40); text("Game Over",width/2-100,height/2); return; } move(); fill(255); textFont(f,26); text("Lives: "+lives,width-110,height-10); textFont(f,40); text(imp,width-(25*ln(imp)),30); Y=(float)((wii.rimokon.senced.x+1)*(height/3+50)); Y=stab(Y); display(); }else{ fill(0); textFont(f,16); text("Trying to find a Wiimote",width/2-100,height/2); } } int ln(int n){ int i=0; while (n>0){ n=n/10; i++; println(n); } return i; } float stab(float Y){ if (abs(Y-oldY)>2.5){ oldY=Y; return Y; } return oldY; } void move() { if(!back){ x = x - speed; if (x <0) { println("-1"); lives--; newpos(); } }else{ x = x + speed; if(x>=width){ back=false; newpos(); } } } void newpos(){ x = width; y=random(height-30); c=color((int)random(255),(int)random(255),(int)random(255)); } void display() { fill(c); stroke(c); rect(x,y,30,30); fill(20); noStroke(); rect(10, Y,40,80); if(impact()){ back=true; imp++; println(imp); if(imp%5==0) speed++; } } boolean impact(){ if((x<=50 && x>(50-speed)) && ((y<Y+80) && (y+40>Y))) return true; return false; } void backg(){ for(int i=0;i<height/20;i++){ fill(color((i+1)*r,(i+1)*g,(i+1)*b)); noStroke(); rect(0,20*i,width,20); } }Nel video qui sotto potete vedere il gioco in esecuzione.
UPDATE 07/03/11: I sorgenti e i file .jar sono disponibili su github
0 commenti: