Bisogni interni

Valori che cambiano da soli nel tempo e modificano il comportamento, come la fame o la stanchezza di un essere vivente. Qui l’energia cala a ogni fotogramma, e con lei la velocità, la dimensione e il colore della creatura, che a energia zero si ferma; ogni clic le dà da mangiare.

Clicca sul canvas per dare da mangiare alla creatura.

    let energia = 100;   // da 0 a 100: cala col tempo, cresce con il cibo
let t = 0;           // tempo interno del movimento

function setup() {
    createCanvas( 670, 240 );
}

function draw() {
    background( 255 );
    energia = max( energia - 0.1, 0 );
    t += map( energia, 0,100, 0,0.02 );
    let x = noise( t ) * width;
    let y = noise( t + 100 ) * height;
    fill( map( energia, 0,100, 200,0 ) );
    circle( x, y, 20 + energia * 0.3 );
}

function mousePressed() {
    energia = min( energia + 30, 100 );
}
  

Algoritmo

a ogni fotogramma:                                                draw()
    ridurre l'energia, senza scendere sotto zero                  max()
    far avanzare il tempo interno, tanto più quanta più energia   map()
    calcolare la posizione dal tempo interno                      noise()
    disegnare la creatura, più grande e scura con più energia

a ogni clic:                                                      mousePressed()
    aumentare l'energia, senza superare 100                       min()

Istruzioni


  

max() restituisce il più grande dei due valori: l’energia cala di 0.1 a ogni fotogramma, da 100 a 0 in circa 17 secondi, e poi resta a zero. Allo stesso modo min(), nel clic, la ferma a 100.


  

Il tempo di noise() avanza in proporzione all’energia: di 0.02 a ogni fotogramma con 100, per niente con 0. La velocità cambia senza salti, perché ogni posizione riparte da quella del fotogramma precedente.

Variazioni

Con max( energia - 0.3, 0 ) al posto di max( energia - 0.1, 0 ) la fame arriva tre volte più in fretta.

Con queste righe dopo fill() la creatura diventa rossa quando l’energia scende sotto 30, come in uno stato di allarme: