![]() |
![]() ![]() |
![]() |
-Yorki- |
![]() ![]()
Post
#1
|
Goście ![]() |
Mam zpytanko bo jestem zielony w php ...
Problem jest taki że tworze małą gierke on-line i nie wiem jak stworzyc wartosci losowe (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Jakby taki symulator to ma byc ... jest dwoch uzytkownikow jeden ma zalozmy 100 zolnierzy ktorzy maja laczna sile 100 * 3 = 300 a drugi ma 50 zolnierzy 50 * 3 = 150 i 20 strzelcow 20 * 4 z tym ze odpornosc tych jednostek to dla zonierza 4 a strzelca 3 . I teraz tak jak zrobić zeby jakby symulacjia walki ( chodzi mi tylko o wynik nie o sama walke (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) i losowe zdarzenia i teraz jedna ze stron wygrywa ? (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Jak mi ktos pomoże to bede wdzieczny. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 2 196 Pomógł: 2 Dołączył: 17.01.2004 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
-Yorki- |
![]()
Post
#3
|
Goście ![]() |
Dzieki ale mam uwage mianowicie jakbys mogl mi napisac co znacza poszczegole wiersze. (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)
A i jeszcze jedno bo wydaje mi sie ze ten kod nie ma takiej mozliwosci ... Chodzi o to że załóżmy żołnierzy pierwszy ma 100 a drugi 50 i raczej nie mozliwe jest zeby drugi wygral dlatego trzeba by zrobic takie cos ze jak liczba zolnierzy ktoregos dowudcy bedzie przewyższala liczbe zonierzy pierwszego dowodcy o 130 % to walka toczy sie dalej ale ten co ma przynajmniej 130 % wiecej wygrywa i teraz walka toczy sie tylko o straty tych zonierzy . I druga sprawa bo wydaje mi sie ze w tym kodzie tego nie ma. Mianowicie jak już pisałem SIŁA poszczegolnych jednostek bo ich bedzie duzo i wedlug tej sily ma byc toczona walka czyli jak sila bedzie wieksza niz 130 % od sily zolnierzy drugiego dowodcy to walka toczy sie dopuki zolnierze tego slabszego dowudcy nie zgina i tym samym moga ginac zolnierze pierwszego dowodcy ale on musi wygrac czyli min. musi mu zostac 5 % wszystkich zolnierzy jak jego zolnierze osiagna 5 % to wtedy zolnierze slabszego dowudcy tak jakby gina bez przyczyny i walka sie konczy . To tyle jak bys mogl to podaj mi objasnienia do tego kodu bo jednostek bedzie duzo roznego rodzaju i kod trzeba zmienic . To thx. (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Patrząc na to:
Cytat Dzieki ale mam uwage mianowicie jakbys mogl mi napisac co znacza poszczegole wiersze. Domyślam się ża masz bardzo blade pojęcie o programowaniu i o php. A szukasz dość złożonego skryptu/algorytmu. Inaczej mówiąc szukasz gotowca samemu nie wkładając żadnej pracy, dostarczając tylko założenia. Problem na pewno nie zostanie rozwiązany w kilku postach, więc polecam zarejestrowanie się na forum. A poza tym przenoszę: php Pocz. -> Gotowe skrypty php (będziesz tam mógł postować dopiero po zarejestrowaniu) |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Nareszcie zaczynasz pisac z sensem -- podajesz reguly walki, ale nie zbyt precyzyjnie. Zastanow sie jak maja wygladac zasady walki a potem zabierz sie za przekladanie tego na php.
Zdefiniuj zolnierza, jego parametry: sila, odpornosc -- jak one wplywaja na walke? Czy strzelec walczy na dystans i zolnierz nie moze go zranic (walka w kontakcie) dopoki do niego nie dojdzie (np. gdy "skoncza sie" zolnierze oslaniajacy strzelcow)? Czy jednostki sa takie same a roznia sie tylko parametrami? A walka ma sie toczyc do calkowitego zniszczenia jednej z armii, czy ta armia moze uciec (parametr morale, itd)? Co do zwyciezcy: sila pierwszego 100; drugiego 50 pierwszy ma wskaznik_zwyciestwa = 100/150 czyli sila_1/(sila_1 + sila_2) a drugi = 50/150 zapisujesz te wartosci do tablicy i stosujesz ten kodzik do losowania elementu z zadanym prawdopodobienstwem: http://forum.php.pl/index.php?showtopic=22...ndpost&p=136157 No i wiesz kto wygra. CDM(oze)N |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 2 Dołączył: 12.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(dr_bonzo @ 2005-09-12 12:50:09) A walka ma sie toczyc do calkowitego zniszczenia jednej z armii, czy ta armia moze uciec (parametr morale, itd)? Narazie pozostane przy tym ze do calkowitego zniszczenia ... :] Tak zielony aż nie jestem ale taki troche wyzej niz poczatkujacy :] Wiec tak moze jednak odpuszcze sobie sile zolnierzy a skupie sie na sile Floty do tej gry. A wiec tak : Statek nr 1 : Jakis Transportowiec -siła ataku = 5 -siła obrony = 10 Statek nr 2 : Wiekszy transportowiec -siła ataku = 15 -siła obrony = 20 Statek nr 3 : Mały Myśliwiec -siła ataku = 50 -siła obrony = 40 Statek nr 4 : Średni Myśliwiec -siła ataku = 100 -siła obrony = 75 Statek nr 5 : Duży Myśliwiec -siła ataku =150 -siła obrony = 100 Statek nr 6 : Mały Krążownik -siła ataku = 400 -siła obrony = 200 Statek nr 7 : Duży Krążownik -siła ataku = 500 -siła obrony = 350 Statek nr 8 : Mała Baza Dowodzenia -siła ataku = 300 -siła obrony = 5000 Statek nr 9 : Średnia Baza Dowodzenia -siła ataku = 350 -siła obrony = 10000 Statek nr 10 : Duża Baza Dowodzenia -siła ataku = 400 -siła obrony = 20000 Statek nr 11 : Latające Centrum Dowodzenia -siła ataku = 3000 -siła obrony = 50000 Statek nr 12 : Statek Szpiegowski -siła ataku = 15 -siła obrony = 30 Statek nr 13 : Statek Inny -siła ataku = 15 -siła obrony = 100 Obrona nr 1 : Mała Rakieta -siła ataku = 400 -siła obrony = 1000 Obrona nr 2 : Średnia Rakieta -siła ataku = 1000 -siła obrony = 3000 Obrona nr 3 : Duża Rakieta -siła ataku = 3000 -siła obrony = 6000 Obrona nr 4 : Małe działo Laserowe -siła ataku = 50 -siła obrony = 200 Obrona nr 5 : Średnie działo Laserowe -siła ataku = 80 -siła obrony = 300 Obrona nr 6 : Duże działo Laserowe -siła ataku = 125 -siła obrony = 350 Obrona nr 7 : Mała wyrzutnia Rakiet -siła ataku = 60 -siła obrony = 175 Obrona nr 8 : Duża wyrzutnia Rakiet -siła ataku = 100 -siła obrony = 250 Obrona nr 9 : Nanoboty -siła ataku = 200 -siła obrony = 20 Obrona nr 10 : Mała powłoka Ochronna -siła ataku = 100 -siła obrony = 1000 Obrona nr 11 : Średnia powłoka Ochronna -siła ataku = 150 -siła obrony = 5000 Obrona nr 12 : Duża powłoka Ochronna -siła ataku = 250 -siła obrony = 20000 Więc tak to mi bedzie służyło jako zmienne czyli do każdego przypisze sobie tam : $a ; $b ; $c ... itd. Bo nie zawsze bedzie taka sama ilosć jednostek to zalezy od gracza jaka armie bedzie posiadał ... Jakby ktoś mógł napisać wstępny skrypt z tym ze nie musi pisac wszystkich zmiennych tylko np. $a;$b;$c; a reszte sam już sobie napisze ale jakby mogl mi napisac jak te dane tam wpisywac i gdzie wpisac jakie dane. No nie wiem coś takiego : Tylko nie wiem czy dobrze mowcie jak cos zmienic ? Aha i jeszcze jedno bo tam zamiast 100/50 chyba bedzie losowa : Cytat(php) <?php
$data[ 0 ][ 0 ] = 100/150; $data[ 0 ][ 1 ] = 1; $data[ 1 ][ 0 ] = 50/150; $data[ 1 ][ 1 ] = 0; print( 'Pojedyncze losowanie, wylosowano ' . differentRandom( $data ) . '<br />' ); $sumy[ 0 ] = 0; $sumy[ 1 ] = 0; for ( $i = 0; $i < 10000; $i ++ ) { $sumy[ differentRandom( $data ) ]++; } print( 'Rozklad prawdopodobienstwa z 10 000 losowan: <br />0: ' . ( $sumy[ 0 ]/( $sumy[ 0 ] + $sumy[ 1 ] ) ) . '<br />1: ' . ( $sumy[ 1 ]/( $sumy[ 0 ] + $sumy[ 1 ] ) ) ); /* * Zwraca wylosowany obiekt dowolnego typu * @param $dane array -- o wymiarach [ N ][ 2 ] * Array * ( * [0] => Array * ( * [0] => 100/150 // prawdopodobienstwo wylosowania 0go elementu * [1] => 1 // 0wy element, dowolnego typu * ) * * [1] => Array * ( * [0] => 50/150 // prawdopodobienstwo wylosowania 1go elementu * [1] => 0 // 1szy element, dowolnego typu * ) * [... * ) * * Przy czym suma E( $dane[ i ] ) === 1, tutaj: 50/150 + 100/150 === 1 */ function differentRandom( $data ) { $random_number = floatval( mt_rand( 0, 9999 )/10000 ); // [ 0.0, 1.0 ) $sum = 0; foreach ( $data as $data_row ) { $sum += $data_row[ 0 ]; if ( $random_number < $sum ) { return $data_row[ 1 ]; // zwraca odpowiedni element } } } ?> Ten post edytował Yorki 13.09.2005, 16:37:41 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 10:23 |