risorse | casio fx-180p | 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 | ||||
| sasso | carta | forbice | ||
| forbice | B | A | - | |
| Giocatore A | carta | A | - | B |
| sasso | - | B | A | |
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 | ||||
| 1 | 2 | 3 | ||
| 3 | +1 | -1 | 0 | |
| Calcolatrice | 2 | -1 | 0 | +1 |
| 1 | 0 | +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).
L'utente avvia il programma:
P1 → 0
L'utente gioca sasso:
1 RUN → 2 RUN → -1
la calcolatrice ha giocato carta (2), e vince; l'utente infatti totalizza un parziale di -1.
L'utente gioca forbice:
3 RUN → 3 RUN → 0
anche la calcolatrice ha giocato forbice (3), pareggiando; l'utente totalizza un parziale di 0.
L'utente gioca carta:
2 RUN → 3 RUN → -1
la calcolatrice ha rigiocato forbice (3), e vince; l'utente totalizza un parziale di -1.
L'utente gioca nuovamente carta:
2 RUN → 1 RUN → 1
la calcolatrice, avendo giocato sasso (1), perde; l'utente totalizza un parziale di 1.
Per verificare lo stato delle partite giocate e vinte, si esaminano i contenuti delle memorie K1 e K2:
Kout 1 → 4
Kout 2 → 1
Sono state giocate 4 partite (K1), di cui una sola vinta dall'utente (K2).
| passo | tasto | note |
|---|---|---|
| 1 | ENT | attende la mossa dell'utente |
| 2 | - | |
| 3 | ( | determina la mossa della calcolatrice |
| 4 | RAN# | genera un numero casuale nel campo [0.000, 0.999] |
| 5 | × | |
| 6 | 3 | moltiplica il numero per 3, a coprire il campo [0.000, 2.997] |
| 7 | + | |
| 8 | . | |
| 9 | 5 | somma 0.5, a coprire il campo [0.500, 3.497] |
| 10 | ) | |
| 11 | RND | arrotonda, a coprire il campo [1, 3] |
| 12 | HLT | visualizza la mossa della calcolatrice |
| 13 | = | determina la differenza d tra le due giocate |
| 14 | × | determina il punteggio per l'utente: |
| 15 | 1 | p=RND(SIN(d×120)), in sessagesimali |
| 16 | 2 | |
| 17 | 0 | |
| 18 | = | |
| 19 | SIN | |
| 20 | RND | |
| 21 | Min | memorizza temporaneamente il risultato in M |
| 22 | x² | determina l'incremento del numero di partite vinte dall'utente: |
| 23 | + | 1 se p=+1; 0 altrimenti |
| 24 | MR | la formula implementata è (p + p²)/2 |
| 25 | = | |
| 26 | ÷ | |
| 27 | 2 | |
| 28 | + | |
| 29 | Kout 2 | incrementa il contatore delle partite vinte dall'utente |
| 30 | = | |
| 31 | Kin 2 | |
| 32 | X↔K 1 | incrementa il contatore delle partite giocate |
| 33 | + | |
| 34 | 1 | |
| 35 | = | |
| 36 | X↔K 1 | |
| 37 | MR | visualizza il punteggio dell'ultima partita |
| 38 | RTN | predisponiti per una nuova partita |
Pagina modificata il 9/11/2011