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  }