• 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

Mały hosting, OGROMNE możliwości
0 głosów
614 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,400 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 Mentor (354,880 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,800 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 917 wizyt
pytanie zadane 29 stycznia 2017 w PHP przez niezalogowany
+1 głos
3 odpowiedzi 670 wizyt
pytanie zadane 15 sierpnia 2019 w C# przez luna22 Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 513 wizyt
pytanie zadane 7 listopada 2017 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

93,715 zapytań

142,629 odpowiedzi

323,259 komentarzy

63,255 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...