main.cpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* main.cpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/08/07 17:49:14 by gychoi #+# #+# */ 9 /* Updated: 2023/08/12 20:46:08 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "ClapTrap.hpp" 14 #include "ScavTrap.hpp" 15 #include "FragTrap.hpp" 16 #include "DiamondTrap.hpp" 17 #include <iostream> 18 19 void testOne(void) 20 { 21 DiamondTrap dmOne("dmOne"); 22 23 dmOne.whoAmI(); 24 } 25 26 void testTwo(void) 27 { 28 DiamondTrap dmTwo("dmTwo"); 29 ClapTrap clapOne("clapOne"); 30 ScavTrap scavOne("scavOne"); 31 FragTrap fragOne("fragOne"); 32 int round = 0; 33 34 while (clapOne.getHit()) 35 { 36 std::cout << "Round " << round++ + 1 << std::endl; 37 38 unsigned int prevEnergy = dmTwo.getEnergy(); 39 dmTwo.attack(clapOne.getName()); 40 if (prevEnergy != 0) 41 clapOne.takeDamage(dmTwo.getAttack()); 42 std::cout << std::endl; 43 } 44 round = 0; 45 while (scavOne.getHit()) 46 { 47 std::cout << "Round " << round++ + 1 << std::endl; 48 49 unsigned int prevEnergy = dmTwo.getEnergy(); 50 dmTwo.attack(scavOne.getName()); 51 if (prevEnergy != 0) 52 scavOne.takeDamage(dmTwo.getAttack()); 53 std::cout << std::endl; 54 } 55 round = 0; 56 while (fragOne.getHit()) 57 { 58 std::cout << "Round " << round++ + 1 << std::endl; 59 60 unsigned int prevEnergy = dmTwo.getEnergy(); 61 dmTwo.attack(fragOne.getName()); 62 if (prevEnergy != 0) 63 fragOne.takeDamage(dmTwo.getAttack()); 64 std::cout << std::endl; 65 } 66 } 67 68 void testThree(void) 69 { 70 DiamondTrap dmThree("dmThree"); 71 DiamondTrap dmClone(dmThree); 72 73 std::cout << "---------------------------" << std::endl; 74 std::cout << "DiamondTrap dmThree Status:" << std::endl; 75 std::cout << "Hit Point: " << dmThree.getHit() << std::endl; 76 std::cout << "Energy Point: " << dmThree.getEnergy() << std::endl; 77 std::cout << "Attack Point: " << dmThree.getAttack() << std::endl; 78 std::cout << "---------------------------" << std::endl; 79 80 dmThree.attack(dmClone.getName()); 81 dmClone.takeDamage(dmThree.getAttack()); 82 dmThree.beRepaired(dmThree.getHit()); 83 dmThree.guardGate(); 84 dmThree.highFivesGuys(); 85 dmThree.whoAmI(); 86 } 87 88 void testFour(void) 89 { 90 DiamondTrap dmFour("dmFour"); 91 92 dmFour.ClapTrap::attack("dummy1"); 93 dmFour.attack("dummy2"); 94 dmFour.whoAmI(); 95 } 96 97 void testFive(void) 98 { 99 DiamondTrap* dmFive = new DiamondTrap("dmFive"); 100 101 dmFive->attack("dummy3"); 102 dmFive->beRepaired(dmFive->getHit()); 103 dmFive->guardGate(); 104 dmFive->highFivesGuys(); 105 dmFive->whoAmI(); 106 107 delete dmFive; 108 } 109 110 void testSix(void) 111 { 112 DiamondTrap dmSix("dmSix"); 113 ClapTrap* cp = &dmSix; 114 115 dmSix.attack(cp->getName()); 116 cp->attack(dmSix.getName()); 117 std::cout << std::endl; 118 } 119 120 void testSeven(void) 121 { 122 ClapTrap* cp = new DiamondTrap(); 123 DiamondTrap* dmSeven = dynamic_cast<DiamondTrap*>(cp); 124 125 std::cout << "dynamic casting between Base-Derieve classes: " << dmSeven << std::endl; 126 dmSeven->whoAmI(); 127 delete dmSeven; 128 } 129 130 int main(void) 131 { 132 std::cout << "Case 1: Introduce... DiamondTrap" << std::endl; 133 testOne(); 134 std::cout << '\n' << "Case 2: DiamondTrap Massacre" << std::endl; 135 testTwo(); 136 std::cout << '\n' << "Case 3: Freak Show" << std::endl; 137 testThree(); 138 std::cout << '\n' << "Case 4: Two Face" << std::endl; 139 testFour(); 140 std::cout << '\n' << "Case 5: Dynamic Allocation" << std::endl; 141 testFive(); 142 std::cout << '\n' << "Case 6: Up-Casting" << std::endl; 143 testSix(); 144 std::cout << '\n' << "Case 7: Dynamic Casting" << std::endl; 145 testSeven(); 146 return (EXIT_SUCCESS); 147 }