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