Homework 2 - Il gioco "Forza 4" (uso di matrici)

Vedi anche: DomandeHomework2, SoluzioneHomework2, RisultatiHomework2.

Il gioco "Forza 4"

  • Il gioco "Forza 4" si gioca in due giocatori (Giallo e Rosso) ciascuno dei quali ha un numero N di pedine del proprio colore.
  • Si gioca a turno, inserendo dall'alto una pedina del proprio colore in una griglia verticale di 7 colonne e 6 righe.
  • Il giocatore di turno inserisce una delle proprie pedine in una delle 7 colonne cercando di ottenere per primo un allineamento di 4 pedine del proprio colore in orizzontale, verticale o in diagonale.
  • Quando una pedina viene inserita in una colonna, si va ad appoggiare sulla base della griglia o sulle pedine già inserite.
  • Non è possibile inserire più di 6 pedine per colonna.
  • Se la griglia viene completamente riempita senza che si presenti un allineamento di 4 o più pedine dello stesso colore, la partita è patta.
  • Il numero di pedine N di ciascun giocatore è sufficiente a riempire tutta la griglia (sono 21 per giocatore).

Obiettivo dell'esercizio

Si sviluppi un programma C che implementa il gioco Forza4.

Input del programma

Il programma inizia col giocatore 1 e per ogni turno riceve in input una cifra tra 0 e 6 compresi: il giocatore corrente vuole inserire la sua pedina nella corrispondente colonna.

Output del programma

  • Il programma stampa per ogni mossa lo stato della griglia ESATTAMENTE secondo il seguente esempio:
| | | | | | | |
| | |1| | | | |
| | |1| | | | |
| | |1|2| | | |
| | |1|1|2| | |
| |2|2|2|1|2| |
---------------
 0 1 2 3 4 5 6 
  • in cui:
    • caselle non occupate => spazio
    • caselle occupate dal giocatore 1 => carattere 1
    • caselle occupate dal giocatore 2 => carattere 2
    • stampate anche le barre verticali, la riga orizzontale di 'meno' e i numeri che indicano le colonne
  • subito dopo la presentazione della griglia viene:
    • presentato il prompt: Giocatore N: (senza accapo e con N uguale a 1 o 2)
    • letto l'input ed eseguiti i controlli:
      • ogni input diverso dai numeri tra 0 e 6 è errato e fa stampare ESATTAMENTE la stringa "Input errato" seguita da accapo (vedi esempio sotto) e si richiede di nuovo l'input.
      • Se la colonna è già piena si stampa ESATTAMENTE la stringa "Mossa non valida" seguita da accapo e si richiede di nuovo l'input.
  • Non appena viene scoperta la presenza di 4 (o più) pedine allineate (in orizzontale, verticale o diagonale) dello stesso colore si stampa:
    • la situazione (finale) della griglia.
    • la stringa "Ha vinto il giocatore N" seguita da accapo (con N= 1 o 2 a seconda del caso)
    • e si esce.
  • Se la partita termina in patta si stampa:
    • la situazione (finale) della griglia.
    • la stringa "Partita patta" seguita da accapo
    • e si esce.

Esempio di partita

Ecco un esempio di partita. In rosso si evidenzia l'input del programma, battuto dai giocatori sulla tastiera.

| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
---------------
 0 1 2 3 4 5 6 
Giocatore 1: 3
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |1| | | |
---------------
 0 1 2 3 4 5 6 
Giocatore 2: 3
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | | |1| | | |
---------------
 0 1 2 3 4 5 6 
Giocatore 1: 4
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | | |1|1| | |
---------------
 0 1 2 3 4 5 6 
Giocatore 2: 2
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | |2|1|1| | |
---------------
 0 1 2 3 4 5 6 
Giocatore 1: 8
Input errato
Giocatore 1: 5
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | |2|1|1|1| |
---------------
 0 1 2 3 4 5 6 
Giocatore 2: 6
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 1: 4
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |2|1| | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 2: 4
| | | | | | | |
| | | | | | | |

| | | | | | | |
| | | | |2| | |
| | | |2|1| | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 1: 3
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |1|2| | |
| | | |2|1| | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 2: 3
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | | |1|2| | |
| | | |2|1| | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 1: 2
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | | |1|2| | |
| | |1|2|1| | |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Giocatore 2: 5
| | | | | | | |
| | | | | | | |
| | | |2| | | |
| | | |1|2| | |
| | |1|2|1|2| |
| | |2|1|1|1|2|
---------------
 0 1 2 3 4 5 6
Ha vinto il giocatore 2

Suggerimenti

  • Usate (ovviamente) una matrice.
  • Nella lezione del 30 (o 31) Ottobre si parlerà del gioco del Tris, che non è troppo diverso da Forza 4.

Scadenza

  • L'esercizio va consegnato entro le ore 24:00 di domenica 9 Novembre

Consegna degli esercizi

  • Attenzione: viste numerose richieste, ho deciso di prorogare la scadenza dell'homework 4 a mercoledì 22 dicembre sempre alle 23:59.
  • La scadenza dell'Homework 5 è stata (ri)fissatta per venerdì 14 gennaio 2005 sempre alle 23:59.
  • Dovete essere iscritti a twiki
  • Dovete aver mostrato un documento di identità a Ivano Salvo (oppure mandatemene una scansione per email)
  • Vi devo aver abilitato (controllate in StudentiProg1Group o ArchitettureUnoGroup )
  • Gli esercizi vanno consegnati esclusivamente usando la pagina di consegna: ATTENZIONE in questo momento sono attive due pagine, una per l'homework 4 e una per l'homework 5.
Evitate di fare confusione!

    • Io registro/abilito nuovi iscritti e aggiorno password solo fino al venerdì sera
    • quindi fate una prova durante la settimana per controllare che tutto vi funzioni!
  • Non verranno accettati esercizi consegnati per email
  • Ora sono le 15:15

-- AndreaSterbini - 11 Oct 2003


This topic: Programmazione1/AA0506/PZ > HomeWork2
Topic revision: r9 - 2003-10-31 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback