Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Losowanie koloru tła
Teppic
post 21.03.2012, 21:43:25
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.09.2008

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


Witam ponownie. Otóż stworzylem kod generujący losowy kolor tła strony:

  1.  
  2. <html>
  3.  
  4. <?php
  5.  
  6.  
  7.  
  8. class Losowanie{
  9.  
  10. //losuje liczbe
  11. function losuj(){
  12. return rand(0,9);
  13. }
  14.  
  15.  
  16. //powtarza losowanie i ustala kolor tla!
  17. function kilka(){
  18.  
  19. for($i=1; $i<=6; $i++){
  20. echo $this->losuj();
  21. }
  22. }
  23.  
  24.  
  25. function Jaki(){
  26. $this->kilka();
  27. }
  28.  
  29.  
  30. function wyswietl(){
  31. echo '<body bgcolor="#';
  32. $this->Jaki();
  33. echo '">';
  34.  
  35. }
  36.  
  37.  
  38.  
  39. }
  40.  
  41. $los=new Losowanie();
  42.  
  43.  
  44.  
  45.  
  46. $los->wyswietl();
  47.  
  48. echo 'Kolor tla to #';
  49. $los->Jaki();
  50.  
  51.  
  52.  
  53.  
  54.  
  55. ?>
  56.  
  57.  
  58. </body></html>
  59.  


W czym problem? Otóż fraza "Kolor tła to #" owszem mówi jaki kolor jest ale podaje nieprawdziwą wartość kodową koloru. Domyslam się, że po prostu funkcja "Jaki()" jest wywolana drugi raz i przyjmuje inne parametry. Jak zrobić by pokazywala wlasciwą wartos kodową koloru, tzn. by wywolana drugi raz funkcja "Jaki()" korzystala z tych samych wylosowanych numerów funkcji "losuj()">

Przepraszam, pewnie problem jest banalny ale nie daje mi spokoju;P
Go to the top of the page
+Quote Post
Rysh
post 21.03.2012, 21:52:35
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Ta klasa jest masakryczna. Po co tworzysz funkcję Jaki, skoro ona uruchamia tylko inną funkcję?


--------------------
Go to the top of the page
+Quote Post
Teppic
post 21.03.2012, 21:56:43
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.09.2008

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


Cytat(Rysh @ 21.03.2012, 21:52:35 ) *
Ta klasa jest masakryczna. Po co tworzysz funkcję Jaki, skoro ona uruchamia tylko inną funkcję?


Tą funkcje dodalem niedawno. I wiem, że jest niepotrzebna, po prostu napisalem ją by przyklad był bardziej "czytelny":P. No i myslalem ze dzieki temu kolor bedzie podawany prawidlowo;P. Mylilem sie.
Go to the top of the page
+Quote Post
Rysh
post 21.03.2012, 22:05:04
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


  1. <?php
  2.  
  3. class Losowanie {
  4. public $kolor;
  5. function __construct() {
  6. for($i = 0 ; $i < 6 ; $i++) {
  7. $this->kolor .= rand(0,9);
  8. }
  9. }
  10. }
  11.  
  12. $kolor = new Losowanie;
  13. echo "Wylosowany kolor to: ". $kolor->kolor;


Dla jeszcze lepszej poprawności dałbym w tablicy $kolory liczby od 1 do 16 (w formie szesnastkowej oczywiście) czyli 0 do F i z nich losował kolor.

Ten post edytował Rysh 21.03.2012, 22:08:08


--------------------
Go to the top of the page
+Quote Post
Teppic
post 21.03.2012, 22:14:44
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.09.2008

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


No no nie wiedzialem że można tak wiele uproscic;). Jakoś nie bardzo lubię się z funkcją "construct"(czytaj nie rozumiem jej za bardzo) i dlatego wolę uzywać zwyklych funkcji. Oczywiscie chciałem dać tez literki w kodach kolorów ale myslalem ze wykorzystują caly alfabet i dlatego odpadł pomysł tablicy;). Widac sie mylilem.

A nie mozna jakos do mojego kodu dodac kilka linijek? zy musi to byc ta nieszczesna "construct"?tongue.gif
Go to the top of the page
+Quote Post
Rysh
post 21.03.2012, 22:21:45
Post #6





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Pewnie że możesz, ale nie widzę najmniejszego sensu. Poczytaj o __construct przyda Ci się.
__construct jest zawsze wykonywana przy tworzeniu obiektu. Nic nadzwyczajnego wink.gif

Wydaje mi się, że można jeszcze bardziej uprościć ten kod i dać coś w stylu rand(000000, FFFFFF); zamiast pętli for.

Ten post edytował Rysh 21.03.2012, 22:26:26


--------------------
Go to the top of the page
+Quote Post
Teppic
post 21.03.2012, 22:31:57
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.09.2008

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


Cytat(Rysh @ 21.03.2012, 22:21:45 ) *
Pewnie że możesz, ale nie widzę najmniejszego sensu. Poczytaj o __construct przyda Ci się.
__construct jest zawsze wykonywana przy tworzeniu obiektu. Nic nadzwyczajnego wink.gif

Wydaje mi się, że można jeszcze bardziej uprościć ten kod i dać coś w stylu rand(000000, FFFFFF); zamiast pętli for.


Jesli w funkcji "rand" istnieje przedzial kolorów to rzeczywiscie bardzo to ulatwi napisanie kodu;P. Poczytam, może jest cos takiego. Niemniej ja ten kod napisalem bardziej po to by się sprawdzić czy potrafię;P. Normalnie to mam z góry ustalony kolor tła;). No i zaintrygowało mnie to ".=" w kodzie konstuktora. Domyslam się, że to służy do dodawania kolejnej wylosowanej cyfry do zmiennej "kolor". Nie spotkalem sie z tym jeszcze.
Go to the top of the page
+Quote Post
Rysh
post 21.03.2012, 22:42:59
Post #8





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Trochę nie rozumiem po co Ci przedział kolorów. Funkcja rand służy do generowania liczb z podanego zakresu. Jeśli podamy zakres w postaci szesnastkowej to powinniśmy otrzymać liczbę z tego przedziału, czyli jak to Ty napisałeś "z przedziału kolorów".

Tak .= służy do dodawaniu ciągu znaków do zmiennej.

No widzisz chwila z manualem i zrobiłem jeszcze prostrzą wersję:
  1. <?php
  2.  
  3. class Losowanie {
  4. public $kolor;
  5. function __construct() {
  6. $this->kolor = dechex(rand(0x000000,0xFFFFFF));
  7. }
  8. }
  9.  
  10. $kolor = new Losowanie;
  11. echo "Wylosowany kolor to: ". $kolor->kolor;
  12. ?>


Ten post edytował Rysh 21.03.2012, 22:50:53


--------------------
Go to the top of the page
+Quote Post
Teppic
post 21.03.2012, 23:16:28
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.09.2008

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


Dzięki wielkie! Czlowiek całe życie się uczy;). Też cały czas przeglądam manual bo się próbuję pouczyc PHP. Teraz popróbuję coś trudniejszego napisać, jakby co to zajrzę tu na forum z pytaniem;).

Czeka mnie teraz nauka polaczenia z bazą danych i formularze logowania... moja zmora od której się odbijam;P

Dzięki za pomoc.
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 Wersja Lo-Fi Aktualny czas: 29.04.2025 - 11:04