El objetivo del juego es recibir tantas manzanas como sea posible en un periodo de tiempo determinado. Para poder contabilizar esto, sólo necesitamos un contador de tiempo que también se muestre en pantalla, para que los jugadores sepan cuándo ha terminado la partida. La duración óptima de la partida es de medio minuto. Para medir el tiempo, podemos usar la función millis() que contabiliza los milisegundos desde la última vez que se le llamó. De este modo, puedes ver si han pasado 30000 milisegundos (30 segundos) para terminar el juego. Para almacenar el tiempo necesitaremos una variable de tipo long (tipo de variable para números enteros largos). La función noLoop() le dirá a al programa que termine una vez hayas llegado al final del mismo (detiene la ejecución continua de la función draw). Finalmente, usaremos text para mostrar el tiempo en pantalla.
1 int nX=0;//coordenada X de Newton
2 int nY=0;//coordenada Y de Newton
3 float mY=0; //cambiamos el tipo de variable a float
4 int mX=15;//coordenada X de la manzana
5 float mV=0; //la velocidad inicial de caída de la manzana será cero
6 float mA=0.05; //aceleración inicial de la manzana
7 int p=0; //puntos
8 boolean pCount=true;
9
10 void setup() {
11 size(400,400);
12 nY=height-25;
13
14 }
15
16 void draw(){
17 background(200);
18
19 //Movimiento de la manzana
20 mV=mV+mA; // velocidad de la manzana en función de la aceleración
21 mY=mY+mV;//posición de la manzana en función de la velocidad
22 if (mY>height){
23 mY=15;//si toca el suelo elévala otra vez
24 mX=int(random(10,width-10));
25 mV=0;// para que empiece a caer con velocidad cero
26 pCount=true; //al caer una nueva manzana se pueden contar puntos de nuevo
27 }
28
29 fill(255);
30
31 //Detección de colisión
32 if(mY+10>nY && mY-10<nY+20){//está el círculo a la misma altura que el rectángulo?
33 if(mX+10>nX && mX-10<nX+20){//está el círculo sobre el rectángulo?
34 fill(255,0,0);//cambia el color a rojo
35 if(pCount) {
36 p=p+1; ////sólo añade puntos cuando la variable es true
37 pCount=false; // la variable cambia a false justo después de sumar puntos
38 }
39 }
40 }
41
42 ellipse(mX,mY,20,20);
43 rect(nX, nY,20,20);
44
45 //Cuenta el tiempo
46 float timer=millis()/1000; //cuenta cuánto tiempo ha pasado en segundos
47
48 //GAME OVER
49 if (timer>=30) {
50 noLoop(); //termina una vez llegado al final
51 }
52
53 //Muestra el tiempo en pantalla
54 fill(0);
55 text("Tiempo: " +int((30-timer)), 10, 20);//cuenta atrás sin decimales
56
57 //Mostramos los puntos en pantalla
58 fill(0);
59 text("Puntos: "+p, 2.8*width/4,20); //texto a la derecha de la pantalla
60 }
61
62 void keyPressed(){
63 if(keyCode == RIGHT){
64 nX=nX+3;
65 }
66 if(keyCode == LEFT){
67 nX=nX-3;
68 }
69 //Limita el valor de la coordenada X
70 if(nX<0){
71 nX=0;
72 }
73 if(nX>width-20){//Por la derecha tenemos en cuenta el tamaño del cuadrado
74 nX=width-20;
75 }
76 }
Recordemos que millis() cuenta la cantidad de milisegundos desde que el programa se ha ejecutado. Después de haber dibujado a Newton y a la manzana, creamos una nueva variable llamada timer que calcula cuánto tiempo ha pasado en segundos. Esto se hace con millis()/1000. Cuando han pasado 10 segundos, este cálculo sería 10.000/1.000. Si timer es mayor que 30, llamamos a noLoop() para parar el programa. Pero puesto que a los 10 segundos timer <30, utiliza text() para mostrar cuánto tiempo queda.