Cronometro

Messaggioda CrisLoveStefy » 12/08/2006, 00:24

Salve ragazzi vorrei capire come utilizzare la funzione time.h e potreste darmi una mano a creare un cronometro da implementare che effettua il conteggio alla rovescia e cioè che devo creare un timer per il mio gioco in c++. Grazie
Chi trova un amico trova il tesoro!
CrisLoveStefy
New Member
New Member
 
Messaggio: 34 di 70
Iscritto il: 22/06/2006, 17:45

Re: Cronometro

Messaggioda carlo23 » 12/08/2006, 10:22

CrisLoveStefy ha scritto:Salve ragazzi vorrei capire come utilizzare la funzione time.h e potreste darmi una mano a creare un cronometro da implementare che effettua il conteggio alla rovescia e cioè che devo creare un timer per il mio gioco in c++. Grazie


Se vuoi creare un cronometro ti dovrebbe essere suffciente la libreria windows.h che contiene la funzione Sleep().

Comunque imparare a usare time.h non è certo una cattiva cosa, per curiosità il tuo gioco in C++ di che tratta? :D
carlo23
Senior Member
Senior Member
 
Messaggio: 1197 di 1683
Iscritto il: 01/11/2005, 19:38

Messaggioda gigilatrottola » 12/08/2006, 12:49

dici che lavora in multithreading?
Avatar utente
gigilatrottola
Junior Member
Junior Member
 
Messaggio: 94 di 223
Iscritto il: 21/08/2005, 15:54

Messaggioda carlo23 » 12/08/2006, 13:18

gigilatrottola ha scritto:dici che lavora in multithreading?


Così com'è no, poichè appena viene usata Sleep() arresta l'intero codice.

Comunque se si fa un gioco più o meno complicato è buonacosa dividere le operazioni in intervalli di tempo uguali per evitare improvvise accellerazioni del gioco quando il computer si trova a fare pochi calcoli (in ogni caso dipende dal tipo di gioco), per implementare un cronometro è sufficiente fare

Codice:
int t=0;

void GAME() {

// Qua sta il codice del gioco

t++;
Sleep(1); // Un millisecondo sarà troppo tempo?
if(t==1000)
   {
        t=0;
        // Qua sta il codice che deve venir eseguito ogni secondo
   }
}


Ovvio che se si vuole ottenere una precisione notevole è necessario ricorrere a una libreria tipo time.h
carlo23
Senior Member
Senior Member
 
Messaggio: 1198 di 1683
Iscritto il: 01/11/2005, 19:38

Memory

Messaggioda CrisLoveStefy » 12/08/2006, 17:44

Ehm scusate il ritardo. Allora il mio gioco è memory costruito e compilato in dev-c++.
Volevo implementare al di sopra della matrice oltre ai punti e ai tentativi anche il tempo di scadenza del gioco. Come faccio?
Se volete vi allego il mio prog. Ma non riesco. Anzi ve lo copio qui ma è lunghissimo. Cmq guardatelo e ditemi dove devo implementare il timer. Grazie infinite.

#include <stdio.h>
#include <stdlib.h>

#define N_RIG 4 //definisce il numero di righe della matrice
#define N_COL 4 //definisce il numero di colonne della matrice
#define LETTERE 16 //definisce il numero dei partecipanti (in questo caso sono le coppie di numeri da 1 a 8)
//all'estrazione casuale per essere in seguito immesse nella matrice del Gioco
#define LUNG_NOME 1 //definisce la lunghezza del nome (in questo caso la lunghezza dei numeri)


char matrice[N_RIG][N_COL]; //variabile character: dichiarazione della matrice attraverso il nuomero di righe e colonne
int nomiScelti[LETTERE]; //variabile integer: dichiarazione di tutti i numeri che verranno estratti e inseriti randomicamente nella matrice
int numeriDisponibili = LETTERE; //variabile integer: dichiarazione in cui i numeriDisponibili sono dati dall'insieme di numeri da estrarre randomicamente
char matriceGioco[4][4]; //variabile character: matrice che permette di mantenere lo stato del gioco
int tentativi; //variabile integer: dichiarazione dei tentativi usati durante il gioco
int numerogiocate; //variabile integer: dichiarazione del numero di gocate

int numeroRandom(int lBound, int uBound); //variabile integer: funzione random che estrae casualmente ogni numero dichiarato nell'insieme e inserito volta per vlta nella matrice
int selezionaUtente(int lBound, int uBound); //variabile integer: scelta casuale dei numeri

int punti;

void visualizzamatrice(void); //variabile puntatore void riferito alla visualizzazione della tabella (matrice)
void istruzioni(void);
int punteggiofinale();

