Skocz do zawartości

[C++] losowanie liczb


kolusek18

Polecane posty

witam!
zrobilem taka mala gierke w stylu jednorekiego bandyty. losuja sie trzy liczby i jak wszystkie beda takie same to ukazuje sie napis 'wygrales'. do losowania liczb urzywam takiego czegos:
Pascal
int znak1(){
srand ((int) time(NULL));
int zn1 = rand() % 4 +1;



ale dzieki temu zapisowi wszystkie liczby sa takie same bo zaleza od jakiegos tam czasu procesora, dlatego zmienilem troche w kazdej z tych funkcji i wyszlo mi takie:
Pascal
int znak1(){
srand ((int) time(NULL));
int zn1 = rand() % 4 +1;

gotoxy(35,8);
cout << zn1;

return zn1;
}
int znak2(){
srand ((int) time(NULL));
int zn2 = rand() % 3 +2;

gotoxy(36,8);
cout << zn2;

return zn2;
}
int znak3(){
srand ((int) time(NULL));
int zn3 = rand() % 2 +3;

gotoxy(37,8);
cout << zn3;

return zn3;
}


ale to nie do konca mi odpowiada, bo np. pierwsza liczba losuje sie z innego przedzialu od nastepneji nastepnej.
moze ktos sprawnic te kody lub podac mi jakas alternatyzna komende??
tu jest ta moja gra wink.gifhttp://www.hubson.republika.pl/cpp/bandyta.exe

Link do komentarza
Udostępnij na innych stronach

mam tylko drobne pytanie
po ki grzyb za kazdym razem seedujesz gererator ?
na poczatku programu wprowadzasz seed
Pascalsrand ((int) time(NULL));

a potem jedziesz z losowaniem ...
Pascalint znak1(){
int zn1 = rand() % 4 +1;
gotoxy(35,8);
cout << zn1;
return zn1;
}
int znak2(){
int zn2 = rand() % 4 +1;
gotoxy(36,8);
cout << zn2;
return zn2;
}
int znak3(){
int zn3 = rand() % 4 + 1;
gotoxy(37,8);
cout << zn3;
return zn3;
}

Sprawdz czy to ci cos daje. Tak na marginesie. Jest wytlumaczenie dlaczego dostajesz ciagel te sama liczbe biggrin.gif
Pozdrawiam

Link do komentarza
Udostępnij na innych stronach

ja to strasznie poczatkujacy jestem i jak tylko znalazlem te funkcje( gotowy zapis nic nie zmienialem nic procz z 100 na 4,3 i 2) i myslalem ze tak musi byc wiec pisalem to razem ze srand. sprawdze to co napisaliscie i jak bede mial jeszcze jakies z tym problemy to znow cos napisze
Link do komentarza
Udostępnij na innych stronach

zrobilem tak jak radziliscie,ale cos ni wychodzi. mianowicie chce zeby napis wygrana wyskakiwal kiedy wszustkie liczby beda takie same a on potrafi wyskoczyc nawet gdy tylko dwie z tych trzech beda sobie rowne.
napiszcie co to jest zle i jak to poprawic.
o to kod calej mojej gry : wink.gif
Pascal
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
#include <windows.h>


using namespace std;

void gotoxy();

int wstep1();
int wstep2();
int wstep3();

int ramka();

int znak1();
int znak2();
int znak3();
int komunikat();



int main(int argc, char *argv[])
{
wstep1();
wstep2();
wstep3();


ramka();

srand ((int) time(NULL));


while(1){



znak1();
znak2();
znak3();

komunikat();
cout<<endl<<endl<<endl<<endl<<"Aby wylosowac liczby nacisnij dowolny klawisz. aby wyjsc nacisnij Esc.";

if (getch()==27) break;
}
return EXIT_SUCCESS;
}


void gotoxy(const int x, const int y)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);

COORD coord = {x, y};
SetConsoleCursorPosition(hCon, coord);
}
//*************** LOGO GLOWNE wink.gif ****************

int wstep1(){gotoxy(22,0); cout<<"JEDNOREKI BANDYTA by Mr. Hubson";}
int wstep2(){gotoxy(22,1); cout<<"===============================";}
int wstep3(){gotoxy(22,3); cout<<" www.hubson.republika.pl ";}


