risorse | casio fx-180p | morra cinese

Morra cinese

Il programma realizza il classico gioco della morra cinese, utilizzando la codifica sasso=1, carta=2, forbice=3.

La mappa seguente ricorda lo schema di gioco, riportando, per ogni giocata, il vincitore della partita:

  Giocatore B
  sassocartaforbice
 forbiceBA-
Giocatore AcartaA-B
 sasso-BA

Supponendo di assegnare 1 punto per la vittoria, 0 per il pareggio e -1 in caso di sconfitta, la situazione di gioco dal punto di vista del giocatore B diventa la seguente:

  Giocatore
  123
 3+1-10
Calcolatrice2-10+1
 10+1-1

Osservando che le diagonali della matrice ospitano valori uguali, si desume che il punteggio dell'utente dipende esclusivamente dalla differenza delle due giocate. Più precisamente, detta y la giocata della calcolatrice e x quella dell'utente, posto d=x-y, si ottiene che il punteggio p ottenuto dall'utente in una generica partita è dato da:

Il punteggio può dunque essere determinato utilizzando un polinomio di 5 grado in d, che si rivela tuttavia intrattabile per un programma che può contare al più 38 passi. Si opta per una soluzione alternativa, ma equivalente, ovvero una sinusoide:

Nota: impostare l'uso dei gradi sessagesimali (DEG) e disattivare l'uso dei decimali (FIX 0) prima di iniziare il gioco. Prima di ogni ciclo di partite, inoltre, assicurarsi di azzerare le memorie (KAC).

Uso delle memorie

Esempio d'uso

Uso del programma

Programma P1

passotastonote
1ENTattende la mossa dell'utente
2- 
3(determina la mossa della calcolatrice
4RAN#genera un numero casuale nel campo [0.000, 0.999]
5× 
63moltiplica il numero per 3, a coprire il campo [0.000, 2.997]
7+ 
8. 
95somma 0.5, a coprire il campo [0.500, 3.497]
10) 
11RNDarrotonda, a coprire il campo [1, 3]
12HLTvisualizza la mossa della calcolatrice
13=determina la differenza d tra le due giocate
14×determina il punteggio per l'utente:
151p=RND(SIN(d×120)), in sessagesimali
162 
170 
18= 
19SIN 
20RND 
21Minmemorizza temporaneamente il risultato in M
22determina l'incremento del numero di partite vinte dall'utente:
23+1 se p=+1; 0 altrimenti
24MRla formula implementata è (p + p²)/2
25= 
26÷ 
272 
28+ 
29Kout 2incrementa il contatore delle partite vinte dall'utente
30= 
31Kin 2 
32X↔K 1incrementa il contatore delle partite giocate
33+ 
341 
35= 
36X↔K 1 
37MRvisualizza il punteggio dell'ultima partita
38RTNpredisponiti per una nuova partita

Pagina modificata il 9/11/2011