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

Python - ocena krótkiego kodu OOP

Object Storage Arubacloud
0 głosów
392 wizyt
pytanie zadane 16 stycznia 2019 w Python przez niezalogowany
Hej, prosta gra "Pong" napisana z wykorzystaniem języka python.
Starałem się pisać ją wykorzystując programowanie zorientowane obiektowo.

Prosimy o ocenę i wytknięcie niedoskonałości i jawnych błędów :)

https://gitlab.com/raptoor2/python-pong/tree/master

3 odpowiedzi

0 głosów
odpowiedź 22 stycznia 2019 przez profesorek96 Szeryf (91,420 p.)
Moim zdaniem dość ładnie rozdzieliła to na klasy. Jednak czemu użyłeś biblioteki turtle która nie jest demonem szybkości w renderowaniu ekranu. Jeśli chciałbyś robić jakieś prototypy i w ogóle pythonem się bawić w proste gry to polecam bibliotekę pygame.
komentarz 13 marca 2019 przez Adille Początkujący (300 p.)
Twoj komentarz jest troche zbedny, zrobil gre w pythonie bo moze akurat uczy sie tego jezyka a gra jest ciekawym projektem.
0 głosów
odpowiedź 22 stycznia 2019 przez adrian17 Ekspert (344,860 p.)
class Ball(p.Paddle):

Piłka nie jest rakietką.

    def gety(self):
        return self.paddle.ycor()

    def getx(self):
        return self.paddle.xcor()

    def sety(self, value):
        self.paddle.sety(value)

    def setx(self, value):
        self.paddle.setx(value)

Poczytaj o @property.

    def checkPositions(self):
        self.obj1x = self.obj1.getx()
        self.obj2x = self.obj2.getx()

        self.obj1y = self.obj1.gety()
        self.obj2y = self.obj2.gety()

Nie do końca widzę sens używania metody, osobiście bym używał po prostu self.obj1.x. Plus, metoda ma `check` w nazwie ale nic nie sprawdza.

        if self.obj2x < 0:
            self.length = 20
        elif self.obj2x > 0:
            self.length = -20

Jeśli obj2x == 0 to program się wysypie, bo self.length nie będzie nigdzie ustawione. Poza tym, wygląda że self.length mogłoby być po prostu zmienną lokalną, nie ma potrzeby trzymać tego w obiekcie.

        if (...):
            return True

Wypadałoby w przeciwnym przypadku zwrócić False. Albo od razu `return (warunek boolowy)`.

0 głosów
odpowiedź 22 stycznia 2019 przez RafalS VIP (122,820 p.)

Gierka funkcjonalnie spoko. Może poza tym, że prędkość piłki jest uzależniona od fpsów i ta prosta gierka ostro katuje procesor.

Co do kodu to jest dużo gorzej:

  1. self.ball = p.Paddle.__init__(self,size,shape,color,startpost,speed)

    init nie zwraca niczego. self.ball == None

  2. Ball nie powinien dziedziczyć po Paddle, bo piłka to nie ten prostokąt do odbijania. Spróbuj wyodrębnić do oddzielnej klasy to co łączy Paddle i Ball i zrób z niej klase bazową dla obu. Powinna wyjść klasa w stylu MovableObject.

  3. Wut? Collision też dziedziczy po Paddle? Czemu? Dlaczego?

  4. def checkPositions(self):

    która ustawia pola klasy? 

  5. Metoda make_paddle w klasie Paddle robi to co powinien robić konstruktor. Ponadto zwraca self.paddle, ktore jest ignorowane.

  6. class Write. Nazwy klas powinne być rzeczownikami. Może prędzej ScoreTextWriter?

  7. Wszystkie zmienne przypisujesz do klasy (np self.obj2bottompos) kiedy w części przypadków mogłyby być zmiennymi lokalnymi w metodzie.

  8.     def ballMove(self):
    
            self.setx(self.paddle.xcor() + self.ballDeltaX)

    self.paddle w klasie ball?

  9.         self.wn = turtle.Screen()
            self.wn.listen()

    W metodzie movePaddle. Czemu co chwile to wywolujesz? Jeśli raz przypisałeś w inicie to możesz korzystać z self.wn.

Podobne pytania

0 głosów
2 odpowiedzi 451 wizyt
pytanie zadane 29 stycznia 2017 w PHP przez niezalogowany
+1 głos
3 odpowiedzi 317 wizyt
pytanie zadane 15 sierpnia 2019 w C# przez luna22 Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 301 wizyt
pytanie zadane 7 listopada 2017 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...