![]() |
![]() |
![]()
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: 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? (IMG:style_emoticons/default/winksmiley.jpg) 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(!).
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 08:45 |