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:

  1. Jendela terbuka menampilkan kotak biru (pemain) dan lingkaran kuning (koin).
  2. Tombol panah menggerakkan pemain di sekitar layar.
  3. Saat pemain tumpang tindih dengan koin, skor bertambah 1 dan koin baru muncul di posisi acak.
  4. Skor saat ini ditampilkan di sudut kiri atas sepanjang waktu.
  5. 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:

  1. Buka jendela, isi latar belakang, jalankan event loop — belum ada yang bergerak.
  2. Gambar kotak pemain dan gerakkan dengan tombol panah.
  3. Gambar koin di posisi tetap.
  4. Deteksi pengumpulan dan tambah skor.
  5. Munculkan koin baru di posisi acak.
  6. Gambar teks skor.

Setiap langkah bisa diuji sendiri sebelum melanjutkan ke berikutnya.

Petunjuk

  • Gunakan pygame.Rect untuk pemain. Memperbarui rect.x dan rect.y setiap frame sudah cukup untuk menggerakkannya. Clamp dengan rect.clamp_ip(screen.get_rect()) untuk mencegah pemain keluar dari jendela.
  • Simpan posisi koin sebagai tuple (x, y) biasa. Gambar ulang setiap frame dengan pygame.draw.circle.
  • Untuk memeriksa pengumpulan, buat rect kecil di sekitar koin dan uji player_rect.colliderect(coin_rect), atau gunakan player_rect.collidepoint(coin_x, coin_y).
  • Munculkan koin baru dengan random.randint(padding, screen_width - padding) untuk x dan y, di mana padding menjaga koin dari tepi (gunakan radius koin sebagai padding).
  • Render teks skor dengan font.render(f"Score: {score}", True, WHITE) dan screen.blit di (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.