Utilaft
5.02.2013, 14:55:55
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.
_Borys_
5.02.2013, 16:14:55
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;
}
Utilaft
5.02.2013, 16:37:15
Znów całe CPU hostingu wezmę

skrypt się wykonuje w nieskonczonosc.
_Borys_
5.02.2013, 16:56:31
No dopóki nie będzie zera

, o to przecież chodziło ?
Utilaft
5.02.2013, 17:13:07
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)
_Borys_
5.02.2013, 18:08:42
to może
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;
}
wtedy również jak będzie minus to pętla się zakończy.
Przykład działania:
$c = 1;
while ($c > 0)
{
}
Utilaft
5.02.2013, 22:10:35
Ten Twój 1 przykład nie działa, i ten mój
while($user1_walka < 0 || $user2_walka < 0) {
$user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
$user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
}
echo 'Zadałeś przeciwnikowi obrażeń: '.$user1_walka.'<br>'; echo 'Przeciwnik zadał Ci obrażeń: '.$user2_walka.'<br>';
Po prostu nie wyświetla mi zadanych obrażeń (Wyniku z działania)
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 -=
_Borys_
5.02.2013, 23:44:53
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.
Utilaft
6.02.2013, 19:25:51
Dupa, nie działa nic. Nie wyswietla
Damonsson
6.02.2013, 19:29:49
Zobacz mój post:
http://forum.php.pl/index.php?showtopic=19...st&p=939823Przerób to sobie na pętle działającą, aż któryś będzie miał 0 i tyle.
Utilaft
6.02.2013, 19:55:05
for($user1_walka > 0; $i <= 10; $i++) {
$user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
$user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
$i++;
echo 'runda: '.$i.'<br />'; echo $user1_walka.'<br />';
}
i to też:
for($i = 0; $user1_walka > 0; $i++) {
$user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
$user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
$i++;
echo 'runda: '.$i.'<br />'; echo $user1_walka.'<br />';
}
Pętli for jeszcze nie przerabiałem, i nie bardzo wiem jak się do tego zabrać.
Damonsson
6.02.2013, 20:21:44
<?php
$player1 = '100';
$player2 = '100';
$user_atak = '5';
$user_zrecznosc = '5';
$user_obrona = '5';
$user2_atak = '5';
$user2_zrecznosc = '5';
$user2_obrona = '5';
echo "Gracz 1 zaczyna ze $player1 życia <br/>";
echo "Gracz 2 zaczyna ze $player2 życia <br/><br/><br/>";
$i = 1;
while(true) {
//for(;;) {
$player1 = $player1 - $user2_atak - $user2_zrecznosc + $user_obrona;
$player2 = $player2 - $user_atak - $user_zrecznosc + $user2_obrona;
if ($player1 <= 0 || $player2 <= 0) {
if ($player1 < $player2) {
echo "wygrał gracz 2, gracz 1 padł";
} elseif ($player1 > $player2) {
echo "wygrał gracz 1, gracz 2 padł";
} else {
}
break;
}
echo "Graczowi 1 zostało $player1 życia <br/>";
echo "Graczowi 2 zostało $player2 życia <br/><br/><br/>"; $i++;
}
?>
Czy while, czy for to mało istotne.
Utilaft
7.02.2013, 20:12:14
Życia mam przypisane już z mysqla. Zaraz przetestuje
Przegrales walke. Przeciwnik zniszczyl cie .Graczowi 1 zostalo -100 życia
Graczowi 2 zostalo 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.
Damonsson
7.02.2013, 20:19:21
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.
Utilaft
7.02.2013, 20:21:06
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.
sazian
7.02.2013, 20:22:21
Cytat(Utilaft @ 5.02.2013, 22:10:35 )

Ten Twój 1 przykład nie działa, i ten mój
while($user1_walka < 0 || $user2_walka < 0) {
$user1_walka = 10/$user_atak * 100/$user_zrecznosc + $user2_obrona + $user2_zycie;
$user2_walka = 10/$user2_atak * 100/$user2_zrecznosc + $user_obrona + $user_zycie;
}
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
Utilaft
7.02.2013, 20:34:58
Czyli jak mam to rozwiązać?
sazian
7.02.2013, 20:41:08
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 ?
Utilaft
8.02.2013, 14:37:01
Ok, poradziłem sobie. Może trochę na około ale jest.
//1 tura
$user1_walka1 = $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka1 = $user_atak - $user_zrecznosc + $user2_obrona;
//2 tura
$user1_walka2 = $user1_walka1 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka2 = $user1_walka1 - $user_atak - $user_zrecznosc + $user2_obrona;
//3 tura
$user1_walka3 = $user1_walka2 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka3 = $user1_walka2 - $user_atak - $user_zrecznosc + $user2_obrona;
//4 tura
$user1_walka4 = $user1_walka3 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka4 = $user1_walka3 - $user_atak - $user_zrecznosc + $user2_obrona;
//5 tura
$user1_walka5 = $user1_walka4 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka5 = $user1_walka4 - $user_atak - $user_zrecznosc + $user2_obrona;
//6 tura
$user1_walka6 = $user1_walka5 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka6 = $user1_walka5 - $user_atak - $user_zrecznosc + $user2_obrona;
//7 tura
$user1_walka7 = $user1_walka6 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka7 = $user1_walka6 - $user_atak - $user_zrecznosc + $user2_obrona;
//8 tura
$user1_walka8 = $user1_walka7 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka8 = $user1_walka7 - $user_atak - $user_zrecznosc + $user2_obrona;
//9 tura
$user1_walka9 = $user1_walka8 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka9 = $user1_walka8 - $user_atak - $user_zrecznosc + $user2_obrona;
//10 tura
$user1_walka10 = $user1_walka9 - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka10 = $user1_walka9 - $user_atak - $user_zrecznosc + $user2_obrona;
Damonsson
8.02.2013, 15:25:18
Jak już się wczułeś, to rozpisz sobie dla 100 tur
Utilaft
8.02.2013, 16:40:42
Hehe. Nie robił bym tego, gdybym nie wiedział co robię. Mianowicie walka będzie zawsze na 10 tur ; )
sazian
8.02.2013, 19:11:24
o boże
pisząc o rozpisaniu tego na kartce miałem nadzieję że zauważysz że $user1_walka oraz $user2_walka są stałe we wszystkich przejściach pętli ale to chyba było zbyt skomplikowane
while($user1_walka > 0 && $user2_walka > 0 )
{
$user1_walka = $user1_walka - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka = $user2_walka - $user_atak - $user_zrecznosc + $user2_obrona;
}
lub z limitem do dziesięciu
for($i=1;$i<=10;$i++ )
{
$user1_walka = $user1_walka - $user2_atak - $user2_zrecznosc + $user_obrona;
$user2_walka = $user2_walka - $user_atak - $user_zrecznosc + $user2_obrona;
if($user1_walka < 0 || $user2_walka < 0)
{
break;
}
}
Utilaft
8.02.2013, 19:16:20
@up. Dzięki za kod. No właśnie zauważyłem że cały czas się to samo robiło, dlatego zrobiłem taki kod. Tą pętle for też próbowałem.
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.