int main() // inizio programma
{
char opzione; //variabile character: dihiarazione dell'opzione di scelta
int stop =1; // dichiarazione dello stop iniziale del programma per consentire all'utente di scegliere una delle opzioni
int riga_carta1, colonna_carta1, riga_carta2, colonna_carta2, carta1, carta2, vittoria, finePartita; // dichiarazioni della riga e colonna delle carte 1 e 2, vittoria e fine partita
int errore, countVit; // dichiarazione dell'errore di inserimento di un carattere e del contatore per la vincita

while (stop) // inizio del ciclo con stop iniziale del programma

{ /////// Stampa interfaccia grafica iniziale e a basso livello del gioco
printf(" %c----------------------------------------%c\n",184,184); //stam
printf(" | * * **** * * ***** **** * * |\n");
printf(" | ** ** * ** ** * * * * * * |\n");
printf(" | * * * **** * * * * * **** * |\n");
printf(" | * * * * * * * * * * |\n");
printf(" | * * **** * * ***** * * * |\n");
printf(" %c----------------------------------------%c\n",184,184);
printf(" %c----------------------------------------%c\n",184,184);
printf(" | @ @ @@@@ @ @ @@@@@ @ @ @ |\n");
printf(" | @ @ @ @ @ @ @ @ @ @ |\n");
printf(" | @ @ @ @@@@ @ @ @ @ @ @@@@ @ |\n");
printf(" | @@ @@ @ @@ @@ @ @ @ @ @ @ |\n");
printf(" | @ @ @@@@ @ @ @@@@@ @@@@ @ @ |\n");
printf(" %c----------------------------------------%c\n",184,184);
printf("\n");
printf(" *Versione Trial*\n");
printf(" *By Cris!*\n");
printf("\n");
printf("\n %c- A -%c Gioca",184,184);
printf("\n %c- B -%c Info",184,184);
printf("\n %c- C -%c Esci",184,184);
printf("\n > ");
fflush(stdin); // funzione di flusso di dati
scanf("%c",&opzione); // scansione del tasto premuo dall'utente
system("cls"); // sistema di pulizia dello stampato precedente

switch(opzione) // serve per effettuare decisioni multiple sulla base di una variabile. Esso prevede varie etichette case più una opzionale break e default.
{ //// queste etichette servono a dire al programma di eseguire una delle opzioni sceltedall'utente
case 'a':
case 'A':
{

int i,j; // dichiarazione di righe e colonne matrice
int k, fortunato; // dichiarazione di k,fortunato che sarebbe il numero estratto casualmente

char scelta; //variabile character:
char elencoNomi[LETTERE][LUNG_NOME+1] = {"A","B","C","D","E","F","G","H","A","B","C","D","E","F","G","H"};
for (i = 0; i < N_RIG; i++)
{
for (j = 0; j < N_COL; j++)
{
while (numeriDisponibili > 0) // affinchè in numeri disponibili sono presenti calcol randomicamente la matrice
{
fortunato = selezionaUtente(0,LETTERE);
matrice[i][j]= *elencoNomi[fortunato];
//printf("Matrice [%d] [%d] = %c\n",i,j,matrice[i][j]); //stampa matrice
break;
}
}
}

}
char nome_giocatore[30]; //variabile character: matrice per tener traccia del nome del giocatore
printf("Inserire nome giocatore\n"); // stampa richiesta del nome del giocatore
printf("\n");
scanf("%s",nome_giocatore); // lettura del nome del giocatore
printf("\n");
system("cls"); // pulizia
printf("\n");

///////CARICAMENTO MATRICE GIOCO///////

int i, j;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
matriceGioco[i][j] = ' ';

tentativi = 9;
punti = 0;
/*do ///////////ciclo del conto vittoria///////
{ */
do ////////ciclo verifica carte
{

system("cls");
printf(" %c NOME GIOCATORE %c \n",1,1);
printf("\n");
printf(" *-%s-*\n\n\n\n ",nome_giocatore);
visualizzamatrice();


//////////////richiesta carte da scoprire nel gioco e controllo se sono uguali il programma va avanti al contrario cancella le carte sbagliate e rivisualizza
//////////////la matrice con la coppia giusta precedentemente scelta.
finePartita = 5;

printf("*- Numero riga CARTA 1 -*\n");
fflush(stdin);
scanf("%d",&riga_carta1); //funzione scanf: lettura riga della prima carta
if (riga_carta1 == 4)
{
finePartita = 1;
system("cls");
break;
}
if (riga_carta1 == 5)
{
istruzioni();
system("cls");
visualizzamatrice();
}
printf("*- Numero colonna CARTA 1 -*\n");
fflush(stdin);
scanf("%d",&colonna_carta1); //funzione scanf: lettura colonna della prima carta
if (colonna_carta1 == 4)
{
finePartita = 1;
system("cls");
break;
}
if (colonna_carta1 == 5)
{
istruzioni();
system("cls");
visualizzamatrice();
}
if (((riga_carta1 >=0) && (colonna_carta1 >=0)) && ((riga_carta1 <=3) && (colonna_carta1 <=3))) //verifica se la carta è compresa nella matrice
{
// printf("CARTA 1: (%d;%d) \n",riga_carta1,colonna_carta1); // stampa coordinate della prima carta
matriceGioco[riga_carta1][colonna_carta1] = matrice[riga_carta1][colonna_carta1]; //mostra la carta nella matrice
// system("pause");
system("cls");

visualizzamatrice(); //visualizza matrice

printf("*- Numero riga CARTA 2 -* : \n");
fflush(stdin);
scanf("%d",&riga_carta2); //funzione scanf: lettura riga della seconda carta
if (riga_carta2 == 4)
{
finePartita = 1;
system("cls");
break;
}
if (riga_carta2 == 5)
{
istruzioni();
system("cls");
visualizzamatrice();
}
printf("*- Numero colonna CARTA 2 -* : \n");
fflush(stdin);
scanf("%d",&colonna_carta2); //funzione sacanf: lettura colonna della seconda carta
if (colonna_carta2 == 4)
{
finePartita = 1;
system("cls");
break;
}
if (colonna_carta2 == 5)
{
istruzioni();
system("cls");
visualizzamatrice();
}

if (((riga_carta2 >=0) && (colonna_carta2 >=0)) && ((riga_carta2 <=3) && (colonna_carta2 <=3)))
{
// printf("CARTA 2: (%d;%d) \n",riga_carta2,colonna_carta2);
// system("pause");
matriceGioco[riga_carta2][colonna_carta2] = matrice[riga_carta2][colonna_carta2];
// visualizzamatrice();
//int tempo; for (tempo=0 ; tempo < 1000000 ; tempo ++);
// system("pause");
//system("cls");
//visualizzamatrice();
//tentativi++;
numerogiocate++;
if (matriceGioco[riga_carta1][colonna_carta1] != matriceGioco[riga_carta2][colonna_carta2])
{
//printf("\a");
//printf("\a");

tentativi--;
punti--;
visualizzamatrice();
printf("Hai sbagliato, ritenta!!!\n\n\n\n");
system("PAUSE");

if (tentativi == 0)
{
printf("Siamo spiacenti, hai consumato tutti i tentativi! Ritenta!!\n\n");
system("PAUSE");
system("cls");
break;
}
matriceGioco[riga_carta1][colonna_carta1]= ' ';
matriceGioco[riga_carta2][colonna_carta2]= ' ';
system("cls");
visualizzamatrice();

}
else
{
//printf("\a");
punti++;
punti++;
visualizzamatrice();
printf("Bravo!!!!Hai indovinato la coppia giusta!\n\n");
system("PAUSE");
system("cls");
}


}
}
}
while (numerogiocate<16);



break;

case 'b':
case 'B':
printf(" %c Info %c",15,15);
printf("\n");
printf(" %c AUTORE %c",1,1);
printf("\n");
printf("\n Nome: Cristian");
printf("\n Cognome: Capannini");
printf("\n Professione: Studente ");
printf("\n Universita': Scienze dell'informazione - Cesena");
printf("\n E-mails: [email protected]");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
system("PAUSE");
system("cls");
break;
case 'c':
case 'C':
system("color 0F");
printf("\n G");
system("cls");
printf("\n GR");
system("cls");
printf("\n GRA");
system("cls");
printf("\n GRAZ");
system("cls");
printf("\n GRAZI");
system("cls");
printf("\n GRAZIE");
system("cls");
printf("\n GRAZIE P");
system("cls");
printf("\n GRAZIE PE");
system("cls");
printf("\n GRAZIE PER");
system("cls");
printf("\n GRAZIE PER A");
system("cls");
printf("\n GRAZIE PER AV");
system("cls");
printf("\n GRAZIE PER AVE");
system("cls");
printf("\n GRAZIE PER AVER");
system("cls");
printf("\n GRAZIE PER AVER S");
system("cls");
printf("\n GRAZIE PER AVER SC");
system("cls");
printf("\n GRAZIE PER AVER SCE");
system("cls");
printf("\n GRAZIE PER AVER SCEL");
system("cls");
printf("\n GRAZIE PER AVER SCELT");
system("cls");
printf("\n GRAZIE PER AVER SCELTO");
system("cls");
printf("\n GRAZIE PER AVER SCELTO M");
system("cls");
printf("\n GRAZIE PER AVER SCELTO ME");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEM");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMO");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMOR");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!!");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!!!");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!!!!");
stop = 0;
break;
}
}
printf("\n\n\n\n");
system("PAUSE");
return 0;
}

