• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z własną grą w PyGame

VPS Starter Arubacloud
0 głosów
614 wizyt
pytanie zadane 6 sierpnia 2019 w Python przez akinhet Nowicjusz (170 p.)
Witam,

jakiś czas temu zacząłem uczyć się Pythona (od września idę do technikum informatycznego). Zaczęło się od książeczki z Komputer Świata o nauce właśnie Pythona. Znajdowała się tam instrukcja mówiąca o tym jak zrobić grę o helikopterze latającym w jaskini. Wykonałem ją, ale trochę nie spodobały mi się założenia gry(przeszkody pojawiały się randomowo, ale tylko wokół jednej linii, a punkty były przyznawane za poruszanie się w górę i w dół), więc zacząłem przy niej grzebać. Teoretycznie większość rzeczy udało mi się osiągnąć(kontrola prędkości postaci, ograniczony, a nie ciągły ruch po wciśnięciu przycisku, ciekawsze pojawianie się przeszkód), jednak pojawił się dosyć niespodziewany problem: po przegraniu i próbie zagrania ponownie, w miejscu w którym wszystkie przeszkody powinny być w jednej linii, pojawiają się słupy o losowej wysokości, zabijające gracza praktycznie od razu. Nie mam pojęcia skąd mogą się one brać, bo na starcie gry wszystko jest ok. Bardzo proszę o sprawdzenie, gdzie może być ewentualny błąd. Byłbym również wdzięczny za wszelkie inne uwagi dotyczące zarówno kodu jak i samej gry.

Kod: https://github.com/akinhet/Helicopterrr

1 odpowiedź

0 głosów
odpowiedź 6 sierpnia 2019 przez adrian17 Ekspert (349,380 p.)

Nie wiem czy to akurat to, ale te dwa miejsca się rzucają w oko:

                                        for o in obstacles:
                                                obstacles.remove(o)
                for o in obstacles:
                        if o.x <= -o.width:
                                obstacles.remove(o)
                                obstacles.append(Obstacle(wid,wid/20))
                                points = points + 1

To raczej nie robi tego co myślisz. Przykład:

In [1]: a = [1, 2, 3, 4, 5, 6]                                                                                                                                                                                      

In [2]: for x in a: 
   ...:     a.remove(x) 
   ...:                                                                                                                                                                                                             

In [3]: a                                                                                                                                                                                                           
Out[3]: [2, 4, 6]

W szczególności to pierwsze powinno dać się zastąpić przez zwykłe `obstacles.clear()`.

komentarz 6 sierpnia 2019 przez akinhet Nowicjusz (170 p.)
Ok, dzięki wielkie, teraz faktycznie działa :D. A tak w ogóle to mógłbyś mi wytłumaczyć dlaczego się tak dzieje, jak w tym przykładzie?
komentarz 6 sierpnia 2019 przez adrian17 Ekspert (349,380 p.)

Jasne.

No to po kolei:

a = [1, 2, 3, 4, 5, 6]
x = a[0] # pierwsza iteracja
a.remove(x) # teraz a == [2, 3, 4, 5, 6]
x = a[1] # druga iteracja, x == 3
a.remove(x) # teraz a == [2, 4, 5, 6]
x = a[2] # trzecia iteracja, x == 5
a.remove(x) # teraz a == [2, 4, 6]
# a[3] nie ma, koniec pętli

 

komentarz 6 sierpnia 2019 przez akinhet Nowicjusz (170 p.)

AAA, ok faktycznie. Nie wpadłbym na to. Dzięki wielkie smiley.

Podobne pytania

0 głosów
0 odpowiedzi 289 wizyt
pytanie zadane 27 października 2022 w Python przez Podlasianin Początkujący (400 p.)
0 głosów
0 odpowiedzi 349 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 291 wizyt
pytanie zadane 19 lipca 2019 w Python przez Patryk01 Obywatel (1,270 p.)

93,006 zapytań

141,973 odpowiedzi

321,254 komentarzy

62,348 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...