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: