Wpis z mikrobloga

Z braku zajęć oraz chęci odpoczęcia od Django napisałem sobie dla przyjemności prostego snake'a w #python
Chciałem wszystko utrzymać w terminalu bez używania bibliotek typu pygame oraz tkinter, czy tam curses - o dziwo udało się. Jestem zadowolony z tego mini-projektu, bo:
1. Nie musiałem korzystać ani razu z stackoverflow
2. Przeszedłem samemu przez całą logikę takiej prostej gierki bez wzorowania się na implementacjach innych osób
3. Wydaje mi się że wyszło całkiem w porządku ()

Kod na pewno nie jest idealny, bo nadal w sumie #naukaprogramowania, ale mimo wszystko wydaje się zgrabny i czytelny. Może doradzicie co można poprawić i jak oceniacie: https://pastebin.com/eTjh1Hur

Nie podoba mi się trochę metoda move(), ale jak coś wymyślę to poprawię.

Testowałem tylko w terminalu linuxowym na roocie(minus keyboard), więc nie wiem jak się zachowa na windowsie

Todo: Unit testy, rozbicie na mniejsze pliki, menu oraz system żyć. Przeniesienie na pygame
#programowanie
KevinMalone - Z braku zajęć oraz chęci odpoczęcia od Django napisałem sobie dla przyj...

źródło: comment_1587581850bcuSIRZxMl79d8IguyR84Z.jpg

Pobierz
  • 13
@KevinMalone: Jest kilka rzeczy, które niekoniecznie są błędami, ale są "niepythonowe". Np funkcję Board.create_board() można napisać przy pomocy list comprehensions

return [["" for _ in range(self.WIDTH)] for _ in range(self.HEIGHT)]
albo jeszcze krócej przy pomocy *

return [[""] * self.WIDTH] * self.HEIGHT
Z tą drugą metodą należy uważać, bo działa trochę nieintuicyjnie, ale list comprehensions warto znać.
@KevinMalone: do trzymania cielska węża możesz użyć collections.deque, lepiej sobie radzi z operacjami na obu końcach niż zwykła lista. create_board jest wywoływane tylko podczas tworzenia obiektu, można z tego zrobić funkcję "prywatną" i wywoływać ją wewnątrz inita.

I tak dla porządku dodałbym przekazywanie obiektów snake i board do funkcji start_game, bo czytając pojawia się małe wtf skąd one się tam wzięły.

A, i w funkcji collision if jest niepotrzebny,
@kkthxbb: Dzięki! Faktycznie, 'spawn_apple()' powinno być w Board. I dzięki za sugestię, nie pomyślałem o użyciu słówników - zaimplenetuję ( ͡° ͜ʖ ͡°)

@HefiDL: Mam repo na gicie, ale jest tam taki syf że nie chciałem póki co tutaj linkować xD

@ProfesorBigos: Faktycznie, zapomniałem o list comprehensions. Miałem w planach to przepisać w taki sposób jak podałeś, bo potrafię tego używać, ale jakoś mi umknęło
@HefiDL: Imię + dev, ale schemat Imie Nazwisko będzie chyba bardziej reprezentacyjny xD

Dzięki ( ͡° ͜ʖ ͡°) Mam planach coś w stylu ponga, ale może z użyciem curses, coby jak najwięcej rzeczy napisać z palca zanim zacznę sobie ułatwiać bardziej współczesnymi rozwiązaniami.