/////funzioni per inserire randomicamente i numeri già dichiarati nella matrice////
int selezionaUtente(int lBound, int uBound)
{
int scelta;
int k;

while (1)
{
scelta = numeroRandom(lBound,uBound);
if (nomiScelti[scelta] == 0)
{
nomiScelti[scelta] = 1;
numeriDisponibili--;
break;
}
}
return scelta;
}

int numeroRandom(int lBound, int uBound)
{
int valore, diff;
diff = uBound-lBound;
if (diff != 0)
return lBound + (rand()+time(NULL))%(diff);
else
return lBound;
}

void visualizzamatrice(void) //visualizzatore matrice che viene richiamato ogni volta che si gioca
{

system("color 0F");

printf(" %c Tempo: 00:00:00 %c %c Punti: %d %c Numero Tentativi = %d %c",1,1,1,punti,1,tentativi,1);
printf("\n");
printf("\n");
printf("\n");
printf(" 0 1 2 3\n");
printf(" *****************\n");
printf(" 0 * %c * %c * %c * %c *\n",matriceGioco[0][0],matriceGioco[0][1],matriceGioco[0][2],matriceGioco[0][3]);
printf(" *****************\n");
printf(" 1 * %c * %c * %c * %c *\n",matriceGioco[1][0],matriceGioco[1][1],matriceGioco[1][2],matriceGioco[1][3]);
printf(" *****************\n");
printf(" 2 * %c * %c * %c * %c *\n",matriceGioco[2][0],matriceGioco[2][1],matriceGioco[2][2],matriceGioco[2][3]);
printf(" *****************\n");
printf(" 3 * %c * %c * %c * %c *\n",matriceGioco[3][0],matriceGioco[3][1],matriceGioco[3][2],matriceGioco[3][3]);
printf(" *****************\n");
printf("\n");
printf("\n");
printf("[4 per uscire 5 per Help]");
printf("\n");
printf("\n");
printf("\n");
}
void istruzioni(void)
{
printf(" %c ISTRUZIONI %c",1,1);
printf("\n");
printf("\n In questo gioco devi trovare 8 coppie");
printf("\n di lettere uguali. Per trovarle");
printf("\n vi verranno chieste le coordinate per");
printf("\n scoprirle. Se hai individuato la coppia giusta,");
printf("\n si va avanti finchè non si esauriscono le carte se no");
printf("\n ritorni alla coppia precedentemente individuata.");
system("PAUSE");
system("cls");

visualizzamatrice();
}
int punteggiofinale() // a seconda del numero di giocate effettuate il programma ci dirà la nostra qualità di giocatore.
{
if (numerogiocate<=8 && numerogiocate>=12)
{
printf("COMPLIMENTI!!");
}
if (numerogiocate<=13 && numerogiocate>=17)
{
printf("MEDIOCRE..!!");
}

if (numerogiocate<=18 && numerogiocate>=22)
{
printf("SCARSO...!!");
}
}
Chi trova un amico trova il tesoro!
CrisLoveStefy
New Member
New Member
 
