Mini-proyek Bagian 6: Monster Battle

Proyek Bagian 6 yang kedua adalah pertarungan berbasis giliran yang kecil: dua instance dari class yang sama, masing-masing dengan health-nya sendiri, bergantian sampai salah satu jatuh. Ini menggunakan class, method, loop while, dan sedikit keacakan.

Apa yang dibangun

Program yang, ketika dijalankan:

  1. Mendefinisikan class Monster dengan nama, hit points, dan kekuatan serangan.
  2. Membuat dua monster — misalnya Hero dan Goblin — masing-masing dengan angkanya sendiri.
  3. Melakukan loop: selama keduanya masih hidup, yang pertama memukul yang kedua, kemudian (jika masih berdiri) yang kedua balas memukul. Setiap pukulan menghasilkan kerusakan acak hingga sebesar kekuatan penyerang.
  4. Berhenti ketika HP salah satu monster mencapai 0, dan mencetak pemenang.

Contoh satu ronde:

-- Round 3 --
Hero hits Goblin for 5. Goblin has 4 HP left.
Goblin hits Hero for 2. Hero has 19 HP left.

Membangunnya dari apa

Class Monster membutuhkan:

  • __init__(self, name, hp, attack) — constructor.
  • is_alive(self) — mengembalikan True selama hp > 0.
  • hit(self, other) — memberikan kerusakan random.randint(1, self.attack) kepada monster lain, tidak pernah di bawah 0, dan mencetak hasilnya.

Pertarungan adalah loop while keduanya masih hidup; pengecekan menang adalah satu if.

File

Kedua versi ada di projects/monster-battle/:

  • starter.py — komentar TODO untuk class, dua monster, loop, dan hasilnya.
  • finished.py — versi yang berfungsi untuk dibandingkan setelahnya.

Jalankan dengan:

python projects/monster-battle/starter.py

Petunjuk

  • Kerusakan acak berarti setiap jalannya berbeda — tapi selalu berakhir, karena setiap pukulan menurunkan HP dan HP tidak pernah naik kembali.
  • Biarkan monster kedua balas memukul hanya if other.is_alive(), agar yang baru saja pingsan tidak mendapat serangan gratis.
  • Batasi HP dengan if other.hp < 0: other.hp = 0 agar HP yang tercetak tidak pernah negatif.

Tantangan lebih besar (opsional)

  • Sebuah regu. Masukkan tiga monster dalam sebuah list dan buat masing-masing menyerang yang berikutnya, menggunakan pola "banyak object" dari Bab 28.
  • Critical hit. Satu dari lima kali (random.randint(1, 5) == 1), gandakan kerusakan dan cetak Critical!.

Keduanya tidak diwajibkan untuk menyelesaikan proyek.

Selesai?

Ketika dua monster bertarung sampai akhir dan pemenang yang tepat diumumkan, Bagian 6 selesai. Lanjutkan ke Bab 31 — Pengantar pygame, awal dari Bagian 7.