Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] jak rozdać karty do gry?
ibalyx
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


hejo (IMG:style_emoticons/default/smile.gif) proszę o pomoc.

mam 4 stosy kart (A,B,C,D). w każdym stosie mam 4 karty (1,2,3,4). karty mają jakąś wartość liczbową (od 5 do 20). mam też 4 graczy.
chcę rozdać te karty graczom z pewnymi wymaganiami:
- każdy gracz może mieć tylko jedną kartę z każdego stosu
- suma wartości kart każdego gracza ma być możliwie wyrównana

dlatego potrzebuję skryptu który mi to obliczy, czyli przejrzy wszystkie możliwe kombinacje. nie wiem jak to zrobić. próbowałem z 4 pętlami, jedna w drugiej ale to chyba nie to. macie jakieś pomysły?

Ten post edytował ibalyx 18.12.2013, 20:06:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Gelio
post
Post #2





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 28.02.2009

Ostrzeżenie: (10%)
X----


Nie jest to rozwiązanie optymalne, ale jedno z prostszych - wystarczy te stosy posortować i po kolei dawać każdemu graczowi skrajne wartości.

Dla przykładu:
  1. $tablica = array(
  2. array(5,10,15,20),
  3. array(6,11,14,19),
  4. array(7,12,13, 18),
  5. array(8, 11, 16, 19)
  6. ); // to musi być posortowane
  7. $gracz1 = array($tablica[0][0], $tablica[1][0], $tablica[2][3], $tablica[3][3]);
  8. $gracz2 = array($tablica[0][1], $tablica[1][1], $tablica[2][2], $tablica[3][2]);
  9. $gracz3 = array($tablica[0][2], $tablica[1][2], $tablica[2][1], $tablica[3][1]);
  10. $gracz4 = array($tablica[0][3], $tablica[1][3], $tablica[2][0], $tablica[3][0]);


Rozwiązanie jest szybkie, nie wymaga żadnych pętli, jednak są i minusy - dwóch graczy będzie miało wartości zbliżone do siebie, natomiast dwóch innych graczy będzie miało wartości skrajne.

Mam nadzieję, że kod się przyda.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Musisz stworzyć wszystkie możliwe czwórki kart. Tutaj najprościej 4 pętle coś na zasadzie:
  1. for($a=0;$a<4;$a++)
  2. for($b=0;$b<4;$b++)
  3. for($c=0;$c<4;$c++)
  4. for($d=0;$d<4;$d++)
  5. $tablica["{$a},{$b},{$b},{$c}"] = $t1[$a]+$t2[$b]+$t3[$c]+$t4[$d];
  6.  
  7. sort($tablica);
  8. var_dump($tablica);
Go to the top of the page
+Quote Post
ibalyx
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 18.12.2013, 18:17:37 ) *
Musisz stworzyć wszystkie możliwe czwórki kart. Tutaj najprościej 4 pętle coś na zasadzie:
  1. for($a=0;$a<4;$a++)
  2. for($b=0;$b<4;$b++)
  3. for($c=0;$c<4;$c++)
  4. for($d=0;$d<4;$d++)
  5. $tablica["{$a},{$b},{$b},{$c}"] = $t1[$a]+$t2[$b]+$t3[$c]+$t4[$d];
  6.  
  7. sort($tablica);
  8. var_dump($tablica);


tylko potrzebuję wyświetlić kto jakie karty dostał :-) też z tymi pętlami kombinowałem. przynajmniej wiem, że jest jakieś 331 776 kombinacji.

Ten post edytował ibalyx 18.12.2013, 19:49:15
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


jako klucz masz po przecinku klucze z talii
Go to the top of the page
+Quote Post
ibalyx
post
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


zapomniałem o najważniejszej rzeczy. karty są podzielone na kolory wg hierarchii:
- czerwone (3 karty) - najsilniejsze
- niebieskie (4karty)
- zielone (5 kart)
- żółte (4 karty) - najsłabsze

tak więc "czerwona 5" jest silniejsza od "niebieskiej 20". wiele kombinacji teraz nie będzie, ale mimo wszystko wolałbym, żeby skrypt mi to wyliczył :-)

przykład:
STOS_A
- czerwona 5
- zielona 10
- zielona 10
- żółta 11

STOS_B
- czerwona 10
- czerwona 10
- zielona 15
- żółta 16

STOS_C
- niebieska 7
- niebieska 7
- zielona 9
- żółta 10

STOS_D
- niebieska 7
- niebieska 7
- zielona 9
- żółta 10

to nadal obowiązuje:
- każdy gracz może mieć tylko jedną kartę z każdego stosu

po kilku próbach wyszło mi tak: gracz_A = 39, gracz_B = 37, gracz_C = 37, gracz_D = 40.
nie wiem czy wszystkie kombinacje sprawdziłem.

Ten post edytował ibalyx 19.12.2013, 17:50:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:38