Mini-proyek Bagian 6: Monster Battle
Proyek kedua di Bagian 6 ini adalah pertarungan berbasis giliran yang
sederhana: dua instance dari class yang sama, masing-masing punya HP
sendiri, saling serang bergantian sampai salah satu jatuh. Proyek ini
menggabungkan class, method, perulangan while, dan sedikit
keacakan.
Yang harus dibuat
Sebuah program yang, saat dijalankan:
- Mendefinisikan class
Monsterdengan nama, hit points, dan kekuatan serangan. - Membuat dua monster — misalnya Hero dan Goblin — masing-masing dengan angka-angkanya sendiri.
- Melakukan perulangan: selama keduanya masih hidup, monster pertama menyerang monster kedua, lalu (jika masih berdiri) monster kedua membalas. Setiap serangan melakukan kerusakan acak hingga sebesar kekuatan si penyerang.
- Berhenti ketika HP salah satu monster mencapai
0, dan mencetak pemenangnya.
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.
Bahan pembuatnya
Class Monster membutuhkan:
Monster.new(name, hp, attack)— konstruktor.:isAlive()— mengembalikantrueselamahp > 0.:hit(other)— memberikan kerusakan sebesarmath.random(1, self.attack)kepada monster lain, tidak pernah di bawah0, dan mencetak hasilnya.
Pertarungan adalah perulangan while kedua masih hidup;
pengecekan pemenang cukup satu if.
File-file
Kedua versi ada di projects/monster-battle/:
starter.lua— komentar TODO untuk class, dua monster, perulangan, dan hasilnya.finished.lua— versi yang sudah jadi untuk dibandingkan setelahnya.
Jalankan dengan:
lua projects/monster-battle/starter.lua
Petunjuk
- Kerusakan acak berarti setiap jalannya program akan berbeda — tapi selalu berakhir, karena setiap serangan menurunkan HP dan HP tidak pernah naik kembali.
- Biarkan monster kedua membalas hanya
if other:isAlive(), supaya yang baru saja pingsan tidak dapat serangan gratis. - Klem HP dengan
if other.hp < 0 then other.hp = 0 endagar HP yang tercetak tidak pernah negatif.
Tantangan lebih besar (opsional)
- Sebuah regu. Masukkan tiga monster ke dalam sebuah list dan buat masing-masing menyerang yang berikutnya, menggunakan pola "banyak objek" dari Bab 28.
- Critical hit. Satu dari lima kali
(
math.random(1, 5) == 1), gandakan kerusakan dan cetakCritical!.
Keduanya tidak wajib untuk menyelesaikan proyek ini.
Sudah selesai?
Ketika dua monster bertarung sampai tuntas dan pemenang yang tepat diumumkan, Bagian 6 sudah selesai. Lanjut ke Bab 31 — From Lua to Luau, jembatan menuju Roblox.