View Full Version : Implementare chiamata gioco (C)??
Salve a tutti,
dovrei chiedervi una cosa:
devo creare il gioco HALMA in formato C, ho gia scritto questo pezettino:
printf("\n\nIMMETTI NOME 1 GIOCATORE:\n");
gets(g1);
printf("\n\nIMMETTI NOME 2 GIOCATORE:\n");
gets(g2);
printf("\nPartecipano alla partita di Halma:\n");
printf("\n\n1 Giocatore : %s",g1);
printf("\n\n2 Giocatore : %s",g2);
menu(z);
}
void menu(int menu) // Funzione richiamo comando help/gioco
{
int z;
printf("\n\n**** MENU DI GIOCO ****:\n");
printf("- Scegli opzione 1 per Help;\n");
printf("- Scegli opzione 2 per giocare;\n");
scanf("%d",&z);
switch (z)
{
case 1:
printf("\nHai scelto opzione Help\n");
help(z);
break;
case 2:
printf("\nHai scelto opzione Gioco\n");
break;
default:
printf("\nErrore!!!\n");
printf("Inserisci solo 1 (Help) o 2 (Gioco)\n\n");
break;
}
}
void help(int help) // funzione richiamo se scegliamo opzione help
{
printf("\n\nRegole del gioco:\n\n");
printf("Predisporre le 19 pedine disposte negli angoli opposti.\n");
printf("Il gioco consiste nel portare le proprie pedine nell'angolo avversario.\n");
printf("Il giocatore effettua una mossa per volta e in tutte le direzioni.\n");
printf("Si puo' anche eseguire salti sopra una propria o avversaria pedina.\n");
printf("Il salto non e' obbligatorio.\n");
printf("La catena si interrompe a piacimento del giocatore.\n\n");
}
il problema sorge quando scelgo opzione gioco... cioè ora devo fare in modo che inizi il gioco.... ma nn so come; cioè dovro incomicniare a fare le mosse ect ma como posso fare?
Fenomeno85
13-10-2005, 19:57
1 indenta il codice che se no non si capisce una mazza ... poi non ho capito che vuoi .. vuoi che quando premi 2 inizia il gioco? chiama la funzione nello switch non vedo il problema.
~§~ Sempre E Solo Lei ~§~
Salve,
quel pezzo che ho scritto fa comparire a video le due domande:
-immetti nome giocatore1
-immetti nome giocatore2
poi viene visualizzato il menu con scritto:
- digita 1 se vuoi help
- digita 2 se vuoi giocare
se scrivo 1 mi compare help(mi viene richiamata la funzione help) con le regole del gioco; se scrivo 2 mi compare la risposta ' hai scelto opzione gioco puoi giocare' (mi viene richiamata la funzione gioco che sotto nn avevo messo scusate);
a questo punto il problema è questo:
cian detto che dobbiamo implementare le mosse, cioè se uno scegli opzione 2 cioè giocare deve partire il gioco... non so che istruzioni usare per implementare le mosse??????????????????
qualche idea??
son stato tutto oggi ma nn saprei proprio come dare i comandi per creare una mossa ad esempio mi sposto in su o in giu come nella dama..... :(
un altra cosetta, ho visto che se stampo con la printf il carattere ascii 196, mi crea uhna linetta tipo questa "-", se pero vorrei diciamo evidenziare/farla in grassetto tale linetta in modo che sia piu visibile rispetto le altre, come posso fare??
qualche idea??
son stato tutto oggi ma nn saprei proprio come dare i comandi per creare una mossa ad esempio mi sposto in su o in giu come nella dama..... :(
un altra cosetta, ho visto che se stampo con la printf il carattere ascii 196, mi crea uhna linetta tipo questa "-", se pero vorrei diciamo evidenziare/farla in grassetto tale linetta in modo che sia piu visibile rispetto le altre, come posso fare??
case 2:
printf("\nHai scelto opzione Gioco\n");
........ qui metti la funzione che inizia il gioco come hai fattp per l'Help
break;
Fenomeno85
14-10-2005, 18:19
case 2:
printf("\nHai scelto opzione Gioco\n");
........ qui metti la funzione che inizia il gioco come hai fattp per l'Help
break;
secondo me vuole la funzione :D
~§~ Sempre E Solo Lei ~§~
secondo me vuole la funzione :D
~§~ Sempre E Solo Lei ~§~
procediamo per gradi..............vediamo come si evolve la situazione
case 2:
printf("\nHai scelto opzione Gioco\n");
........ qui metti la funzione che inizia il gioco come hai fattp per l'Help
break;
la funzione li l'ho gia messa, a quel punto ci sono....sono arrivato proprio qui.....
il mio problema è che nn so come potergli dare le istruzioni per le mosse, cioè se usare i vettori, o le matrici, o i puntatori, o ect ect nn lo so..... :(
per quello che chiedevo a voi una mano.....??
Fenomeno85
14-10-2005, 20:06
scusa ma se la funzione l'hai fatta implica che hai già strutturato il tutto.
Io la farei con una matrice di struttura. Con una struttura che ti contiene tutte le informazioni della cella.
~§~ Sempre E Solo Lei ~§~
ecco volevo sapere quello li, xche ho implementato tutto ma nn sapevo poi come costruire il codice per far le mosse.....
xche ho una tabella (disegnata con printf) di 16X16 dove nelle 19 caselle dei lati, all'interno di ogni casella ho messo una pedina (printf("%c",254)).....
quello che devo fare è il gioco dell'halma è tipo una dama cinese, e quindi ad ogni mossa che dara o giocatore1 o giocatore2 ste pedine si devono muovere.... è quello che nn capisco come fare??
Spostale all'interno di una matrice e stampa nuovamente il campo di gioco dopo ogni mossa...
una mezza idea ora me la son fatta, se avro problemi vi diro :D cmq grazie mille....
una cosa, io utilizzo Visual Studio C++ 6.0 e mi domandavo se posso anche installare il DevC++5 ??
installate anche il dev in un pc dove c'è visualstudio puop portare dei conflitti??
Fenomeno85
15-10-2005, 16:22
No, vai tranquillo...
non è il massimo cmq :D dev ha un editor che fa alquanto pena :O
~§~ Sempre E Solo Lei ~§~
Rispetto a Visual di sicuro...
fantoibed
15-10-2005, 18:34
Io come edito uso ultraedit32. Con quello di visual studio non mi trovo bene. Sotto linux uso/avo vim.
Salve,
mi sono fatto la matrice relativa alla tabella del gioco, ora pero nn capisco come posso fare in modo che riesca a spostare le variabili all'interno di essa.....
Se devi muovere una pedina da x1,y1 a x2,y2, supponendo una matrice di interi (ma anche di char):
m[x2][y2] = m[x1][y1];
m[x1][y1] = 0;
ah ok grazie, pero quando scrivo nella funzione relativa all'implementazione del gioco, quindi:
void imp_gioco(int imp_gioco)
{
int matrice[16][16]; // Mi da errore!!!!
}
xche ??
Fenomeno85
16-10-2005, 10:17
la cosa non mi quadra per nulla ... il codice a meno che in questo momento son rincoglionito è corretto. Posta esattamente l'errore che ti da.
~§~ Sempre E Solo Lei ~§~
allora il codice è il seguente:
void imp_gioco(int imp_gioco)
int main()
{
// qui dentro ci sono altre istruzioni printf per creare la tabella 16x16 ect ect
}
void imp_gioco(int imp_gioco) // Inizio implementazione matrice del gioco
{
printf("matrice del gioco");
int matrice[2][3]={{1,2},{5,7,8}};
}
MI DICE: error C2143: syntax error : missing ';' before 'type'
nn riesco a capire xche mi da sto errore ??
In colla tutto il codice...
son riuscito a trovare il problema, stranamente avevo messo una coppia di parentesi graffe in meno :-).......
ora cosi mi posso buttare a creare la matrice per implementare e diverse mosse.....
ho scritto questo codice:
void implementazione(int implementazione) // Inizio implementazione matrice del gioco
{
printf("\n\n");
{
int i,j;
char mat[16][16];
char c1,c2,c3;
c1=1;
c2=255;
c3=2;
printf(" Matrice Gioco\n\n");
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
printf(" %c",c3,mat[i][j]);
}
printf("\n");
}
for(i=2,j=0;i<3,j<4;i++,j++)
{
for(j=0;j<4;j++)
{
printf(" %c",c3,mat[i][j]);
}
printf("\n");
}
for(i=3,j=0;i<4,j<3;i++,j++)
{
for(j=0;j<3;j++)
{
printf(" %c",c3,mat[i][j]);
}
printf("\n");
}
for(i=4;i<5;i++)
{
for(j=0;j<2;j++)
{
printf(" %c",c3,mat[i][j]);
}
}
// ciclo altre pedine a destra in basso
printf("\n");
for(i=5;i<10;i++)
{
for(j=0;j<1;j++)
{
printf(" %c",c2,mat[i][j]);
}
printf("\n");
}
for(i=11;i<12;i++)
{
for(j=0;j<13;j++)
{
printf(" %c",c2,mat[i][j]);
}
for(j=14;j<16;j++)
{
printf(" %c",c1,mat[i][j]);
}
printf("\n");
}
for(i=12;i<13;i++)
{
for(j=0;j<12;j++)
{
printf(" %c",c2,mat[i][j]);
}
for(j=13;j<16;j++)
{
printf(" %c",c1,mat[i][j]);
}
printf("\n");
}
for(i=13;i<14;i++)
{
for(j=0;j<11;j++)
{
printf(" %c",c2,mat[i][j]);
}
for(j=12;j<16;j++)
{
printf(" %c",c1,mat[i][j]);
}
printf("\n");
}
for(i=14;i<=15;i++)
{
for(j=0;j<10;j++)
{
printf(" %c",c2,mat[i][j]);
}
for(j=11;j<16;j++)
{
printf(" %c",c1,mat[i][j]);
}
printf("\n");
}
printf("\n\n");
}
mi crea a video la disposizione delle mie pedine... ora pero devo creare le mosse, e avevo pensato di dare le mosse e ogni volta di ristampare le pedine ma aggiornate cioè con le mosse fatte.... quel codice va bene? devo creare per le mosse?
devo creare una matrice che mi stampi la tabella che è al seguente indirizzo:
http://gilda/ludomax/giochi/halma.htm
mi han detto che è possibile farlo in pochi cicli for ma com'è??
io l'ho fatta ma mi son usciti un sacco di cicli for come ho scritto nel post sopra........
Certo...
printf(" %c",c3,mat[i][j]);
In quel modo non stampi mai il contenuto di mat[i][j]
Deve essere il contenuto di mat[i][j] a discriminare il carattere stampato...
Devi stampare tutto il contenuto di mat[i][j]... Con due for si risolve tutto...
con due cicli for, ma com'è possibile ?
xche ok devo stampare il contenuto di mat[i][j], pero dichiarando solo char mat[16][16]; non passo nussun valore.....
mi puoi dire come perpiacere che non capisco?
Devi inizializzare mat a 0 (per tutti gli elementi)...
Poi, non conosco il gioco faccio un esempio, metti un 1 nella posizione [i][j] se la casella è occupata da un pedina...
mi deve venire fuori cosi:
c'è la mi matrice 16x16
*****
*****
****
***
**
**
***
****
*****
*****
le pedine inizialmente devon essere poste in quesro modo;
Inizializza con due for la matrice tutta con il carattere spazio ' '...
Dopo:
mat[0][0] = mat[0][1] = mat[0][2] = mat[0][3] = mat[0][4] = '*';
mat[1][0] = mat[1][1] = mat[1][2] = mat[1][3] = mat[1][4] = '*';
mat[2][0] = mat[2][1] = mat[2][2] = mat[2][3] = '*';
e così via...e con due for visualizzi tutto il contenuto della matrice...
Le pedine le devi inserire nelle caselle altrimenti non farai mai alcun movimento...
ho fatto cosi:
int i,j;
char PED_GIOCO =' ';
char mat[16][16];
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
//printf("%c",PED_GIOCO,mat[i][j]);
}
//printf("\n");
}
// ho inizializzato la matrice al valore ' ' ;
mat[0][0]=mat[0][1]=mat[0][2]=mat[0][3]=mat[0][4]='*';
mat[1][0]=mat[1][1]=mat[1][2]=mat[1][3]=mat[1][4]='*';
mat[2][0]=mat[2][1]=mat[2][2]=mat[2][3]='*';
mat[3][0]=mat[3][1]=mat[3][2]='*';
mat[4][0]=mat[4][1]='*';
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
printf("%c",scacchiera[i][j]);
}
printf("\n");
}
giusto??
facendo cosi mi stampa la le righe delle pedine ma poi negli altri spazi che dovrebbere rimanere vuoti mi stampa altri valori a caso xche??
Perchè, come ti ho già detto, devi inizializzare la amtrici con gli spazi !!!
ok ho messo infatti char mat[16][16]={' '};
e mi stampa tutto bene, grazie mille :D ma sopratt per la pazienza ;)
posso chiederti un altra cosa, se devo muovere ste pedine ora, xche è dama cinese il gioco quindi devo spostare le pedine , come potrei fare?
Se devi muovere da [3][2] a [4][2] metti uno spazio in [3][2] e metti un * in [4][2]..
ah capito, ma cmq c'è un modo di far si che muovendo la pedina non ristampi una nuova diciamo scacchiera con la pedina mossa, ma che veda direttamente sullo schermo la pedina che si muove dopo che ho dato il comando??
Sì, ma non usando il C standard...
ah e come si chiamerebbe l'altro metodo?
se cmq non è possibile, dovro creare un qualcosa che quando ho dato la mossa mi ristampi la scacchiera in modo aggiornato cioè con la pedina che si è mossa, pero me la deve ristampare diciamo sopra a quella prima xche se no stamperei un sacco di scacchiere o no?
Il metodo non standard è gotoxy che era presente nel Turbo C di Borland e che alcuni ambienti hanno adottato (libreria conio.h, anche questa non standard)...
Sì, devi ristampare la scacchiera... Puoi stampare la scacchiera + altre tot linee per far sparire l'altra dallo schermo (sempre che sia a 25 linee)...oppure cancelli lo schermo...
Un versione abbastanza portabile di funzione che cancella lo schermo è questa:
void cancellaSchermo()
{
#ifdef WIN32
system("CLS");
#else
system("clear");
#endif
}
In pratica sui sistemi Windows esegue il comando CLS e su quelli Linux/Unix (anzi in questo caso per tutti quelli diversi da Windows) il comando clear...
Grazie non lo conoscevo questo comando, ho richiamato la funzione che mi hai scritto te subito dopo che ho stampato la matrice con le pedine posizionate...
pero ho notato che mi stampa la matrice ma dopo max 2 secondi mi cancella lo schermo....
come posso fare per far si che prima che mi cancelli lo schermo riesca a immettere la nuova posizione delle pedine??
Strano...non capisco dove questo ritardi di 2 secondi sia inserito...il problema è altrove...
cioè nel senso che:
arriva la funzione che mi stampa la matrice con le pedine
****
****
***
**
**
***
****
****
ok, e subito dopo mi pulisce lo schermo cioè mi cancella la matrice.....
xche le istruzioni che mi hai detto tu le richiamo subito dopo che stampo la matrice....
La devi chiamare subito prima di stamapre la matrice aggiornata, non dopo...
ah ok capito, c'è un metodo non so una funzione clock che ti fa partire la pulizia del video dopo tot secondi?
infine, la funzione pulizia mi cancella proprio tutto il video, quindi titolo del gioco ect ect, ce un modo per far cancellare solo la matrice?
qualche aiutino??
perpiacere.............
un metodo con i puntatori non ci sarebbe?
cioè io stampo la mia matrice iniziale, poi in un altra funzione chiedo:
inscerisci le coordinate della pedina, e li sposto di conseguneza la pedina, poi è possibile non ristampare una nuova matrice ma modificare quella gia stampata??
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.