Fuoco alle polveri! — 6 of 7

Leonardo Boselli

Release 2

Section - La fisica del gioco

[Qui si impostano alcuni valori delle masse e delle lunghezze]

The massa delle palle is a mass that varies. The massa delle palle is 2kg.

The massa delle cariche is a mass that varies. The massa delle cariche is 100g.

The alzo del cannone is a length that varies. The alzo del cannone is 30cm.

The lunghezza del cannone is a length that varies. The lunghezza del cannone is 1.5m.

[L'azione che si occupa dello sparo vero e proprio]

Firing is an action applying to nothing.

Understand "fuoco" as firing.

Instead of firing:

[Se non c'è polvere, non può sparare]

if the cannone does not contain a carica di polvere:

say "Non ci sono [o]cariche[x] di polvere nel [o]cannone[x].";

[Se non ci sono palle, non può sparare]

otherwise if the cannone does not contain a palla di ferro:

say "Non ci sono [o]palle[x] di ferro nel [o]cannone[x].";

otherwise:

[Ora si calcola la velocità iniziale della palla - v. Energia cinetica allo scoppio]

let n be the number of the carica di polvere in the cannone;

let v be given by Energia cinetica allo scoppio where m is the massa delle palle, p is the massa delle cariche, E is the E_polvere;

let E_totale be massa delle palle times E_polvere;

[w è la componente verticale della velocità - v. formula più sotto]

let w be given by Componente verticale where k is the alzo del cannone, l is the lunghezza del cannone;

[u è la componente orizzontale della velocità - v. formula più sotto]

let u be given by Componente orizzontale;

[h è l'altezza massima raggiunta - v. formula più sotto]

let h be given by Altezza massima where m is the massa delle palle;

[t è il tempo di volo - v. formula più sotto]

let t be given by Tempo di volo;

[dd è la gittata - v. formula più sotto]

let dd be given by Gittata;

say "La [o]carica[x] di polvere nera nel [o]cannone[x] prende fuoco e sviluppa un[']energia di [E_totale] lanciando la [o]palla[x] di ferro alla velocità di [v]. Il proiettile percorre una traiettoria parabolica, raggiunge un[']altezza massima di [h] e, trascorsi [t] dallo sparo, ricade a [dd] di distanza.";

[Una volta sparato, vengono rimosse le cariche e la palla]

repeat with item running through the things in the cannone:

remove item from play;

let k be the distanza of the scialuppa;

[Se la caduta avviene troppo vicino]

if dd is less than 10m:

say "Il proiettile ha sollevato una nuvola di sabbia che ti investe. Non spararti sui piedi!";

[Se il proiettile cade oltre i 3m dalla scialuppa]

otherwise if dd is less than k minus 3m or dd is greater than k plus 3m:

let k be k minus dd;

say "Il proiettile solleva una colonna d[']acqua. Il lancio risulta troppo [if k is greater than 0m]corto di [k][otherwise]lungo di [0m minus k][end if].";

[La scialuppa si allontana di 10m]

change the distanza of the scialuppa to the distanza of the scialuppa plus 10m;

[Verifica se non ci sono più palle e, nel caso, termina con una sconfitta]

if the number of the palla di ferro in the spiaggia is zero:

say "Non ci cono più palle di cannone. Il pirata Silver, ridotto ormai a un puntino all[']orizzonte, è salvo.";

end the game in death;

if the number of the carica di polvere in the spiaggia is zero:

say "Non ci sono più cariche di polvere da sparo. Il pirata Silver, ridotto ormai a un puntino all[']orizzonte, è salvo.";

end the game in death;

otherwise:

say "[line break]Il pirata [o]Silver[x] rema con foga per sottrarsi alle tue cannonate. Ora la [o]scialuppa[x] si trova a [distanza of the scialuppa] di distanza.";

otherwise:

say "Il proiettile colpisce in pieno la scialuppa frantumandola in mille pezzi, mentre il forziere ed il pirata Silver vanno a far compagnia ai pesci.";

[Scialuppa affondata. Termina con una vittoria]

end the game in victory;

[Finalmente inizia la parte fisica vera e propria]

[Qui si definisce l'energia che sviluppa la polvere nera per unità di massa]

The energy-density is a kind of value. 10J/kg specifies an energy-density.

Energy-density times mass specifies energy.

The E_polvere is an energy-density that varies. E_polvere is 10000J/kg.

[Seguono tutte le equazioni necessarie ai calcoli della traiettoria delle palle di cannone.

Invece di determinare sulla carta un'unica formula che risolva il problema, passiamo ad Inform7 tutte le formule e passo dopo passo calcoliamo ogni grandezza utile: il massimo della pigrizia]

[Legge di conservazione dell'energia:

l'energia posseduta dalle n cariche di massa p è uguale

all'energia cinetica che acquista la palla di massa m]

Equation - Energia cinetica allo scoppio

n p E = m v^2 / 2

where n is a number, p is a mass, E is an energy-density, m is a mass, v is a velocity.

[La componente verticale w della velocità ricavata dall'alzo k e dalla lunghezza l del cannone]

Equation - Componente verticale

w l = k v

where w is a velocity, v is a velocity, k is a length, l is a length.

[La componente orizzontale u ricavata con il teorema di Pitagora]

Equation - Componente orizzontale

u^2 = v^2 - w^2

where u is a velocity, v is a velocity, w is a velocity.

[L'accelerazione di gravità]

The accelerazione di gravità is an acceleration that varies. The accelerazione di gravità is 9.81 m/ss.

[Legge di conservazione dell'energia:

l'energia cinetica posseduta dalla palla si trasforma

in energia potenziale gravitazionale.

Notare la massa che poteva essere semplificata: la pigrizia colpisce ancora]

Equation - Altezza massima

m g h = m w^2 / 2

where m is a mass, g is the accelerazione di gravità, h is a length, w is a velocity.

[Definizione di accelerazione nel moto uniformemente accelerato.

Da qui si determina il tempo di volo]

Equation - Tempo di volo

w = 2 g t

where w is a velocity, g is the accelerazione di gravità, t is an elapsed time.

[Definizione di velocità nel moto rettilineo uniforme.

Da qui si determina la gittata]

Equation - Gittata

dd = u t

where dd is a length, u is a velocity, t is an elapsed time.