Tetris w Pythonie

0

Cześć. Jest to mój pierwszy projekt wrzucony na GitHub i nie mam pojęcia na czym to polega. W każdym razie wydaje mi się, że można już pobrać pliki więc proszę o ocene kodu jak i gry. Użyłem bliblioteki PyGame.

https://github.com/nitroexe/tetris

0

z czego uczyles sie Pythona?

0

Tworząc różne projekty. Nie czytałem żadnej konkretniej książki czy tutoriala.

0

Jak na Pythona to za długi kod tego Tetrisa. Zobacz sobie np. http://joel-murielle.perso.sfr.fr/BCTetris.py :)

0

Nie mam pythona 2 ale zakładam, że jest to bardzo okrojona wersja tetrisa, ja chce stworzyć grę z większymi możliwościami i jak najbardziej czytelną. Mam też jedno pytanie, jak wyglądałby testy do tego kodu co zrobiłem? Każda funkcja, którą stowrzyłem powinna mieć test?

0

Nie jestem specem od pythona i chyba nie mam na tyle skilla żeby odpalić tą grę :C

a3ad1eecb6.png

1
        elif block_type == 2:
            if self.block_rotation == 0:
                new = (a - 11, b, c + 11, d + 22)
                block_rotation = 1
            elif self.block_rotation == 1:
                new = (a + 11, b, c - 11, d - 22)
                block_rotation = 0
        elif block_type == 3:
            if self.block_rotation == 0:
                new = (a - 11, b, c - 13, d - 2)
                block_rotation = 1
            elif self.block_rotation == 1:
                new = (a + 11, b, c + 13, d + 2)
                block_rotation = 0
        elif block_type == 4:
            if self.block_rotation == 0:
                new = (a + 2, b - 11, c, d + 11)
                block_rotation = 1
            elif self.block_rotation == 1:
                new = (a + 24, b + 13, c, d - 13)
                block_rotation = 2
            elif self.block_rotation == 2:
                new = (a - 2, b + 11, c, d - 11)
                block_rotation = 3
            elif self.block_rotation == 3:
                new = (a - 24, b - 13, c, d + 13)
                block_rotation = 0
        elif block_type == 5:
            if self.block_rotation == 0:
                new = (a - 11, b, c + 11, d - 24)
                block_rotation = 1
            elif self.block_rotation == 1:
                new = (a + 13, b, c - 13, d + 2)
                block_rotation = 2
            elif self.block_rotation == 2:
                new = (a + 11, b, c - 11, d + 24)
                block_rotation = 3
            elif self.block_rotation == 3:
                new = (a - 13, b, c + 13, d - 2)
                block_rotation = 0
        elif block_type == 6:
            if self.block_rotation == 0:
                new = (a + 13, b - 11, c, d + 11)
                block_rotation = 1
            elif self.block_rotation == 1:
                new = (a + 11, b + 13, c, d - 13)
                block_rotation = 2
            elif self.block_rotation == 2:
                new = (a - 13, b + 11, c, d - 11)
                block_rotation = 3
            elif self.block_rotation == 3:
                new = (a - 11, b - 13, c, d + 13)
                block_rotation = 0
        elif block_type == 7:
            if self.block_rotation == 0:
                new = (a, b + 11, c - 24, d - 13)
                block_rotation = 1

Chyba nie wypiłem jeszcze tyle, żeby dochodzić do czego to służy i co to robi.

0

Wg mnie odrobina komentarzy w kodzie by nie zaszkodziła ;)

0

@anonimowy masakra, ale zebyś sam sobie to uświadomił wprowadź małe modyfikacje:

  • plansza NxM gdzie N i M są ustalane przy uruchomieniu programu.
  • liczba kolorów klocków zadawana przy uruchomieniu programu, powiedzmy w zakresie 1-100000 kolorów.
    To żeby oduczyć cię hardkodowania wartości i robienia drabinek ifów.
  • wysokość/szerokość klocków zadawana parametrami P i K przy starcie programu, żeby nie było tak, że zrobię planszę 1000x1000 i będę ją układał z mega małych klocków przez pół dnia. Niech się klocki odpowiednio skalują. Najlepiej by było jakby klocki w ogóle się generowały losowo, ale wtedy gra mogłaby być za trudna.
0

@Shalom
Ale to ma być normalny tetris. Nie chce wprowadzać takich modyfikacji.

