Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]While - dodawanie
Utilaft
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Witam. Chcę zrobić, by wykonywało mi się działanie, dopóki nie wyjdzie 0.

Mam taki kod:
while($user1_walka <= 0) {

$user1_walka = $user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
$user2_walka = $user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;

if($user1_walka <= 0) {
echo $user1_walka;

}

break;

}

No i nie wiem jak to zrobić za bardzo.
Go to the top of the page
+Quote Post
_Borys_
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


  1. while($user1_walka !== 0) {
  2.  
  3. $user1_walka = $user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  4. $user2_walka = $user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  5.  
  6. }


Ten post edytował _Borys_ 5.02.2013, 16:17:16
Go to the top of the page
+Quote Post
Utilaft
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Znów całe CPU hostingu wezmę biggrin.gif skrypt się wykonuje w nieskonczonosc.
Go to the top of the page
+Quote Post
_Borys_
post
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


No dopóki nie będzie zera snitch.gif , o to przecież chodziło ?
Go to the top of the page
+Quote Post
Utilaft
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


No ale to za długo. Może jest lepsze rozwiązanie. Tworzę pseudo grę, taką klikankę, i tworzę system walki. Chcę, aby jakoś dzialanie się robiło, póki nie wyjdzie 0 (przeciwnik nie umrze)
Go to the top of the page
+Quote Post
_Borys_
post
Post #6





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


to może
  1. while($user1_walka > 0) {
  2. $user1_walka = $user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  3. $user2_walka = $user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  4. }


wtedy również jak będzie minus to pętla się zakończy.
Przykład działania:
  1. $c = 1;
  2. while ($c > 0)
  3. {
  4. $c = rand(-1,10);
  5. echo $c . '<br />';
  6. }


Ten post edytował _Borys_ 5.02.2013, 18:14:37
Go to the top of the page
+Quote Post
Utilaft
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Ten Twój 1 przykład nie działa, i ten mój

  1. while($user1_walka < 0 || $user2_walka < 0) {
  2. $user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  3. $user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  4.  
  5. }
  6.  
  7.  
  8. echo 'Zadałeś przeciwnikowi obrażeń: '.$user1_walka.'<br>';
  9. echo 'Przeciwnik zadał Ci obrażeń: '.$user2_walka.'<br>';


Po prostu nie wyświetla mi zadanych obrażeń (Wyniku z działania)
Go to the top of the page
+Quote Post
-Gość-
post
Post #8





Goście







Nie wiem po co stosujesz tą pętlę while. Patrząc na kod powinien być warunek if jeśli wcześniej te zmienne są gdzieś ustawiane, bo w pętli zmienne $user1_walka i $user2_walka są ciągle w obliczane w ten sam sposób, mają tą samą wartość. Ewentualnie może chcesz w pętli odejmować lub dodawać? Ale wtedy nie instrukcja = tylko += lub -=
Go to the top of the page
+Quote Post
_Borys_
post
Post #9





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


Cytat(Utilaft @ 5.02.2013, 22:10:35 ) *
Ten Twój 1 przykład nie działa, i ten mój


Napisałem > 0 a nie < 0
Pętla będzie się wykonywać póki wynik większy od zera.
Go to the top of the page
+Quote Post
Utilaft
post
Post #10





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Dupa, nie działa nic. Nie wyswietla
Go to the top of the page
+Quote Post
Damonsson
post
Post #11





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Zobacz mój post:

http://forum.php.pl/index.php?showtopic=19...st&p=939823

Przerób to sobie na pętle działającą, aż któryś będzie miał 0 i tyle.

Ten post edytował Damonsson 6.02.2013, 19:31:06
Go to the top of the page
+Quote Post
Utilaft
post
Post #12





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


  1. for($user1_walka > 0; $i <= 10; $i++) {
  2.  
  3. $user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  4. $user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  5. $i++;
  6. echo 'runda: '.$i.'<br />';
  7. echo $user1_walka.'<br />';
  8.  
  9. }

