diff --git a/Dabbir_ITB/Main.java b/Dabbir_ITB/Main.java new file mode 100644 index 0000000..c1d9ad0 --- /dev/null +++ b/Dabbir_ITB/Main.java @@ -0,0 +1,122 @@ +class Card { + String name; + double strength; + double health; + + strongCard strong; + miracleCard miracle; + + void attack(Card enemy) { + double strengthPoint = this.strong.strength + strength; + double healthPoint = enemy.strong.defense + enemy.health; + System.out.println(this.name + " attacking " + enemy.name + "..."); + enemy.takeDamage(enemy.name,strengthPoint,healthPoint); + } + + void takeDamage(String name,double strength, double health) { + System.out.println(this.name + " HEALTH -" + strength + "..."); + health -= strength; + System.out.println(name + " Stat :" + "\nHEALTH : " + health + "\n"); + if (health <= 0) { + endRound(name); + } + } + + void endRound(String name) { + System.out.println("\n" + name + " LOSE."); + } + + void addMiracle(Card enemy) { + if (this.miracle.miracle < enemy.miracle.miracle) { + System.out.println(enemy.name + " Miracle WIN."); + } else { + System.out.println(this.name + " Miracle WIN."); + } + } + + void equipment(strongCard strong) { + this.strong = strong; + } + + void skill(miracleCard miracle) { + this.miracle = miracle; + } + + void stat() { + System.out.println("\n====== Player ======"); + System.out.println("Animal Card"); + System.out.println("NAME : " + this.name); + System.out.println("STRENGTH : " + this.strength); + System.out.println("HEALTH : " + this.health); + this.strong.stat(); + this.miracle.stat(); + } + +} + +class animalCard extends Card { + animalCard(String name, double strength, double health) { + this.name = name; + this.strength = strength; + this.health = health; + } +} + +class strongCard extends Card { + double defense; + + strongCard(String name, double strength, double defense) { + this.name = name; + this.strength = strength; + this.defense = defense; + } + + void stat() { + System.out.println("\nStrong Card"); + System.out.println("Buff : " + this.name + "\nSTRENGTH : +" + this.strength + "\nDEFENSE : +" + this.defense); + } + +} + +class miracleCard extends Card { + double miracle; + + miracleCard(String name, double miracle) { + this.name = name; + this.miracle = miracle; + } + + void stat() { + System.out.println("\nMiracle Card"); + System.out.println("MIRACLE : " + this.miracle); + } +} + + +public class Main { + public static void main(String[] args) throws Exception { + + Card animal1 = new animalCard("SCORCH",6000,6500); + Card animal2 = new animalCard("GALLEON",7300,7500); + + strongCard awakening = new strongCard("Awakening Fever", 1000, 1000); + strongCard buff = new strongCard("Primal Fight",200,500); + + miracleCard miracle2 = new miracleCard("Alien Egg E", 3200); + miracleCard miracle1 = new miracleCard("Alien Egg S", 3600); + + animal1.equipment(awakening); + animal1.skill(miracle2); + animal1.stat(); + + animal2.equipment(buff); + animal2.skill(miracle1); + animal2.stat(); + + System.out.println("\n------ ROUND 1 ------"); + animal1.attack(animal2); + animal2.attack(animal1); + + animal1.addMiracle(animal2); + } +} diff --git a/Dabbir_ITB/README.md b/Dabbir_ITB/README.md new file mode 100644 index 0000000..ad2880e --- /dev/null +++ b/Dabbir_ITB/README.md @@ -0,0 +1,30 @@ +Program ini merupakan program sederhana dari permainan Animal Kaiser, 2 orang pemain akan bertanding dengan kartunya masing-masing. Animal Kaiser terdiri atas 3 jenis kartu yaitu kartu Animal sebagai main card, kartu Strong sebagai buff card, dan kartu Miracle untuk taruhan akhir jika ada animal card yang kalah. + +Dua Animal Card akan bertarung, masing-masing kartu memiliki statistik yang berbeda sesuai animalnya. Setiap animal memiliki strength dan health point. Dua kartu akan di adu dalam 1 ronde untuk memperoleh siapa stat total (setelah menggunakan strong card) akhir yang lebih tinggi dia akan menang dan melihat hasil taruhan di miracle card. + +Program ini dijalankan dengan 1 kali compile. + +- Inheritance + Class Card - Super class + Class animalCard - Sub class + Class strongCard - Sub class + Class miracleCard - Sub class + +- Polimorfisme + Program umum karena SuperClass direferensikan ke SubClass + +- Mengimplementasikan (minimal 1) design pattern + Penggunaan method + +- Mengimplementasikan (minimal 1) prinsip SOLID + Liskov Subtitution Principle, sebuah principle yang mengatur desain hirarki pewarisan. Aturan - aturan tersebut antara lain + + Contravariant & Covariant, + Contravariant adalah kondisi di mana parameter dari sebuah fungsi yang berada pada SubClass harus memiliki tipe dan jumlah yang sama dengan fungsi yang berada pada SuperClass-nya. Sedangkan Covariant, adalah kondisi pengembalian nilai dari fungsi yang berada pada SubClass dan SuperClass. + + Precondition & PostCondition, + Precondition adalah tindakan yang harus ada sebelum sebuah proses dijalankan. Sedangkan postcondition sebaliknya, yaitu tindakan yang harus ada ketika sebuah proses selesai dijalankan. + + Invariant, adalah penjelasan dari kondisi suatu proses yang benar sebelum proses tersebut dimulai dan tetap benar setelahnya. + + Constraint, adalah pembatasan yang ditentukan oleh SuperClass terhadap perubahan keadaan sebuah obyek. diff --git a/Hands-On-OOP-2022 b/Hands-On-OOP-2022 new file mode 160000 index 0000000..449dd91 --- /dev/null +++ b/Hands-On-OOP-2022 @@ -0,0 +1 @@ +Subproject commit 449dd913b181296ff8c27200b19072246a320c3e