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.