i to też:
  1. for($i = 0; $user1_walka > 0; $i++) {
  2.  
  3. $user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  4. $user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  5. $i++;
  6. echo 'runda: '.$i.'<br />';
  7. echo $user1_walka.'<br />';
  8.  
  9. }


Pętli for jeszcze nie przerabiałem, i nie bardzo wiem jak się do tego zabrać.

Ten post edytował Utilaft 6.02.2013, 19:57:22
Go to the top of the page
+Quote Post
Damonsson
post
Post #13





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


  1. <?php
  2.  
  3. $player1 = '100';
  4.  
  5. $player2 = '100';
  6.  
  7. $user_atak = '5';
  8. $user_zrecznosc = '5';
  9. $user_obrona = '5';
  10.  
  11. $user2_atak = '5';
  12. $user2_zrecznosc = '5';
  13. $user2_obrona = '5';
  14.  
  15. echo "Gracz 1 zaczyna ze $player1 życia <br/>";
  16.  
  17. echo "Gracz 2 zaczyna ze $player2 życia <br/><br/><br/>";
  18.  
  19. $i = 1;
  20. while(true) {
  21. //for(;;) {
  22. $player1 = $player1 - $user2_atak - $user2_zrecznosc + $user_obrona;
  23.  
  24. $player2 = $player2 - $user_atak - $user_zrecznosc + $user2_obrona;
  25.  
  26. if ($player1 <= 0 || $player2 <= 0) {
  27.  
  28. if ($player1 < $player2) {
  29.  
  30. echo "wygrał gracz 2, gracz 1 padł";
  31.  
  32. } elseif ($player1 > $player2) {
  33.  
  34. echo "wygrał gracz 1, gracz 2 padł";
  35.  
  36. } else {
  37. echo "Remis";
  38. }
  39.  
  40. break;
  41. }
  42. echo "Runda $i <br/>";
  43.  
  44. echo "Graczowi 1 zostało $player1 życia <br/>";
  45.  
  46. echo "Graczowi 2 zostało $player2 życia <br/><br/><br/>";
  47. $i++;
  48. }
  49. ?>


Czy while, czy for to mało istotne.
Go to the top of the page
+Quote Post
Utilaft
post
Post #14





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Życia mam przypisane już z mysqla. Zaraz przetestuje


Przegrales› walke™. Przeciwnik zniszczyl cie ™.Graczowi 1 zostal‚o -100 życia
Graczowi 2 zostal‚o 1950 źycia
Zyskales›: 200 doswiadczenia
Nick: Utilaft2
Nick: Utilaft

Nie ważne jaki będzie atak i hp. czasami nawet graczowi 2 zostaje więcej żyć niż ma w bazie.

Wcześniej było złe działanie
Ma być takie:
$user1_walka = $user2_zycie - $user_atak - $user_zrecznosc + $user2_obrona;
$user2_walka = $user_zycie - $user2_atak - $user2_zrecznosc + $user_obrona;

Ale skrypt wykonuje się w nieskonczonosc.

Ten post edytował Utilaft 6.02.2013, 21:01:40
Go to the top of the page
+Quote Post
Damonsson
post
Post #15





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Weź przerzuć się na układanie kwietników czy coś w czym może się spełnisz, dostałeś od każdego przykładowe kody, ode mnie GOTOWIEC, w którym wystarczy sobie pozmieniać parametry na własne i jeszcze masz problem.
Go to the top of the page
+Quote Post
Utilaft
post
Post #16





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Uwierz mi że tak zrobiłem.

Ale..

1. Twój kod działa, ale z tymi parametrami co dałeś, z moimi nie działa. Skrypt się wykonuje w nieskonczonosc.

2. To samo w innych.
Go to the top of the page
+Quote Post
sazian
post
Post #17





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Cytat(Utilaft @ 5.02.2013, 22:10:35 ) *
Ten Twój 1 przykład nie działa, i ten mój

  1. while($user1_walka < 0 || $user2_walka < 0) {
  2. $user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
  3. $user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
  4.  
  5. }

pomijam fakt że sam algorytm liczący jest dosyć dziwny - czym większy atak tym mniejsze obrażenia

to jest pętla nieskończona ponieważ nie modyfikujesz $user1_walka ani $user2_walka
to znaczy "modyfikujesz" ale w każdym przebiegu masz to samo ponieważ nie zmieniasz wartości żadnej ze zmiennych $user_atak $user_zrecznosc $user_obrona $user_zycie ....
czyli jeśli w pierwszym przejściu masz wynik $user1_walka = 100 a $user2_walka = 200 to w milionowym przejściu pętli dalej masz $user1_walka = 100 i $user2_walka = 200
Go to the top of the page
+Quote Post
Utilaft
post
Post #18





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Czyli jak mam to rozwiązać?
Go to the top of the page
+Quote Post
sazian
post
Post #19





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


dobra weź kartkę papieru
i napisz
$user_atak=5;
$user_zrecznosc=10;
$user_obrona = 5;
$user_zycie=50;

$user2_atak=8;
$user2_zrecznosc=4;
$user2_obrona = 3;
$user2_zycie=60;

i rozpisz sobie klika pierwszych przejść pętli
czyli
przejście 1:
$user1_walka = ...
$user2_walka=...
sprawdź czy $user1_walka < 0 || $user2_walka < 0

przejście 2:
....

ile wynosi $user1_walka oraz $user2_walka po przejściu 1 a ile po przejściu 3 ?

Go to the top of the page
+Quote Post
Utilaft
post
Post #20





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

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


Ok, poradziłem sobie. Może trochę na około ale jest.

  1.  
  2. //1 tura
  3. $user1_walka1 = $user2_atak - $user2_zrecznosc + $user_obrona;
  4. $user2_walka1 = $user_atak - $user_zrecznosc + $user2_obrona;
  5. //2 tura
  6. $user1_walka2 = $user1_walka1 - $user2_atak - $user2_zrecznosc + $user_obrona;
  7. $user2_walka2 = $user1_walka1 - $user_atak - $user_zrecznosc + $user2_obrona;
  8. //3 tura
  9. $user1_walka3 = $user1_walka2 - $user2_atak - $user2_zrecznosc + $user_obrona;
  10. $user2_walka3 = $user1_walka2 - $user_atak - $user_zrecznosc + $user2_obrona;
  11. //4 tura
  12. $user1_walka4 = $user1_walka3 - $user2_atak - $user2_zrecznosc + $user_obrona;
  13. $user2_walka4 = $user1_walka3 - $user_atak - $user_zrecznosc + $user2_obrona;
  14. //5 tura
  15. $user1_walka5 = $user1_walka4 - $user2_atak - $user2_zrecznosc + $user_obrona;
  16. $user2_walka5 = $user1_walka4 - $user_atak - $user_zrecznosc + $user2_obrona;
  17. //6 tura
  18. $user1_walka6 = $user1_walka5 - $user2_atak - $user2_zrecznosc + $user_obrona;
  19. $user2_walka6 = $user1_walka5 - $user_atak - $user_zrecznosc + $user2_obrona;
  20. //7 tura
  21. $user1_walka7 = $user1_walka6 - $user2_atak - $user2_zrecznosc + $user_obrona;
  22. $user2_walka7 = $user1_walka6 - $user_atak - $user_zrecznosc + $user2_obrona;
  23. //8 tura
  24. $user1_walka8 = $user1_walka7 - $user2_atak - $user2_zrecznosc + $user_obrona;
  25. $user2_walka8 = $user1_walka7 - $user_atak - $user_zrecznosc + $user2_obrona;
  26. //9 tura
  27. $user1_walka9 = $user1_walka8 - $user2_atak - $user2_zrecznosc + $user_obrona;
  28. $user2_walka9 = $user1_walka8 - $user_atak - $user_zrecznosc + $user2_obrona;
  29. //10 tura
  30. $user1_walka10 = $user1_walka9 - $user2_atak - $user2_zrecznosc + $user_obrona;
  31. $user2_walka10 = $user1_walka9 - $user_atak - $user_zrecznosc + $user2_obrona;
  32.  
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 - 16:15