Krzywilk Napisano Maj 21, 2013 Zgłoś Share Napisano Maj 21, 2013 Witam W mojej "grze" wywołuje stoper, który ma zakończyć się po przejściu pętli (sam wątek startuje poza nią), i teraz moje pytanie jak to zrobic? #include <iostream> #include <conio.h> #include <time.h> #include <stdlib.h> #include <windows.h> #include <fstream> #include <string> #include <process.h> using namespace std; typedef unsigned short USHORT; HANDLE g_handle; void SetPos(USHORT x,USHORT y) { COORD cp = {x,y}; SetConsoleCursorPosition(g_handle,cp); } void narysujPlik(string _nazwa) { string linia; ifstream plik (_nazwa.c_str()); if (plik.is_open()) { while ( plik.good() ) { getline (plik,linia); cout << linia << endl; } plik.close(); } else { cout << "Plik nie mogl zostac otwarty!" << endl; } } int zapis (float wynik,char imie[50], int czas) { ofstream wyniki; wyniki.open("wynik.txt",ios::app); wyniki<<imie<<" "<<wynik<<"kg "<<czas<<"ms "<< endl; wyniki.close(); } DWORD WINAPI stoper(PVOID pvParam) { int start2; int sekundy, setne; int o =0; start2 = clock(); while(o=1) { sekundy = clock() - start2 ; setne = sekundy%1000/10; sekundy /= 1000; printf(" %d : %2d : %2d : %2d\r", sekundy/3600, (sekundy/60)%60, sekundy%60, setne); } return 0; } int main() { int przedzial,proby,poprawne=0,niepoprawne=0,bledy=0, kill=0;float wynik;//Zmienne okreslone konkretna nazwa (zmienne liczb ktore sa w dobrym miejscu itp.). int los[5],moje[5],nieodpowiednie[5],odpowiednie[5];//"Nieodpowiednie"-tablica pomocnicza w ktorej zapisywane sa dane na temat liczb ktore sa ale nie tam gdzie powinny, "odpowiednie"-tablica pomocnicza w ktorej zapisywane sa dane na temat liczb ktore sa tam gdzie powinny, "moje"-liczby gracza, "los"-liczby wylosowane. int i,j,w,k,c,z;//Zmienne nie okreslone konkretna nazwa (petle itp.). char inne,zlecenie, pow, imie[50];//Zmienne typu "char". long long int czas;//Zmienna potrzebna do mierzenia czasu. cout<<"Podaj login "; cin>>imie; cout<<"Logowanie";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"\n"; g_handle = GetStdHandle(STD_OUTPUT_HANDLE); srand(time(0)); clock_t start, stop; narysujPlik("Ziemia.txt"); cout<<"\n"<<"Gra zainspirowana Super master mind z 1972r."<<"\n"; cout<<"Witam "<<imie<<" baza danych zostala zaktualizowana poprawnie, w kazdym skarbcu ilosc zlota jest rowna zakresowi liczb/ilosc prob. Jezeli zakres jest wiekszy od 4 a tobie uda sie zlamac szyfr w mniej niz 7 probach zostaniesz nagrodzony mnoznikiem x30"<<"\n"; tak: for (i=0;i<5;i++) { odpowiednie[i]=0; nieodpowiednie[i]=0; } cout<<"Jak duzy przedzial liczb ma zawierac tajny szyfr?"<<"\n"; cin>>przedzial; cout<<"W ilu probach go zlamiesz?"<<"\n"; cin>>proby; int szyfry[proby][5]; //Ta tablica wyjatkowo pojawia sie nie w wierszu 10, poniewaz zimenia sie w zaleznosci od ilosci mozliwych prob, a gdy jest wczesniej wariuje. if (przedzial==0||proby==0) { cout<<"Szukam odpowiedniego zlecenia";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n"; cout<<"Niestety, w naszej bazie danych nie ma takiego zlecenia"<<"\n"; cout<<"Chcesz podjac sie innego?t/n"<<"\n"; zlo: inne=getch(); switch (inne) { case 116: { goto tak; break; } case 110: { goto nie; break; } default: { goto zlo; break; } } } cout<<"Szukam odpowiedniego zlecenia";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n"; cout<<"Przechwytuje dane";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n"; start=clock(); //------------------------------------------------------------------------------------------------------------------------------------ DWORD IdWatku; CreateThread(NULL, 0, stoper, (PVOID)kill, 0, &IdWatku); //Tu jest wywołany for (i=0;i<5;i++) { los[i]=rand()%przedzial; } for (i=0;i<proby;i++) { if (i>0) { cout<<"Chcesz zobaczyc swoje poprzednie szyfry?t/n"<<"\n"; zlo2: pow=getch(); switch (pow) { case 116: { for (c=0;c<i;c++) { cout<<"Szyfr nr."<<c+1<<" to "; for(z=0;z<5;z++) { cout<<szyfry[c][z]<<" "; } cout<<endl; } break; } case 110: { break; } default: { goto zlo2; break; } } } for (j=0;j<5;j++) { cout<<"Podaj "<<j+1<<" liczbe szyfru!"<<"\n"; cin>>moje[j]; } for (j=0;j<5;j++) { szyfry[i][j]=moje[j]; } for (j=0;j<5;j++) { if (los[j]==moje[j]) { poprawne++; odpowiednie[j]=1; } } for (w=0;w<5;w++) { for (k=0;k<5;k++) { if (moje[w]==los[k]&&odpowiednie[k]==0&&k!=w&&odpowiednie[w]==0) { if (nieodpowiednie[k]==1) { continue; } nieodpowiednie[k]=1; niepoprawne++; break; } } } if (poprawne==5) { stop=clock(); cout<<"Sprawdzam zgodnosc";;Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"."<<"\n"; cout<<"Wylaczam alarm";Sleep(300);cout<<".";Sleep(300);cout<<".";Sleep(300);cout<<"."<<"\n"; cout<<"Alarm zostal wylaczony, skarbiec sie otwiera."<<"\n"; break; } if (poprawne!=5) { cout<<"Sprawdzam zgodnosc";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"."<<"\n"; cout<<"Dobrze ustawionych liczb jest "<<poprawne<<"."<<"\n"<<"Pojawiajacych sie ale nie w odpowiednim miejscu liczb jest "<<niepoprawne<<"."<<"\n"; niepoprawne=0; poprawne=0; } for (w=0;w<5;w++) { nieodpowiednie[w]=0; odpowiednie[w]=0; } bledy++; } //tu ma się kończyć //--------------------------------------------------------------------------------------------------------------------------------------------------- if (i==proby) { cout<<"Alarm niespodziewanie sie uruchomil, zostales zlapany!"<<"\n"; } if (poprawne==5) { if (bledy<7 && przedzial>4) { wynik=((float)przedzial/(float)proby)*30; czas=(stop - start); zapis(wynik, imie, czas); cout<<"Uciekasz i nikt poza toba nie wie kto ukradl "<<wynik<<" kg zlota."<<"\n"; cout<<"Czas ktory na to potrzebowales to "<<czas<<"ms"<<"\n"; } else { wynik=(float)przedzial/(float)proby; czas=(stop - start); zapis(wynik, imie, czas); cout<<"Uciekasz i nikt poza toba nie wie kto ukradl "<<wynik<<" kg zlota."<<"\n"; cout<<"Czas ktory na to potrzebowales to "<<czas<<"ms"<<"\n"; } } niepoprawne=0; poprawne=0; cout<<"Chcesz zobaczyc historie rabunkow?t/n"<<"\n"; zlo3: pow=getch(); switch (pow) { case 116: { narysujPlik("wynik.txt"); break; } case 110: { break; } default: { goto zlo3; break; } } cout<<"Czy chcesz podjac inne zlecenie?t/n"<<"\n"; zlecenie=getch(); switch (zlecenie) { case 116: { goto tak; break; } case 110: { goto nie; break; } default: { goto zlo; break; } } nie: cout<<"Zapraszam wiec w innym terminie"; getch(); } Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.