Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wartości losowe
Forum PHP.pl > Forum > Gotowe rozwiązania
Yorki
Mam zpytanko bo jestem zielony w php ...
Problem jest taki że tworze małą gierke on-line i nie wiem jak stworzyc wartosci losowe 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 smile.gif ) i losowe zdarzenia i teraz jedna ze stron wygrywa ? dry.gif Jak mi ktos pomoże to bede wdzieczny. biggrin.gif
crash
  1. <?php
  2. if( ( rand( 0, 100 ) % 2 ) == 0 )
  3. {
  4.  // wygrywa jeden...
  5. }
  6. else
  7. {
  8.  // wygrywa drugi...
  9. }
  10. ?>
Yorki
Dzieki ale mam uwage mianowicie jakbys mogl mi napisac co znacza poszczegole wiersze. 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. cool.gif
mike
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)
dr_bonzo
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
Yorki
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
        }
    }
}
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.