
Tetris (dan Snake) adalah "Hello World" di dunia game dev. Tampaknya sulit untuk merusaknya, tetapi penulis repositori ini berusaha keras. Kami membedah proyek yang disajikan sebagai "materi pembelajaran untuk pemula". Ya, kodenya berfungsi, proyek selesai, bahkan ada video di YouTube. Namun pada kenyataannya, mereka mengajarkan kebiasaan buruk.
1️⃣ Tidak ada titik masuk
Dalam
main.py, kode hanya ditumpuk di akar file. Tidak ada if __name__ == "__main__":. Jika Anda mencoba mengimpor sesuatu dari file ini (meskipun untuk apa?), Pygame akan langsung diinisialisasi dan jendela akan terbuka. 2️⃣ Masalah dengan ruang nama
Dalam
game.py kita melihat yang indah: from blocks import *. Ingat: setiap kali Anda menggunakan
import *, Anda memenuhi ruang nama dengan sampah. Kelas apa yang masuk? Dari mana? Tidak ada yang tahu. 3️⃣ Kelas orkestra
Kelas
Game adalah segalanya. Ia mengelola logika, menghitung skor, memuat suara, memutar musik, dan... menggambar blok. Pelanggaran SRP (Single Responsibility Principle) terlihat jelas. Logika permainan tidak boleh tahu tentang keberadaan
pygame.mixer atau cara menggambar persegi panjang. # Di dalam Game.__init__
self.rotate_sound = pygame.mixer.Sound("Sounds/rotate.ogg")
pygame.mixer.music.load("Sounds/music.ogg")Ingin mengganti library suara? Semoga berhasil menulis ulang seluruh inti game.
4️⃣ OOP berlebihan: Warisan demi... tidak ada
Dalam
blocks.py kita melihat kesalahan klasik: membuat tujuh kelas berbeda (LBlock, JBlock, dll.) yang mewarisi dari Block hanya untuk menulis kamus koordinat di __init__.Ini adalah over-engineering klasik. Semua kelas ini tidak memiliki perilaku unik, hanya data yang berbeda.
Seharusnya: Satu kelas
Block yang menerima tipe bentuk atau konfigurasi saat inisialisasi. Data terpisah, logika terpisah.5️⃣ Kelas Position — untuk apa?
class Position:
def __init__(self, row, column):
self.row = row
self.column = columnMembuat seluruh kelas untuk menyimpan dua bilangan bulat itu berlebihan. Di Python ada
namedtuple, dataclasses, atau setidaknya tuple sederhana (row, col). 6️⃣ Angka ajaib dan hardcode
if self.next_block.id == 3:
self.next_block.draw(screen, 255, 290)
elif self.next_block.id == 4:
self.next_block.draw(screen, 255, 280)Ini adalah UI "tambal sulam" murni. Alih-alih menghitung pusat area pratinjau, penulis hanya menyesuaikan koordinat dengan ID blok tertentu. Tambahkan blok baru — dan seluruh tata letak akan kacau.
7️⃣ Penanganan skor dari zaman mamut
Dalam
game.py kita melihat ini:def update_score(self, lines_cleared, move_down_points):
if lines_cleared == 1:
self.score += 100
elif lines_cleared == 2:
self.score += 300
# ... dan seterusnyaSeharusnya: Kamus atau daftar koefisien biasa akan membuat kode ini menjadi satu baris. Rantai
elif untuk korespondensi sederhana adalah tanda pasti bahwa penulis tidak menguasai struktur data.🧑⚖️ Vonis:
Sebagai proyek pembelajaran — lumayan. Jika Anda belajar dari tutorial seperti ini, ingatlah: tujuannya adalah menunjukkan hasil dalam video 20 menit, bukan mengajari Anda menulis kode yang baik. Jangan bawa pola-pola ini ke produksi.
#menggoreng_kode
Komentar
0Belum ada komentar.