![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Pisze skrypt walki dwóch kont :
Ten skrypt powinien z kazda petla losowac kto uderzy i odejmowac 2 HP. Problem jest taki że atakuje zawsze tylko jeden gracz oraz nic nie odejmuje graczowi zycia. Czyli user 1 atakuje 1000 razy usera 2 zadajac 2 pkt ograzen a ciagle przeciwnik ma 100 hp i walka sie nie konczy. -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ile razy można to przerabiać...
Sprawdź jak dokładnie wygląda zapytanie echo "update players set hp=hp-$sila where id=$enemy[id]"; sprawdź czy się dobrze wykonuje - mysql_error(). O tym wszystkim masz napisane w temacie: Temat: Jak poprawnie zada pytanie który już ci dawałem do przestudiowania. Naprawdę podane tam informacje nie są naszym wybrykiem natury a przydatnymi informacjami w rozwiązywaniu banalnych problemów edit: while ($mojehp==0 or $ehp==0){ oznacza to, że pętla będzie się wykonywała dopóki twoje hp lub przeciwnika będzie równe zero - dziwny warunek. Na dodatek, w pętli nigdzie nie zmieniasz tych wartości, więc jesli raz ci wejdzie w tę pętlę to z niej nie wyjdzie. Analizujesz czasami to co piszesz? edit2: $mojehp = ' . stat[hp] . '; $ehp = ' . enemy[hp] . '; A co to ma byc? przeciez przypisujesz tutaj tekst '. stat[hp] . ' a nie wartość $stat[hp]. Nic dziwnego ze masz spełniony warunek while ($mojehp==0 or $ehp==0){ ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Po pierwsze: A pętla while nie trwa do czasu aż warunek przestaje być prawdziwy?
![]() Po drugie: po co zarżynać bazę robiąc każdą akcję po kolei do niej? Prościej i o niebo wydajniej jest zapisywać wszystkie akcje/łupy/obrażenia w postaci tablicy, potem ją serializować i zapisać do bazy. Zwróć uwagę... Najpierw zapis wszystkiego do tablicy w PHP, a dopiero na koniec wrzucenie tego do bazy. Co lepsze? Zapis całej akcji w jednym rekordzie, czy kombinowanie z wieloma rekordami, których bez problemów może być kilkadziesiąt. Zwróć uwagę na wydajność. Obliczenia po stronie php są szybkie i całość ograniczy do nich+zapis do bazy 1 rekordu. Z drugiej strony kilkadziesiąt zapisów do bazy i brak w tej chwili zapisu stanu. Po prostu zamiast odejmować w PHP, robisz to w bazie. Gwoździe wbijasz za pomocą trzonka piły do drewna. Niby też można, tylko po co? Po trzecie: wspomniane przez nospora zapomniane zmienianie wartości punktów hp obu graczy. To, że żaden z graczy nie walczy to efekt właśnie braku odejmowania i dodatkowo tego, że nawet nie wchodzi do pętli co opisałem w punkcie pierwszym. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Po pierwsze: A pętla while nie trwa do czasu aż warunek przestaje być prawdziwy? Jak więc while( $hp_moje == 0 || $hp_wroga == 0) ma być choć raz zrobione, skoro na dzień dobry ma FALSE? Jak dla mnie raczej while( $hp_moje > 0 && $hp_wroga > 0), bo wtedy przerwie w chwili gdy życie jednego spadnie do 0 lub niżej. To istotne zwłaszcza tym bardziej, że masz dynamiczne wartości ataku i obrony(!). Cytat Po trzecie: wspomniane przez nospora zapomniane zmienianie wartości punktów hp obu graczy. To, że żaden z graczy nie walczy to efekt właśnie braku odejmowania i dodatkowo tego, że nawet nie wchodzi do pętli co opisałem w punkcie pierwszym. @thek przeczytaj jeszcze raz moje edity z poprzedniego posta a zrozumiesz, że własnie mu wchodzi w pętle i nie chce wyjść ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jak może wejść w pętlę, skoro warunek w while jest nieprawidłowy? Ja rozumiem do-while i wykonanie się jednokrotne, bo wtedy OK. Ale powiedz jakim cudem przy jego warunku mogło do pętli wejść. Jedyne co to gdy chociaż jedna z nich była niezadeklarowana przed nią i php domyślnie ją utworzył oraz zainicjował zerem, bo wtedy spełniłby się warunek równości z 0. Innej możliwości nie widzę.
Aaaaa... Teraz widzę ten tekst zamiast zmiennych w Twoim edit2 ![]() ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Czyli niezainicjowane zmienne stają się zerami Ależ nie, zmienne są zainicjowane. Ino że tekstem:$mojehp = ' . stat[hp] . '; A sam wiesz jak wygląda przyrównanie tekstu do 0 ![]() edit: to też jest ciekawe: If ($los = 1 or $los = 2){ ![]() @Lethys jesteś na forum tyle lat... mógłbyś już naprawdę znać podstawy języka php... -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Obecnie mój skrypt wygląda tak :
dla mnie wszystko jest tutaj jasne czarne na białym a mimo to skrypt nie działa ![]() W praktyce wygląda to tak : Cytat Strzelasz do lolek, zadejesz mu 2 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 3 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 3 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 5 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 5 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 4 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 5 obrażeń [pozostało 100 życia] Strzelasz do lolek, zadejesz mu 4 obrażeń [pozostało 100 życia].... i tak bez końca Jest ktoś w stanie mi pomóc z tym skryptem ? Z góry dziękuje -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
1)nie:or mysql_error();
a: or die(mysql_error()); 2) $hp_moje > 0 && $hp_wroga > 0 @Lethys czy ty naprawdę myslisz ze te dwie zmienne same się zmniejszą? Ty ich nigdzie nie zmniejszasz...nigdzie.... -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Dzięki nospor
![]() zrobiłem to tak :
I teoretycznie działa, tylko właśnie jest kolejny problem. W pętli nie losuje kto będzie atakować tylko wyświetla. Cytat Strzelasz do lolek, zadejesz mu 2 obrażeń [pozostało 98 życia] Strzelasz do lolek, zadejesz mu 5 obrażeń [pozostało 93 życia] Strzelasz do lolek, zadejesz mu 4 obrażeń [pozostało 89 życia] Strzelasz do lolek, zadejesz mu 4 obrażeń [pozostało 85 życia] Strzelasz do lolek, zadejesz mu 1 obrażeń [pozostało 84 życia] Strzelasz do lolek, zadejesz mu 1 obrażeń [pozostało 83 życia] Strzelasz do lolek, zadejesz mu 1 obrażeń [pozostało 82 życia] Strzelasz do lolek, zadejesz mu 2 obrażeń [pozostało 80 życia] ... przecież w kodzie mam zaraz na początku pętli zrobione losowanie. -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
poczytaj jaka jest roznica miedzy = a ==
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 08:37 |