Mini-proyek Bagian 7: Coin Collector
Proyek pertama Bagian 7 menggabungkan semua hal dari Bab 31-35: jendela pygame, input keyboard, menggerakkan pemain, dan mendeteksi saat dua objek saling tumpang tindih. Satu koin berada di suatu tempat di layar; kumpulkan itu, koin baru muncul, dan skormu bertambah.
Yang harus dibangun
Saat program berjalan:
- Jendela terbuka menampilkan kotak biru (pemain) dan lingkaran kuning (koin).
- Tombol panah menggerakkan pemain di sekitar layar.
- Saat pemain tumpang tindih dengan koin, skor bertambah 1 dan koin baru muncul di posisi acak.
- Skor saat ini ditampilkan di sudut kiri atas sepanjang waktu.
- Menutup jendela mengakhiri game.
Tampilan layar
Latar belakang berwarna abu-abu gelap. Pemain adalah kotak biru padat
(40x40 piksel). Koin adalah lingkaran kuning terisi (radius 15). Skor
menampilkan Score: 3 dalam teks putih di sudut kiri atas.
Tidak ada dekorasi lain.
File
projects/06-coin-collector/
coin_collector.py
Semuanya muat dalam satu file. Tidak ada kerangka awal untuk proyek ini — tulis dari awal menggunakan petunjuk di bawah.
Jalankan dengan:
python projects/06-coin-collector/coin_collector.py
Cara mendekatinya
Kerjakan dalam urutan ini:
- Buka jendela, isi latar belakang, jalankan event loop — belum ada yang bergerak.
- Gambar kotak pemain dan gerakkan dengan tombol panah.
- Gambar koin di posisi tetap.
- Deteksi pengumpulan dan tambah skor.
- Munculkan koin baru di posisi acak.
- Gambar teks skor.
Setiap langkah bisa diuji sendiri sebelum melanjutkan ke berikutnya.
Petunjuk
- Gunakan
pygame.Rectuntuk pemain. Memperbaruirect.xdanrect.ysetiap frame sudah cukup untuk menggerakkannya. Clamp denganrect.clamp_ip(screen.get_rect())untuk mencegah pemain keluar dari jendela. - Simpan posisi koin sebagai tuple
(x, y)biasa. Gambar ulang setiap frame denganpygame.draw.circle. - Untuk memeriksa pengumpulan, buat rect kecil di sekitar koin dan uji
player_rect.colliderect(coin_rect), atau gunakanplayer_rect.collidepoint(coin_x, coin_y). - Munculkan koin baru dengan
random.randint(padding, screen_width - padding)untuk x dan y, di manapaddingmenjaga koin dari tepi (gunakan radius koin sebagai padding). - Render teks skor dengan
font.render(f"Score: {score}", True, WHITE)danscreen.blitdi(10, 10).
pygame.key.get_pressed() mengembalikan kondisi setiap
tombol setiap frame. Periksa keys[pygame.K_LEFT],
keys[pygame.K_RIGHT], keys[pygame.K_UP],
keys[pygame.K_DOWN] untuk bergerak di setiap arah.
Yang belum bisa kamu gunakan
Bab 36 dan seterusnya membahas desain class yang lebih canggih. Untuk proyek ini, simpan semua di level atas atau dalam function sederhana — tidak perlu class khusus.
Tujuan tambahan opsional
- Percepat pemain satu piksel per koin yang dikumpulkan, sehingga game semakin sulit seiring waktu.
- Skor tertinggi. Lacak skor terbaik antar ronde; tampilkan bersama skor saat ini.
- Koin menyusut. Setelah koin muncul, kurangi radiusnya 1 setiap detik hingga menghilang (koin terlewat, tidak ada poin).
Tidak ada dari ini yang diperlukan untuk menyelesaikan proyek.
Selesai?
Saat pemain bisa bergerak, mengumpulkan koin, dan melihat skor bertambah setiap kali — proyek pertama Bagian 7 selesai. Lanjut ke proyek Bagian 7 kedua: Collect-All-Coins.