Messaggio: 35 di 70
Iscritto il: 22/06/2006, 17:45

Messaggioda CrisLoveStefy » 12/08/2006, 17:46

Se non riuscite a fare qualcosa datemi le vostre e-mail che ve li invio lì. Grazie.
Chi trova un amico trova il tesoro!
CrisLoveStefy
New Member
New Member
 
Messaggio: 36 di 70
Iscritto il: 22/06/2006, 17:45

Re: Memory

Messaggioda carlo23 » 12/08/2006, 18:25

CrisLoveStefy ha scritto: printf("\n GR");
system("cls");
printf("\n GRA");
..............................................................
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!!!");
system("cls");
printf("\n GRAZIE PER AVER SCELTO MEMORY!!!!!");


Cris, sarebbe meglio non postare listati così lunghi, in modo da semplificare la visione dei post..ok?

Se vuoi far avere accesso a dei tuoi lunghi listati a degli utenti di questo o un altro forum potresti inserire il link per il download da qualche server tramite ftp...

Per quanto riguarda il pezzo del codice dove ringrazi per aver scelto memory, beh si può abbreviare notevolmente.

Ad esempio dichiarando un vettore stringa

Codice:
char* THANKS=new char[33]="GRAZIE PER AVER SCELTO MEMORY!!!!!";

for(int i=0;i<=33;i++)
     {
          cout<<THANKS[i];
          Sleep(100);
     }


qui sopra scrive una lettera del ringraziamento alla volta, con altri cicli for puoi farli fare ciò che vuoi. :wink:
carlo23
Senior Member
Senior Member
 
Messaggio: 1201 di 1683
Iscritto il: 01/11/2005, 19:38


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite