---++ Homework 2 - Il gioco "Forza 4" (uso di matrici) Vedi anche: DomandeHomework2, SoluzioneHomework2, RisultatiHomework2. ---- %TOC% ---- ---+++ 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: <blockquote style="background:lightgray"> <verbatim> | | | | | | | | | | |1| | | | | | | |1| | | | | | | |1|2| | | | | | |1|1|2| | | | |2|2|2|1|2| | --------------- 0 1 2 3 4 5 6 </verbatim> </blockquote> * 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: %RED%Giocatore N:%FINE% (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 "%RED%Input errato%FINE%" seguita da accapo (vedi esempio sotto) e si richiede di nuovo l'input. * Se la colonna è già piena si stampa *ESATTAMENTE* la stringa "%RED%Mossa non valida%FINE%" 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 "%RED%Ha vinto il giocatore N%FINE%" 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 "%RED%Partita patta%FINE%" 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. <blockquote style="background:lightgray"> <pre> | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%3%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |1| | | | --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%3%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | | |1| | | | --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%4%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | | |1|1| | | --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%2%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | |2|1|1| | | --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%8%FINE% Input errato Giocatore 1: %RED%5%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | |2|1|1|1| | --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%6%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%4%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2|1| | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%4%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2| | | | | | |2|1| | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%3%FINE% | | | | | | | | | | | | | | | | | | | | | | | | | | | |1|2| | | | | | |2|1| | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%3%FINE% | | | | | | | | | | | | | | | | | | | |2| | | | | | | |1|2| | | | | | |2|1| | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 1: %RED%2%FINE% | | | | | | | | | | | | | | | | | | | |2| | | | | | | |1|2| | | | | |1|2|1| | | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Giocatore 2: %RED%5%FINE% | | | | | | | | | | | | | | | | | | | |2| | | | | | | |1|2| | | | | |1|2|1|2| | | | |2|1|1|1|2| --------------- 0 1 2 3 4 5 6 Ha vinto il giocatore 2 </pre> </blockquote> ---++++ 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. <!-- ---+++Versione più difficile (allocazione dinamica della memoria) Chi vuole modifichi il programma in modo da iniziare leggendo da input una tripla di numeri separati da spazi che indicano, nell'ordine: 1 il numero di colonne 1 il numero di righe 1 il numero di pedine uguali che, se allineate, danno la vittoria. Il gioco standard equivale alla terna di numeri: *7 6 4* --> ---+++ Scadenza * L'esercizio va consegnato entro le ore *24:00 di domenica 9 Novembre* %INCLUDE{"WebHome"}% -- Users.AndreaSterbini - 11 Oct 2003 * Set ALLOWTOPICCHANGE = Users.DocentiProg1Group
This topic: Programmazione1/AA0506/PZ
>
HomeWork2
Topic revision: r9 - 2003-10-31 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback