|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2000
Messaggi: 60
|
Programma Forza 4 in C! Aiuto!
Qualcuno puo aiutarmi ad implementare in C il programma Forza 4 ? Dovrei consegnarlo per domenica....vale come esercizio...vi prego, help me.
Riporto qui sotto le indicazioni per il programma: 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. Spero che qualche buon'anima mi aiuti, grazie. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: May 2003
Messaggi: 283
|
Non ho capito il problema? Crei una matrice di interi (per es.), la inizializzi a 0, visualizzi la schifezza. Quando uno inserisce la pedina nella matrice in quella riga nella prima posizione "0" inserisci 1 o 2 a secondo del giocatore. Crei una funzione a cui passi la matrice e la posizione della pedina inserita, la funz controlla se la pedina inserita "completa" una serie di 4 pedine. Si -> ha vinto, no -> controllo quante pedine sono rimaste al giocatore a cui tocca, se > 0 allora gioca altrimenti patta.
Va beh io lo buttata giù in 4 secondi magari ci sono un po' di controlli in + da fare ![]()
__________________
/*** * Nulla è impossibile per chi non deve farlo ***/ |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Una cosa tipo
Codice:
char table[10][10]; int i; for(i=0;i<10;i++) printf("%c|-\n", table[0][i]); int j; for(j=0;i<10;j++) printf("%c-|\n", table[i][i]); ![]()
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ekkone una versione + utile al tuo scopo.
Codice:
#include <stdio.h> #include <stdlib.h> void inserisci(int * table[3][3], int x, int y, int val); int main() { int table[3][3] = {0}; int i; int j; int y; for(i=0;i<3;i++) printf("\t%d", table[0][i]); printf("\n"); for(j=0;j<3;j++) printf("\t%d", table[1][j]); printf("\n"); for(y=0;y<3;y++) printf("\t%d", table[2][y]); printf("\n"); inserisci(&table, 1, 1, 1); inserisci(&table, 1, 3, 2); int sc; scanf("%d", &sc); return 0; } void inserisci(int * table[3][3],int x, int y, int val) { *table[x][y] = val; }
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jun 2000
Messaggi: 60
|
Forza 4
ho provato a far girare su DEVC++ il programma ideato da Luc@s
Va quasi bene, e infatto gia lo ringrazio davvero, grazie Luc@s!! Pero ci sn dei ritocchi da fare, perche mi da 3 errori nella compilazione, e quando lo faccio giare parte la shell del terminale ma ad un certo punto dopo aver disegnato la matrice si blocca, la matrice cmq deve essere di 7 colonne e 6 righe: Gli errori che mi da sn i seguenti: [Warning] In function `main' [Warning] passing arg 1 of `inserisci' from incompatible pointer type ( alla riga 21 ) [Warning] passing arg 1 of `inserisci' from incompatible pointer type ( alla riga 22 ) Sapresti dirmi perche me li da Luc@s? Grazie di nuovo , Alessandro |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2003
Messaggi: 283
|
Secondo me quel prog. non fa nulla
![]() Cmq il problema credo sia nel puntatore, elimita l'asterisco in ogni punto della funzione (anche dal prototipo) e quando la richiami dal main non ci mettere & davanti al nome della matrice. Ciao
__________________
/*** * Nulla è impossibile per chi non deve farlo ***/ |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jun 2000
Messaggi: 60
|
gioco forza 4
il programma mi da come output ina matrice 3*3 inizializzata a zero, e invece doverbbe darmi una matrice con 7 colonne e 6 righe... poi quando metto un numero mi si chiude subito la finestra del terminale, qualcuno sa come risolvere il problema ??
Ecco il programma #include <stdio.h> #include <stdlib.h> void inserisci(int table[3][3], int x, int y, int val); int main() { int table[3][3] = {0}; int i; int j; int y; for(i=0;i<3;i++) printf("\t%d", table[0][i]); printf("\n"); for(j=0;j<3;j++) printf("\t%d", table[1][j]); printf("\n"); for(y=0;y<3;y++) printf("\t%d", table[2][y]); printf("\n"); inserisci(table, 1, 1, 1); inserisci(table, 1, 3, 2); int sc; scanf("%d", &sc); return 0; } void inserisci(int table[3][3],int x, int y, int val) { table[x][y] = val; } |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
int table[3][3] = {0};
Come fai a fare una matrice 6x7 se qui la dichiari 3x3 ? Inoltre {0} non inizializza una matrice a zero... |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: gioco forza 4
Quote:
|
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: May 2003
Messaggi: 283
|
Re: Re: gioco forza 4
Quote:
![]() Non si è preso neanche la briga di leggere quelo che gli abbiamo scritto. Non ho capito però cosa ci fa in programmazione uno che fa di tutto tranne programmare ![]()
__________________
/*** * Nulla è impossibile per chi non deve farlo ***/ |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Re: Re: Re: gioco forza 4
Quote:
![]()
__________________
Gnu/Linux User ![]() |
|
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Oct 2000
Messaggi: 552
|
:-)
Fai informatica alla Sapienza?
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Re: :-)
Quote:
__________________
Gnu/Linux User ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:17.