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:
- Mendefinisikan class
Monsterdengan nama, hit points, dan kekuatan serangan. - Membuat dua monster — misalnya Hero dan Goblin — masing-masing dengan angkanya sendiri.
- 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.
- 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)— mengembalikanTrueselamahp > 0.hit(self, other)— memberikan kerusakanrandom.randint(1, self.attack)kepada monster lain, tidak pernah di bawah0, 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 = 0agar 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 cetakCritical!.
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.