@n0name_l
Gdy gracz chce obrócic blok to w zależności od bloku (block_type) i akutalnej rotacji zmienia pozycje jego kwadratów tworząc blok w innej pozycji.

0

@anonimowy nie chodzi o to że ktoś tak będzie grał. Chodzi o to żebyś włączył myślenie w trakcie pisania kodu, a nie robił copy-pasty czy drabinki ifów. Bo jak masz 10 kolorów to może ci przyjść głupi pomysł na zapisanie 10 ifów. Tak samo jak masz planszę o ustalonych wymiarach, szczególnie małych, to kusi zabawa w rozpatrywanie przypadków albo hardkodowanie liczb...

0

@Shalom
Tetris jest prostą grą. Ma małą plansze, małą liczbe bloków, mało kombinacji. Po co to utrudniać?

6

Przepraszam, przez chwilę naiwnie myślałem że chcesz się nauczyć porządnie programować. Jak widać to był błąd...

2

skoro chcesz ocene i najbardziej konstruktywnej krytyki nie przyjmujesz do wiadomosci. To po jaka cholere w ogole tutaj piszesz?

Masz pisac kod tak by byl czytelny a zarazem uniwersalny. Ty co zrobiles to z hard-kodowales wartosci z wielka drabinka ifow. Dlatego osoby ktore pracuja w tych jezykach na codzien nie chca zrozumiec co Ty tam narobiles

0

@Shalom @fasadin
Przecież o to was pytam, po co utrudniać kod do tak prostej gry? Proszę o argumenty doświadczonych ludzi czemu odbieracie to jakbym nic nie przyjmował do wiadomości? To tak jak miałbym zakładać, że ta gra może być 3D a co jeśli chciałbym zrobić z tego GTA itd.? Prosze po prostu o kontraargumenty a wy to odbieracie jakbym olał wasze posty i czekał na pochwały.

0

@anonimowy @Shalom chciał ci pokazać, że przy innym projekcie gdzie będziesz musiał zrobić N×N gdzie np. N = 10000 to prędzej podskoczy wyżej d**y niż napiszesz ify. Prosiles by ktoś ocenił, panowie wyżej w grzeczny sposób powiedzieli ci ze to g**no, a nie kod. Żaden szanujący się pracodawca nie będzie nawet chciał z tobą gadać jak zobaczy to coś.

Reasumując, napisz kod od nowa, tak jak mówił @Shalom. Od ucz się głupich nawyków pisania ręcznie wszystkiego bo po to wymyślili programowanie by można było pętli używać np.

0

@anonimowy święta zasada: jeśli twierdzisz, że gdzieś w kodzie musisz użyć ctrl-c + ctrl-v to znaczy, że jesteś w poważnym błędzie.
Algorytmika i dobra architektura > bezmyślne klepanie linii

1

@anonimowy jak sie źle nauczysz pisać to tak będziesz pisał. A taki kod nadaje się co najwyżej na studencki projekt robiony na zasadzie "oddać i zapomnieć". W prawdziwym życiu programy ewoluują, wymagania sie zmieniają, soft pisze kilkanaście/kilkadziesiąt osób przez całe lata. Widziałem już takie cuda jak drabinki ifów na 700 linijek, które oczywiście nie chcą działać poprawnie ale nie można tego wywalić bo przepisanie tego po ludzku kosztowałoby bardzo bardzo dużo czasu (najpierw trzeba zrozumieć co ten kod robi...). A zaczęło sie pewnie tak niewinnie jak u ciebie - co to rozpisać sobie kilka przypadków. A potem kolejna osoba myśli, no przecież nie będę marnował pół dnia na przepisanie tego, dodam kilka kolejnych ifów. I tak rośnie ;]

Póki się uczysz ot ucz się pisać dobrze, bo przy większym projekcie okaże się że jednak "nie umiesz" zaprojektować sensownej architektury, bo nigdy tego nie zrobiłeś na prostym przykładzie. Bo na prostym przykładzie to działała każda, niezależnie od tego jak idiotyczna. A ty zamiast ćwiczyć na prostych przykładach poprawne tworzenie oprogramowania chcesz iść po linii najmniejszego oporu. Zaręczam ci że odbije ci się to czkawką ;]

To jak z suchoklatesami którzy idą pierwszy raz na siłownie i zamiast wziąć małe ciężary i poprawnie wykonywać ćwiczenia, a potem zwiększać obciążenie z czasem robią takie cuda:

byle tylko pokazać ile to oni nie wezmą ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1