//************** RAMKA **********************************
int ramka(){
gotoxy(29,6); cout<<"#################";

gotoxy(29,7); cout<<"#";
gotoxy(29,8); cout<<"#";
gotoxy(29,9); cout<<"#";
gotoxy(29,10); cout<<"#";
gotoxy(29,11); cout<<"#";

gotoxy(29,12); cout<<"#################";

gotoxy(45,7); cout<<"#";
gotoxy(45,8); cout<<"#";
gotoxy(45,9); cout<<"#";
gotoxy(45,10); cout<<"#";
gotoxy(45,11); cout<<"#";

}


//*********** LOSOWANE LICZBY **************************
int znak1(){

int zn1 = rand() % 4 +1 ;

gotoxy(35,8);
cout << zn1;

return zn1;
}
int znak2(){

int zn2 = rand() % 4 +1;

gotoxy(36,8);
cout << zn2;

return zn2;
}
int znak3(){

int zn3 = rand() % 4 +1;

gotoxy(37,8);
cout << zn3;

return zn3;
}

//************ KOMUNIKAT WYGRANA - PRZEGRANA ****************************
int komunikat(){

if (znak1() == znak2() && znak2()==znak3()){gotoxy(31,10); cout<<" Wygrales!!! ";}
else { gotoxy(31,10); cout<<"Przegrales ;(";}
}

Link do komentarza
Udostępnij na innych stronach

a moze cus takiego ...
//************ KOMUNIKAT WYGRANA - PRZEGRANA ****************************
Pascalint komunikat(){

if (znak1() == znak2() == znak3()){gotoxy(31,10); cout<<" Wygrales!!! ";}
else { gotoxy(31,10); cout<<"Przegrales ;(";}
}

albo z innej beczki ...
Pascalint I1 = znak1();
int I2 = znak2();
int I3 = znak3();
if (I1 == I2 == I3){gotoxy(31,10); cout<<" Wygrales!!! ";}
else { gotoxy(31,10); cout<<"Przegrales ;(";}

problem w tym ze w
Pascalznak1() == znak2() && znak2()==znak3()

znak 2 jest dwa razy losowany a liczby wyjda zupelnie inne biggrin.gif
Pozdrawiam

Link do komentarza
Udostępnij na innych stronach

[quote] int komunikat()
{

if (znak1() == znak2() == znak3()){gotoxy(31,10); cout<<\" Wygrales!!! \";}
else { gotoxy(31,10); cout<<\"Przegrales ;(\";}
}[/syntax:b5ff3f6534] [/quote]

Ten kod jest nieprawidłowy. Każda funkcja powinna zwracać jakąś wartość. Jeśli niechesz nic zwracać, zamień typ funkcji na void. Można też troche przerobić funkcje, niema potrzeby dwa razy wstawiać fukncje z tymi samymi parametrami (gotoxy) :

Pascalvoid komunikat()
{
char* result;

if (znak1() == znak2() == znak3()) restul = "wygrales"; else result = "przegrales";

gotoxy(31,10);
cout << result;
}


Pozatym zamień to :

Pascalint wstep1(){gotoxy(22,0); cout<<"JEDNOREKI BANDYTA by Mr. Hubson";}
int wstep2(){gotoxy(22,1); cout<<"===============================";}
int wstep3(){gotoxy(22,3); cout<<" www.hubson.republika.pl ";}


na :


Pascalvoid wstep()
{
gotoxy(22,0); cout<<"JEDNOREKI BANDYTA by Mr. Hubson";}
gotoxy(22,1); cout<<"===============================";}
gotoxy(22,3); cout<<" www.hubson.republika.pl ";
}


A z tego kodu:

Pascalint znak1(){

int zn1 = rand() % 4 +1 ;

gotoxy(35,8);
cout << zn1;

return zn1;
}
int znak2(){

int zn2 = rand() % 4 +1;

gotoxy(36,8);
cout << zn2;

return zn2;
}
int znak3(){

int zn3 = rand() % 4 +1;

gotoxy(37,8);
cout << zn3;

return zn3;
}


można zrobić :

Pascalvoid znak(int x,int y)
{

int zn = rand() % 4 +1;

gotoxy(x,y);
cout << zn;

}
:)
Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...