Ĺadny brzuch
Witam.
Chciałbym Was zapytać, jak tworzyć zdarzenia losowe w C++.
Przykład: Robisz gierkę i chcesz wysłać gościa na np. wilkołaka.
Zależy Ci, żeby to, czy dasz w ryj czy dostaniesz w ryj zależało od losu.
Czy wiecie, jak generować tego typu zdarzenia?
#include <stdlib.h> #include <stdio.h> #include <time.h> int main(void) { int i; time_t t; srand((unsigned) time(&t)); printf("Ten random numbers from 0 to 99\n\n"); for(i=0; i<10; i++) printf("%d\n", rand() % 100); return 0; }
Progam losuje 10 liczb psedolosowych z zakresu od 0-99.
int c=rand() % 2; if (c==0) dajwpsysk; if (c==1) zabij;
Użytkownik krajew4 edytował ten post 08 lipiec 2006, 15:31
użyj liczb pseudolosowych
int OnCzyJa = 0; srand( time(NULL) ); OnCzyJa = rand() % 2; if (OnCzyJa) daj_mu_w_ryj(); else on_ci_obija_morde()
// krajew był szybszy ;)
Użytkownik __avas__ edytował ten post 08 lipiec 2006, 15:32
Dzięki!
Chciałbym jeszcze trochę więcej dowiedzieć się w zakresie tego tematu.
A więc:
1. Czy moglibyście mi wytłumaczyć poszczególne instrukcje ( chodzi mi głównie
o instrukcję srand) ?
2. Czy można w jakiś sposób zwiększać lub zmniejszać szansę na wystąpienie
tego zdarzenia losowego?
Leniwy jestem to wkleje kawałek help'a :P
1.
Header File
stdlib.h
Category
Math Routines
Prototype
void srand(unsigned seed);
Description
Initializes random number generator.
The random number generator is reinitialized by calling srand with an argument value of 1. It can be set to a new starting point by calling srand with a given seed number.
Return Value
None.
Header File
stdlib.h
Category
Math Routines
Prototype
int rand(void);
Description
Random number generator.
rand uses a multiplicative congruential random number generator with period 2 to the 32nd power to return successive pseudo-random numbers in the range from 0 to RAND_MAX. The symbolic constant RAND_MAX is defined in stdlib.h.
Return Value
rand returns the generated pseudo-random number.
2. Jak nie dasz na początku srand to za każdym razem będą się te same liczby losowały, czyli zwiększasz prawdopobieństwo.
2. Jak nie dasz na początku srand to za każdym razem będą się te same liczby losowały, czyli zwiększasz prawdopobieństwo.
Rozumiem, ze to zart.
Pawdopodobienstwo nalezy sobie samemu okreslic, powyzsze kody dawaly szanse po 50%, ale mozna, np. tak:
int OnCzyJa = 0; srand( time(NULL) ); OnCzyJa = rand() % 3; if (OnCzyJa == 0 || OnCzyJa == 1) daj_mu_w_ryj(); else on_ci_obija_morde()
Czyli masz teraz 66.6% szans, ze dasz mu w ryj.
Urghum źle się wyraziłem :P Chodzi o to, że program będzie losował zawsze te same liczby i będzie niezmienny, zdarzenia losowe będą zawsze zachodziły tak samo.
A instrukcje "time_t" i "printf" ?
Header File
sys\types.h
time.h
Syntax
typedef long time_t;
Description
Defines the value used by the time functions declared in time.h.
Header File
stdio.h
Category
Console I/O Routines
Prototype
int printf(const char *format[, argument, ...]);
int wprintf(const wchar_t *format[, argument, ...]);
Description
Writes formatted output to stdout.
The printf function:
Accepts a series of arguments
Applies to each argument a format specifier contained in the format string *format
Outputs the formatted data (to the screen, a stream, stdout, or a string)
There must be enough arguments for the format. If there are not, the results will be unpredictable and likely disastrous. Excess arguments (more than required by the format) are merely ignored.
Note: For Win32 GUI applications, stdout must be redirected.
Return Value
On success, printf returns the number of bytes output.
On error, printf returns EOF.
Chcesz więcej - szukaj na googlach.
Nie masz przetłumaczenia? Z objaśnień zawartych w tym helpie niewiele rozumiem.
W skrócie:
time_t jest typem danych (tak jak int)
printf jest funkcją wypisującą sformatowany (lub nie) tekst na stdout.
^^ o printf jest na wikipedi
@down: wiem :P
Użytkownik krajew4 edytował ten post 11 lipiec 2006, 14:45
(...) Chodzi o to, że program będzie losował zawsze te same liczby i będzie niezmienny, zdarzenia losowe będą zawsze zachodziły tak samo.
W międzyczasie przyszedł mi do głowy inny pomysł prowadzenia walk. Możnaby
prowadzić walki w taki sposób: Ty i twój wróg mielibyście określoną ilość zdrowia.
Walki prowadzone byłyby w turach. Miałbyś do dyspozycji dwa klawisze np. "r" i "t". W każdej turze należałoby nacisnąć któryś z tych klawiszy. W razie naciśnięcia dobrego klawisza wróg dostawałby w ryj, zły klawisz, ty dostajesz w ryj. To, który klawisz jest dobry, a który zły, zmieniałoby się losowo co turę.
Tury trwałyby do osiągnięcia przez któregoś uczestnika walki zdrowia=0.
Wszystko to mieściło by się w zmiennej walka. Wiem, że do stworzenia takiej zmiennej potrzeba instrukcji warunkowej "if...else", którejś pętli, zdarzeń losowych i klawiszy ASCII. Nie mam jednak pojęcia, jak to wszystko poskładać do kupy. Macie jakieś pomysły?
:lol: :roll1: Nie mogę ostatnio wysyp jest takich pytań, że idzie się tylko popłakać ze śmiechu :) Dałem ci kod na losowanie, zmienne losować umiesz, myśleć z tego co widzę to nie za bardzo więc daj sobie spokój lepiej. Przecież sam sobie opisałeś jak to ma się dziać, zajrzyj do kursów/książek/google potem się o takie banały pytaj. :mad: :excl:
Użytkownik krajew4 edytował ten post 13 lipiec 2006, 09:36
void walka() { char klawisz; while(twoje_hp>0 && wrog_hp>0) { klawisz=114+2*(rand()%2); //t lub r if(getchar()==klawisz) { cout<<"Wróg obrywa"; wrog_hp--; } else { cout<<"Niestety ty obrywasz"; twoje_hp--; } } if(twoje_hp<=0) cout<<"Zmarło Ci się i niestety trafiasz do nieba"; else cout<<"Zamordowałeś przeciwnika, zdobywasz doświadczenie(szkoda że nie w programowaniu"; }
Użytkownik BlindGuardian edytował ten post 13 lipiec 2006, 10:59
Jak działa instrukcja "klawisz=114+2*(rand()%2); "?
:lol: :roll1: Nie mogę ostatnio wysyp jest takich pytań, że idzie się tylko popłakać ze śmiechu :) Dałem ci kod na losowanie, zmienne losować umiesz, myśleć z tego co widzę to nie za bardzo więc daj sobie spokój lepiej. Przecież sam sobie opisałeś jak to ma się dziać, zajrzyj do kursów/książek/google potem się o takie banały pytaj. :mad: :excl:
Dobra już nic nie pisze na ten temat, ale z drugiej strony to sami przypomnijcie sobie czasy jak nie wiedzieliście co zrobi linijka klawisz=114+2*(rand()%2); :P :P :P
Kamil52900 - dostałeś gotowy fragment kodu, jak czegoś nie rozumiesz to wkleji daną instrukkcje do google, zaznacz "Szukaj na stronach kategorii: Polski" i poczytaj.
I nie zniechęcaj się szybko, nauka wymaga cierpliwości.
Chyba macie rację, muszę rozejrzeć się za jakimś kursem lub książką.
Ewentualnie poszukać w googlu. W każdym bądź razie, dzięki za Waszą pomoc!!!
poczytaj sobie http://avocado.risp..../texts/od0dogk/
Ok, teraz ostatnie pytanie. Bardzo proszę o odpowiedź. Nie chce zakładać nowego tematu, a w źródłach w których szukałem nie znalazłem odpowiedzi.
if(liczba==1){
cout<<"Zaraz włączy się internet!"<<endl;
//włącza się internet explorer
}
Pytanie: jak we własnym programie uruchomić inny program( np. explorer lub choćby notatnik), nie zamykając jednocześnie własnego programu w kompilatorze Dev C++?
Na przykład poprzez funkcje system. W winapi pewnie też coś jest; na linuksie rodzina funkcji exec z fork np.
W Dev masz pokazane jej użycie: system("PAUSE"). Nie pisze pod windows, ale wydaje mi się, że należy mu podać pełną ścieżke, np. system("c:\program\program.exe");
Użytkownik lszk edytował ten post 15 lipiec 2006, 14:50
ShellExecute lub WinExec ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Chciałbym Was zapytać, jak tworzyć zdarzenia losowe w C++.
Przykład: Robisz gierkę i chcesz wysłać gościa na np. wilkołaka.
Zależy Ci, żeby to, czy dasz w ryj czy dostaniesz w ryj zależało od losu.
Czy wiecie, jak generować tego typu zdarzenia?
#include <stdlib.h> #include <stdio.h> #include <time.h> int main(void) { int i; time_t t; srand((unsigned) time(&t)); printf("Ten random numbers from 0 to 99\n\n"); for(i=0; i<10; i++) printf("%d\n", rand() % 100); return 0; }
Progam losuje 10 liczb psedolosowych z zakresu od 0-99.
int c=rand() % 2; if (c==0) dajwpsysk; if (c==1) zabij;
Użytkownik krajew4 edytował ten post 08 lipiec 2006, 15:31
użyj liczb pseudolosowych
int OnCzyJa = 0; srand( time(NULL) ); OnCzyJa = rand() % 2; if (OnCzyJa) daj_mu_w_ryj(); else on_ci_obija_morde()
// krajew był szybszy ;)
Użytkownik __avas__ edytował ten post 08 lipiec 2006, 15:32
Dzięki!
Chciałbym jeszcze trochę więcej dowiedzieć się w zakresie tego tematu.
A więc:
1. Czy moglibyście mi wytłumaczyć poszczególne instrukcje ( chodzi mi głównie
o instrukcję srand) ?
2. Czy można w jakiś sposób zwiększać lub zmniejszać szansę na wystąpienie
tego zdarzenia losowego?
Leniwy jestem to wkleje kawałek help'a :P
1.
Header File
stdlib.h
Category
Math Routines
Prototype
void srand(unsigned seed);
Description
Initializes random number generator.
The random number generator is reinitialized by calling srand with an argument value of 1. It can be set to a new starting point by calling srand with a given seed number.
Return Value
None.
Header File
stdlib.h
Category
Math Routines
Prototype
int rand(void);
Description
Random number generator.
rand uses a multiplicative congruential random number generator with period 2 to the 32nd power to return successive pseudo-random numbers in the range from 0 to RAND_MAX. The symbolic constant RAND_MAX is defined in stdlib.h.
Return Value
rand returns the generated pseudo-random number.
2. Jak nie dasz na początku srand to za każdym razem będą się te same liczby losowały, czyli zwiększasz prawdopobieństwo.
2. Jak nie dasz na początku srand to za każdym razem będą się te same liczby losowały, czyli zwiększasz prawdopobieństwo.
Rozumiem, ze to zart.
Pawdopodobienstwo nalezy sobie samemu okreslic, powyzsze kody dawaly szanse po 50%, ale mozna, np. tak:
int OnCzyJa = 0; srand( time(NULL) ); OnCzyJa = rand() % 3; if (OnCzyJa == 0 || OnCzyJa == 1) daj_mu_w_ryj(); else on_ci_obija_morde()
Czyli masz teraz 66.6% szans, ze dasz mu w ryj.
Urghum źle się wyraziłem :P Chodzi o to, że program będzie losował zawsze te same liczby i będzie niezmienny, zdarzenia losowe będą zawsze zachodziły tak samo.
A instrukcje "time_t" i "printf" ?
Header File
sys\types.h
time.h
Syntax
typedef long time_t;
Description
Defines the value used by the time functions declared in time.h.
Header File
stdio.h
Category
Console I/O Routines
Prototype
int printf(const char *format[, argument, ...]);
int wprintf(const wchar_t *format[, argument, ...]);
Description
Writes formatted output to stdout.
The printf function:
Accepts a series of arguments
Applies to each argument a format specifier contained in the format string *format
Outputs the formatted data (to the screen, a stream, stdout, or a string)
There must be enough arguments for the format. If there are not, the results will be unpredictable and likely disastrous. Excess arguments (more than required by the format) are merely ignored.
Note: For Win32 GUI applications, stdout must be redirected.
Return Value
On success, printf returns the number of bytes output.
On error, printf returns EOF.
Chcesz więcej - szukaj na googlach.
Nie masz przetłumaczenia? Z objaśnień zawartych w tym helpie niewiele rozumiem.
W skrócie:
time_t jest typem danych (tak jak int)
printf jest funkcją wypisującą sformatowany (lub nie) tekst na stdout.
^^ o printf jest na wikipedi
@down: wiem :P
Użytkownik krajew4 edytował ten post 11 lipiec 2006, 14:45
(...) Chodzi o to, że program będzie losował zawsze te same liczby i będzie niezmienny, zdarzenia losowe będą zawsze zachodziły tak samo.

W międzyczasie przyszedł mi do głowy inny pomysł prowadzenia walk. Możnaby
prowadzić walki w taki sposób: Ty i twój wróg mielibyście określoną ilość zdrowia.
Walki prowadzone byłyby w turach. Miałbyś do dyspozycji dwa klawisze np. "r" i "t". W każdej turze należałoby nacisnąć któryś z tych klawiszy. W razie naciśnięcia dobrego klawisza wróg dostawałby w ryj, zły klawisz, ty dostajesz w ryj. To, który klawisz jest dobry, a który zły, zmieniałoby się losowo co turę.
Tury trwałyby do osiągnięcia przez któregoś uczestnika walki zdrowia=0.
Wszystko to mieściło by się w zmiennej walka. Wiem, że do stworzenia takiej zmiennej potrzeba instrukcji warunkowej "if...else", którejś pętli, zdarzeń losowych i klawiszy ASCII. Nie mam jednak pojęcia, jak to wszystko poskładać do kupy. Macie jakieś pomysły?
:lol: :roll1: Nie mogę ostatnio wysyp jest takich pytań, że idzie się tylko popłakać ze śmiechu :) Dałem ci kod na losowanie, zmienne losować umiesz, myśleć z tego co widzę to nie za bardzo więc daj sobie spokój lepiej. Przecież sam sobie opisałeś jak to ma się dziać, zajrzyj do kursów/książek/google potem się o takie banały pytaj. :mad: :excl:
Użytkownik krajew4 edytował ten post 13 lipiec 2006, 09:36
void walka() { char klawisz; while(twoje_hp>0 && wrog_hp>0) { klawisz=114+2*(rand()%2); //t lub r if(getchar()==klawisz) { cout<<"Wróg obrywa"; wrog_hp--; } else { cout<<"Niestety ty obrywasz"; twoje_hp--; } } if(twoje_hp<=0) cout<<"Zmarło Ci się i niestety trafiasz do nieba"; else cout<<"Zamordowałeś przeciwnika, zdobywasz doświadczenie(szkoda że nie w programowaniu"; }
Użytkownik BlindGuardian edytował ten post 13 lipiec 2006, 10:59
Jak działa instrukcja "klawisz=114+2*(rand()%2); "?
:lol: :roll1: Nie mogę ostatnio wysyp jest takich pytań, że idzie się tylko popłakać ze śmiechu :) Dałem ci kod na losowanie, zmienne losować umiesz, myśleć z tego co widzę to nie za bardzo więc daj sobie spokój lepiej. Przecież sam sobie opisałeś jak to ma się dziać, zajrzyj do kursów/książek/google potem się o takie banały pytaj. :mad: :excl:

Dobra już nic nie pisze na ten temat, ale z drugiej strony to sami przypomnijcie sobie czasy jak nie wiedzieliście co zrobi linijka klawisz=114+2*(rand()%2); :P :P :P
Kamil52900 - dostałeś gotowy fragment kodu, jak czegoś nie rozumiesz to wkleji daną instrukkcje do google, zaznacz "Szukaj na stronach kategorii: Polski" i poczytaj.
I nie zniechęcaj się szybko, nauka wymaga cierpliwości.
Chyba macie rację, muszę rozejrzeć się za jakimś kursem lub książką.
Ewentualnie poszukać w googlu. W każdym bądź razie, dzięki za Waszą pomoc!!!
poczytaj sobie http://avocado.risp..../texts/od0dogk/
Ok, teraz ostatnie pytanie. Bardzo proszę o odpowiedź. Nie chce zakładać nowego tematu, a w źródłach w których szukałem nie znalazłem odpowiedzi.
if(liczba==1){
cout<<"Zaraz włączy się internet!"<<endl;
//włącza się internet explorer
}
Pytanie: jak we własnym programie uruchomić inny program( np. explorer lub choćby notatnik), nie zamykając jednocześnie własnego programu w kompilatorze Dev C++?
Na przykład poprzez funkcje system. W winapi pewnie też coś jest; na linuksie rodzina funkcji exec z fork np.
W Dev masz pokazane jej użycie: system("PAUSE"). Nie pisze pod windows, ale wydaje mi się, że należy mu podać pełną ścieżke, np. system("c:\program\program.exe");
Użytkownik lszk edytował ten post 15 lipiec 2006, 14:50
ShellExecute lub WinExec ;)