Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Losowanie
Przemek19
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 1.02.2017
Skąd: Polska

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


Witam. Mam pewien problem, który wydaje się banalny. Otóż chciałbym stworzyć taką zmienną $zmienna["x"]["y"] 5 razy, tak, aby za każdym razem nie była taka sama. Np.

Kod
<?php

$ilosc = 5;

for($i = 0; $i < $ilosc; $i++)
{

    $rand_x = rand(0,10);
    $rand_y = rand(0,10);

    $zmienna[$rand_x][$rand_y] = true;

}

?>


To tworzy 5 razy zmienną, ale czasami jest ona taka sama jak wcześniej. Dałoby się zrobić to tak, aby za każdym razem była inna?

PS przepraszam za niejasny język, ale jestem niewyspany i cały dzień myślałem nad poprawnością powyższego kodu.

Ten post edytował Przemek19 24.04.2017, 22:12:41
Go to the top of the page
+Quote Post
markuz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Musisz sprawdzać czy taki klucz już istnieje w tablicy (isset), jeżeli nie - to dodajemy, jeżeli istnieje to losujemy ponownie do skutku (pętlą while).


--------------------
Go to the top of the page
+Quote Post
wolguy
post
Post #3





Grupa: Zarejestrowani
Postów: 219
Pomógł: 10
Dołączył: 9.01.2005

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


ale chcesz uzyskać zmienna[x][y] = losowa, czy zmienna[los1][los2] = boolean ?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No przeciez wyraznie widac co losuje

zmienna[los1][los2] = boolean

wink.gif

@markuz to rozwiazanie ma jedna wade: teoretycznie moze trwac wieki, praktycznie w tym przypadky tak nie bedzie, ale i tak wykona zapewne wiecej operacji niz powinien.

Lepsze wydaje sie w tym wypadku wygenerowanie poprostu tablicy z 10 elementami, a potem dac
http://php.net/manual/en/function.shuffle.php
i pobrac pierwsze 5 elementow. 100% pewnosci ze sie zakonczy wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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%)
-----


A mógłbyś powiedzieć do czego Ci taka tablica?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja wiem, ja wiem... znaczy ja zgaduje, ja zgaduje:
Kolega Przemek ma mape/plansze i chce na tej mapie/plansze rozlozyc losowo jakies elementy smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Przemek19
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 1.02.2017
Skąd: Polska

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


Tak, robię coś w stylu sapera. Wszystko działa, tylko zostało mi losowanie bomb. W ustawieniach mam taką zmienną jak $sets['bombs'], która pokazuje ile bomb ma się znaleźć na planszy. Jest jeszcze zmienna $pole['szerokosc'] i $pole['wysokosc'], które tworzą rozmiar planszy, jako X jest oznaczona wysokość, a jako Y szerokość. Jak mówiłem, niby takie proste, ale nie chce działać. Zrobiłem takie coś dla losowania, ale nadal nie działa:

Kod
for($i = 0; $i < $ilosc; $i++)
{

    $rand_x = rand(0,10);
    $rand_y = rand(0,10);

    $zmienna[$rand_x][$rand_y] = true;

    if(isset($zmienna[$rand_x][$rand_y]))
    {

        $i--;

    }

}


Spróbuję coś zrobić z funkcją shuffle, Chociaż wydaje mi się, że wtedy np. X, skoro będzie musiał być inny za każdym razem, to na jedną wysokość, będzie tylko jedna bomba. Ma ktoś może jakiś pomysł jak to zastosować? Będę bardzo wdzięczny biggrin.gif

Ten post edytował Przemek19 25.04.2017, 15:56:20
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





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

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


W ramach porannego rozespania i nie kontaktowania skrótu na refactoring ...
  1. $width = 10;
  2. $height = 10;
  3. $ilosc = 5;
  4.  
  5. $pseudoMatrix = [];
  6. for ($i=0; $i<$width*$height; $i++) {
  7. $pseudoMatrix[floor($i/10).'.'.($i%10)] = true;
  8. }
  9. $bombs = array_rand($pseudoMatrix, $ilosc);
  10. foreach ($bombs as $bomb) {
  11. list($x, $y) = explode('.', $bomb);
  12. // ....
  13. }
Go to the top of the page
+Quote Post
Przemek19
post
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 1.02.2017
Skąd: Polska

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


Bardzo dziękuję za pomoc! Można jeszcze prosić o zapisanie tego w formie zmiennej $_SESSION['bombs'][$x][$y] = true;? Bo uczę się PHP dopiero kilka miesięcy i jeszcze nie znam funkcji list, explode i array_rand. tongue.gif

Ten post edytował Przemek19 26.04.2017, 19:46:14
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 15:52