From a02ca29d874e57c72a66e12500280e8bb7147d8d Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Fri, 29 Nov 2024 16:20:12 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(Ex02):=20add?= =?UTF-8?q?ed=20a=20very=20cool=20feature=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ex01/Makefile | 4 +- ex01/ScavTrap.cpp | 9 +++- ex01/main.cpp | 3 +- ex02/ClapTrap.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++++ ex02/ClapTrap.hpp | 51 +++++++++++++++++++++ ex02/FragTrap | Bin 0 -> 48184 bytes ex02/FragTrap.cpp | 68 ++++++++++++++++++++++++++++ ex02/FragTrap.hpp | 31 +++++++++++++ ex02/Makefile | 56 +++++++++++++++++++++++ ex02/ScavTrap.cpp | 73 ++++++++++++++++++++++++++++++ ex02/ScavTrap.hpp | 30 +++++++++++++ ex02/main.cpp | 34 ++++++++++++++ 12 files changed, 465 insertions(+), 5 deletions(-) create mode 100644 ex02/ClapTrap.cpp create mode 100644 ex02/ClapTrap.hpp create mode 100755 ex02/FragTrap create mode 100644 ex02/FragTrap.cpp create mode 100644 ex02/FragTrap.hpp create mode 100644 ex02/Makefile create mode 100644 ex02/ScavTrap.cpp create mode 100644 ex02/ScavTrap.hpp create mode 100644 ex02/main.cpp diff --git a/ex01/Makefile b/ex01/Makefile index 98bd7ba..5ee452b 100644 --- a/ex01/Makefile +++ b/ex01/Makefile @@ -6,11 +6,11 @@ # By: adjoly +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/25 16:09:27 by adjoly #+# #+# # -# Updated: 2024/11/27 12:08:05 by adjoly ### ########.fr # +# Updated: 2024/11/29 16:19:08 by adjoly ### ########.fr # # # # **************************************************************************** # -NAME = ClapTrap +NAME = ScavTrap CC = c++ diff --git a/ex01/ScavTrap.cpp b/ex01/ScavTrap.cpp index bdbf234..62a773b 100644 --- a/ex01/ScavTrap.cpp +++ b/ex01/ScavTrap.cpp @@ -6,12 +6,13 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/27 12:53:46 by adjoly #+# #+# */ -/* Updated: 2024/11/29 15:39:05 by adjoly ### ########.fr */ +/* Updated: 2024/11/29 16:01:32 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "ScavTrap.hpp" #include +#include void logScav(std::string emoji, std::string who, std::string str) { std::cout << "γ€Œ" << emoji << "」ScavTrap(" << who << "): " << str << std::endl; @@ -64,5 +65,9 @@ void ScavTrap::attack(const std::string& target) { return ; } logScav("πŸ’₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); - setEnergyPoints(getEnergyPoints() - 1); + _energyPoints--; +} + +void ScavTrap::guardGate(void) { + logScav("πŸ›‘οΈ", _name, "is now in Gate keeper mode"); } diff --git a/ex01/main.cpp b/ex01/main.cpp index 3436c8c..95d19ba 100644 --- a/ex01/main.cpp +++ b/ex01/main.cpp @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/20 14:25:07 by adjoly #+# #+# */ -/* Updated: 2024/11/29 15:21:45 by adjoly ### ########.fr */ +/* Updated: 2024/11/29 16:01:21 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,7 @@ int main(void) { logScav("πŸ™€", kanel.getName(), "Oh my god Kanel uses his last teeth to attack " + suki.getName()); kanel.attack(suki.getName()); suki.takeDamage(kanel.getAttackDamage()); + kanel.guardGate(); return (0); } diff --git a/ex02/ClapTrap.cpp b/ex02/ClapTrap.cpp new file mode 100644 index 0000000..1650ee0 --- /dev/null +++ b/ex02/ClapTrap.cpp @@ -0,0 +1,111 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClapTrap.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:29:16 by adjoly #+# #+# */ +/* Updated: 2024/11/29 15:21:39 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ClapTrap.hpp" +#include +#include + +void logClap(std::string emoji, std::string who, std::string str) { + std::cout << "γ€Œ" << emoji << "」ClapTrap(" << who << "): " << str << std::endl; +} + +void logClap(std::string emoji, std::string str) { + std::cout << "γ€Œ" << emoji << "」ClapTrap: " << str << std::endl; +} + +ClapTrap::ClapTrap(void) : + _name("Kanel"), _health(10), _energyPoints(10), _attackDamage(0) { + logClap("βž•", "default constructor called"); +} + +ClapTrap::~ClapTrap(void) { + logClap("βž–", "destructor called"); + +} + +ClapTrap::ClapTrap(std::string name) : + _name(name), _health(10), _energyPoints(10), _attackDamage(0) { + logClap("βž•", _name, "constructor called"); +} + +ClapTrap::ClapTrap(const ClapTrap &other) { + *this = other; + logClap("βž•", _name, "copy constructor called"); +} + +ClapTrap &ClapTrap::operator=(const ClapTrap &cpy) { + logClap("🟰", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage= cpy.getAttackDamage(); + } + return (*this); +} + +void ClapTrap::attack(const std::string& target) { + if (_health == 0) { + logClap("πŸ’€", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logClap("πŸ’€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logClap("πŸ’₯", _name, "attacks " + target + " causing " + iToS(getAttackDamage()) + " points of damage!"); + _energyPoints--; +} + +void ClapTrap::takeDamage(unsigned int amount) { + logClap("πŸ₯Š", _name, "take " + iToS(amount) + " damage"); + if (_health <= amount) { + logClap("πŸ’€", _name, "is dead HAHA"); + _health = 0; + } else { + _health -= amount; + } +} + +void ClapTrap::beRepaired(uint amount) { + if (_health == 0) { + logClap("πŸ’€", _name, "can't repair already dead"); + return ; + } else if (_energyPoints == 0) { + logClap("πŸ’€", _name, "can't repair no energy left GO TO SLEEP!"); + return ; + } + logClap("🩹", _name, iToS(amount) + ""); + _health += amount; + _energyPoints--; +} + +uint ClapTrap::getAttackDamage(void) const { return (_attackDamage); } +uint ClapTrap::getEnergyPoints(void) const { return (_energyPoints); } +uint ClapTrap::getHealth(void) const { return (_health); } +std::string ClapTrap::getName(void) const { return (_name); } + +void ClapTrap::setAttackDamage(uint in) { + logClap("🟰", _name, "set attack damage"); + _attackDamage = in; +} +void ClapTrap::setEnergyPoints(uint in) { + logClap("🟰", _name, "set energy points"); + _energyPoints = in; +} +void ClapTrap::setHealth(uint in) { + logClap("🟰", _name, "set health"); + _health = in; +} +void ClapTrap::setName(std::string in) { + logClap("🟰", _name, "set a new name"); + _name = in; +} diff --git a/ex02/ClapTrap.hpp b/ex02/ClapTrap.hpp new file mode 100644 index 0000000..65cb368 --- /dev/null +++ b/ex02/ClapTrap.hpp @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClapTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:08:19 by adjoly #+# #+# */ +/* Updated: 2024/11/29 15:24:06 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +# include + +typedef unsigned int uint; + +class ClapTrap { + protected: + std::string _name; + uint _health; + uint _energyPoints; + uint _attackDamage; + + public: + ClapTrap(void); + ClapTrap(std::string); + ClapTrap(const ClapTrap &); + ~ClapTrap(void); + + ClapTrap &operator=(const ClapTrap &); + + void attack(const std::string& target); + void takeDamage(uint amount); + void beRepaired(uint amount); + + uint getAttackDamage(void) const; + uint getEnergyPoints(void) const; + uint getHealth(void) const; + std::string getName(void) const; + + void setAttackDamage(uint); + void setEnergyPoints(uint); + void setHealth(uint); + void setName(std::string); +}; + +std::string iToS(unsigned int i); +void logClap(std::string, std::string); +void logClap(std::string, std::string, std::string); diff --git a/ex02/FragTrap b/ex02/FragTrap new file mode 100755 index 0000000000000000000000000000000000000000..b61f5857e702733ef84f85755b39594906a86b1a GIT binary patch literal 48184 zcmeHw3w%_?_5a-6gd}tciC~TRS^-z;d)2a>RjYa`u0K%XIyUQ(ZaSJ}dB@GNo{pEOez)n)C^<=8 zRBxxMw^P;AahB4jj|@3ZBQtB zGgi7c?G>teWi^sdSxrDBbbPxdaUJXSPDee`%U2Cboou0MFPR-eN}oDb&9m=TlrNn& z<+~N76D!Iq>*^=g7fhQtZAxx!RqiAq0?9>fkWZa_>SE?;VBLi2`jj4x52=;P+qceX zt#7Nnv2^ga$Lw4(_N1xr_Mf78P#vP7K=eu^k^arAIiSXx=(Ekd? zNJM{g5_vvJLZ6icPfsF`KZzcWO48rUlgR%NoGOw0KTg8`vLyJjBz%6BguW|@Jm)0Q z+wdgxZzs{)nk0Gvd*;W-9ga#Oe{T}}Suh~IwfO^atj>ZwV=?M_r%8MkHHc6MJR2iC zaBD#1<;Y>IOv%}Hq{KxbzNnn|QC=B|MOTV^MeW>@qF8=@Nm-;O9IJ_x#{dM2BKQg}M8V{xk=pW-a8+%rCK_2W zcTspzUN~4ZJ-l$8E&riK^ghl4@1acWUjMQ!jr zks`LU^MllM^6E+DnI&r$#im3nODht|{Ust#ll`wwSWoshxk#ehqC*Sk6%~YwW)QRF zRLLOHQaR8C)P*u9D@_)ZSJj50gy@vHmE|$pN62*w=PWF$Dhf+qO6GG( zThgMUttn^=4jTzCjV>>*3_}AYWhB0-$2~H{WLSz+7+zjqAFhtp)K*nSD#~N4!z=TI zTFBkCvG&|nT5>4L?Ji$Y%aNj>>h|6^DzG z+{tE%na-V*Pgf}q{(139!6#MZhOsm|?L`^=(^MX;ZM|4;%Djbi3UatyieMo<6>B3} z5Bl*b{MKqLuhZEATAU(Ky;-U}5Bbg4T#sBDTdc6UG38hir?MqBeF{5Nl~MhbyKlgi zb{MNr*wgo%k1Kcz`;p4Wj=mO4Z!f!CoFmP&Hhk${rE{UR$fs;%+6dE|) z59m;A;O4!`5(B4u6CKJ7obFF_s5Wr(KBwNm>ApsX1_P&i8XYzmxV|@{vK9j;pVFb# z!0Dbyhc*K@*Uy^_+`NBkH*mV&)S<(`)fR;)>Naq?N7SLm!1X;FmGv6SujD^;B$2^0*p>^BSw~4BQQ(pr- zc+?yC9(hCnDaw~oS^v&Kgri=dJZ&NL_lo>qDes|tx5z(6dD=4QZx{K8DNkDk{cR%u zAmwR`pua`re@}VZ8t88j`MW4jw|o87B7Ym@>6X8LiOBzy@^q`;Unug|Ql4({`vW3> zCFNi7Fa{zA&rEq;HN$k$MwZteS-$e%}fx~1^c9EY+dAe2aZxi|NQJ!wm`&&eQ66NXEyuU%@ zkD)x>lJ{4O{8-A^+t-!Jn2 zx)^!7#qQ5SesQSr&Co-q-xdJC7(WL+4n4%i1}MiuUAiFjV3xWO=XasjIon1aahV{Y z`uu*>B4{>alHbDH0-}_UaPiXx2EVhu0>2{7uM@P`D_V-<|(xXvYqACfxnNKVQVyN6T_`|A>B@lWpn9fgVENr|;OP4(cQgp^S$J z7~Hw6W!o}`n8r_+pkMo*h#Ch%Ti-h=v~{;PWIYmk>Wf&m%^^*3aM!2y8@|60He+?8 zgt9M$N*_sG2gEvO+mQB%{vTI5G6;LD+vN{6uHm7^x`9yR;@zQ#^e$njE2TO>onYMi zA859z4n#Zn^PeN#xFgh+u1nt}q=~BU;1B5119j;RS-P7_f2K?IiKe7qx7|-3BK>3C zt}Ms{W_5{WS!J{~PxCuiw|1t{+C*JywsU$C#r8$SZ3(Y4z6 zjDI`1R=y26!TJ~j?&WtA+!WlfBj7JZb2|d#Cy8hR%^0Dz+Zzy_vn|xPwGpB&=xGdY z?_WSACg2yqQ=!I3pwXVj1>4b18-Ms;s(CF@D?drgaEH6BmyZ*IKr=6(Wl=@eYg*I8 zub?v6_9RS;j%zvN-PG>_=y$;eNFY^vwqOg@&e5uULAPzIwm{M}be*DAd!IogRl6PT zsXNlf-}=nSwem7h3)Mbpz`gu*f}7Bzbh7onsB)F&t0idV9|00={?J|4%loK|8onBr z0hcOIAfcejk8lN|`9X}&wYz$S3AfM{Ou8wlu{lIpxMQfXldg6Aq20u|Q@~AI1XQ7| zC4~745y1GUP(T%47LshFwD#>y{7fxzs7W^14EHWYP1U>3VrsUrlP;h9Cdq-)U6X}* zI+qYW+Gf(cW)qyhA=JE46g0t@nvnp$=iY^@(_hXGSEEp?qApaop*Du$HH z+)xL99gwmFzX4W>GcD({i5pD&d4@TKE^CP!|JuG{@CQi$&1-sK0~!TVo~DhI?uyBY zvX?h&L7cJN%3D7gV#NaD&?`igv%zY^iXoc`&Dw?)A9BnqHC5^2%-;ndthmT2S<}ns z7`YzaLqtvMMTd?L4vf640A4Cq6U|~?({oKbR>e@EpljM9rk^z*I$bHGKI{U30WiSt z1##n6#kMiz7hqRBI9`B{#)A|3A258UyD|93xM@KErtb(K&Ud;S7yJ=kB7Em;Eub28 z(s!OCDapCN?<$6Fj&Vah{7!-<3#ru1qnZ$1{_LOHJ+p{JDRS+0HUBliAK#+(;9Wn* zeUo{Cwy!UK+@Lx0M-cPKdRqOjtM{{!>!V~2>1pWz`6lAlw2{(XH)~HDr^SY+QB~2s zTrC>ZL4yXCWW-^a8*`bg3w8f4KO1-8ylv1VZ0Ejl<`M`DwX!AuQ*Tc`H zS`T`uuX1YGSM#pX?BmS)DNrHHxvpXeG|vse{|Wj5Zh>JtsrB*D`sG6F@?zfDxf|;n z{$1*0(?&{n{ZXn-c)*>Sr>*6E}AX;1U;q{sjP-nkw<7MqwcVryD?sfL;Q=BRtQr#v1qNJHrhm8f-$I z_up6j)z+X+^Kvw!g?hqGAtbxsjSBJdNxW`|r@8f!TQ_!cQsM2yv}q%yyWWv1+)18& zC{=>Mu%#LXogIXa*G+_)77uj2FKZM~2|dXvYCO1GqQ%rq^A=I~ANZ9BsYX_jH8+al68Mv3>$xC67p+!FL!|r;n{9I^iH+tuM6{8pgn!6ZWi@{N zd%9P$Exz6Wa;Qqo0E!7HF@ORB78*bY0W%Ch=q}Fy`iSBl0BTG$g~qSjI@lN*kIOwx zR?g*K4B-(pSj;i~mfL9_as#by-~u;riW^Aec&#Mp%6DCkS5N2?H=0A}DQ>iw&?#=T zfY8I;Xa}L`Zd7RRpSxT#^bu_ZXhU=fc%2fs1pEw|axMXSebFYmO838FZBd4Cg9!|` zXmWDBPjJ~-4Y=z-;ZC>*&evkV)m4Qyeu9<)9!D2Ia9BcvFeW)ry6Z5>p@F~e5aT8W zcgUgU#SOgN9x8MbaEL=AXa1i8fNX8ta!Mf0hySo$6tip{5v|=$-EusohwhGJqNj4c z5kR3E@C!g)Xw~g9?(a2!Jut-OeS{V!<|>9n5jWJ!Uj_tg^zg-057wZ4M#mc1|0v|| zyaRRp3180r^SWJu5Z&L?V(&BDK6l%f>c${{B=|Na8?5cOq7E@fhV#){IViS1!Dr<9 zqtRABZTtx$eOuJmxZoLnAFB3`Qbl}|U=-}eu5aL+ZL+^j=ujI;521@;M7{r|_K&`b zd`Ft{U8a@umE`+ooP6m?BL)upwsq047P5eTV4XUFhQXl_Z&R?88#06p}-@-LhiE>_~=^!Eu`U(s>3yt^`IR8}k&Jr5LjVAvgad7RY ziH)@2?sK-O`zxWFwiQHdYMQPe!EWk`bfv=aP1LS^Z>QZ}uak(tTs&xlHUYFWC zeu93F_7@K_TKmV_N|vCOur-O+p3tRsYl7aTkF~qn&vw zX+f~`Adb*h8{hi6tx~=8peq&sOtiL<(rSwmHj3FCXr|Xok5iq^Nzk;p81f^C6E$_Y zQvx&98@XQoFXUhy(!kfW^vKctmBYw&(6!VK3G>-&E^GGjx7<)KFClWd6UcYO7n2>g zQ!(s#5w>)k3E$p-vh5kazZh!7EVy3Sbh5*ru44QbxL#@pr>RMpqEZk^Q`l2ezm~=^ zCic%?b&N^NPH-qBV}3_+pmf|$6}iS`#Sr}p4e zCt`=lnLX_5fmr`xrU-H|VbJy>t#dI;i~w(}KRH&Ae&_sGtsk2Lz)W`f`2o9p{C_E* zkhpy9u07iC><~h__B$tQt-$l`{mv6#vb|6k0<#wT0-nE8a-ekFe&>4*eZ1%Y$=M*6 zv;Am?QkwWD0ECJE^`hM-th>v|_3%on^&~cX^c}*!?sqn8_Hh$bnwF)~RSbcC=!SZD zA3+sgVZZYv;+tT<^M1|K*1g#f&2o1sub`mh-YuxV~d_nbBTZ2(EtI>=W>LoXYkZgw=72?ex@t#ex-?^EX zCfM)%4pqXmfO#QqzjKOiV#t2yc>}6OqW#Vh_TEoZCygrpozDjcad+GN#(z|;rY)32 z|8l6fSs#)Ds0R>g-cl?gxe0o%X7^x%P0(A7?MB)`L){Kpw-pheX>5iI;F`bbuBuJY z1_Q{UDpdwhOu)GYP(Z)}1Lz>&1OpJ;c*hz*A5q)|;D5y?=mmXBKiV7XN&FwW(Hug9 zZnT)t@4C?fLJxMM9fW$_sLU!*sEpztQ*6vzDmwsGU z8tXn%TcFek=2z^vb#@bvdj*e;ly0vMFk~FQ-e$NjRp1{y=lG|ny3+s( zh~h~Hz}jG|k?ZC68o3@m6@7ryQJ-)XK0f%-$SW#n;%e^9BH0={+es(42&#>gRtJHd zIn>TUS_8IPItPgU2&aus+Ef6aO@#kI@}YEBsZ>EP;fB0|F?2$Fpf^$6ru7D~1n~Z| zjs}Q7uSA0=q)Pm+Mxl^$s{v52cz~#7r}0b)O=|s(!Y_=|sUc^>8)@z{PagK}7@?j7 z_^y^nkDy{g4|bykgnC^l3_9>kyz|3BUvfh|{4A>Ypj+y_J9QIUU+ro`n3jJCRIC06 zZVI9Q8E#Y<;SYq$U25rmi$7`#`Hy~zj_}uRr*VqAY8uN2pdU1rALHhlQ#~)yZH{Mg zoLvnc7;>ClMvn0}lC)_frJdvKMOrwxFjW;xt?<*1e^tW>@ZTlG;ReZp(p?ugLzs`W znYhO8TY57W8WNVD>f+2d0}yQ<;*`LiBaB=RznXHBzsBX=Z~v+~s2z}c$tP%8u67ke zpo`p45C4pyACgo}>!sF*9%mPm+LjRCrj3-2JI?OYJZ;^}<=xJw9QD&m2kI{*J~@&P zrMsG>`qN477MoAPD#Tk#+_pnJP1^^3L4_ew;j_dP4-b(FH%k@n zBz%Du!7&A06Zm4?guKSp6K3Hde8Ky{9C?u43KUbeD4c?AJl!yHb}hD^bvB*FK{X$* z8=w(F+(#Ke2LT=f5VC&oq|-znQB;FM`C!w6kGvs2<`DB7nI;Kmi%#4ceVvEG5iO7I zx9G<_H!3HRuqJ+lNZiV20*GiBth zuL~}6@85o0>|EU-%&jW4^76kpdaWidYBTRv$$_p>T@M(u-oZ8#*Q_^S_<)%8PI7VP zT>!+aca&3tN#-CU*TZilq9(EH2(vbZCJfn^+t<6?JD*TJ)|R7g^CPuz8(hVZu+9zj z@P7glW+MHOnU2I3qCRi`@AjD`dg-!Hmu|+i&!dkgwvQz_2>blmu+M6niOW8P&Yrlu zD&6AZ%nzqN(Z14prv$xUW#lmbBWK!&9@(J&x`vwhK&CKQk$X)tP5|*cQo?W2bbE33 zSxfDbaQx5l=7WUKx}hGvP>6|PMEWE9tlhaM_W6aV?y}F}0HsXE_&Hj)jj7BWKM~16 z*ykm~K7VuQ<5&Fc&K|e4&){RaIrU8H#i%M&@TOCO-al{Tdia?{WQ-qLSAD(qS+3iQ zv(KwQg>WHPF(jPohI;t#iJYc6(jVF9)tBA&k#m&T4NUmh3h4(|HB!2MB({%VsGGtV zqL~mPwej_jI+`RG({o&>BqH2@A%Jp0J#m+voBAwJPMA&Fxom|OwH2r-Q_BVkTMU0 zv|eyryIo(zXi=L0u2JhiHS&FmmLGl^6 z06mgfW85ILHU_VYf6Ae?alv)Msm5zzG}|_QD?yjKtH)g=Wp(KkuWeT{=}wZ%@w17^ zF>WSaH(;)Vg_P#5h5*cmBL$F1kX};GnQlSa37zFe2MC?$Mum+Ja-+h~*AP0_TqCIN z3v0f>#y{BVZLWbRj!m{Pyud9n?*YJH-A=JQEc>b5~6Rm(-w zi;d@#mKiiswejy$Uf*r1HiznyYA-S1UTz7t=urpRdS6ueZOzwFid*c4-w~f5R!k?bUNe zu7?*B(N}mLCh#)R#l3Gg!eJzzhq(v<#@+y*1>zyk!<-rq%I9Iuj0eBo=V5mJA7JrA>z+Jj@|_Qp@(d-uLwfzYw* z`ICFK6!5gHFI4xs9*p+~cp5_){{+NX=~FuH`IAbUiEArps&UI8JncFcXFiHpl1eXh zN}$aOBiF;#qPRWO?s_cGF?ky z>t3D_oTS^rKxcBGi}&qTNj^i~w|n29FC_Z-_wCw0cC49BqkE)5PyG3h0idl3l>TRj zLru*1s|G-qFusJUf1U5!U7}mi)(}E{22=}mj+;VAcCs54;%y}~+52`=sHX{@Ke=18 za!k=d9>4j1tqu44cJJuz&qU9kG&>u3?)UA+zOOmTJqsACSd2UQsL6-AW}-(;rs+cH zWv8eV_o&H^4;|L6B>lH+>DB4Sfd-I66e$KkV(<^|b9fXG@R|X15b%@%kPy7v0Qv|x z2~07c(R5;-ll=epzTGe_xpusI5`SQeQh`Qu2z|kg78APNjTR94TQ}N4Xsa6)+Pl<^ z_7UypKtr@^Sql;A5^yXw3!OE*-v4jY>x;zi+s&cMYU6Sq?!z#-_3^E`LAZJu#xuY+ z{`h9c?DYhy_w7<7hb4fzPLmuO_$4+6bK`RE2Q~{VOn>cS$d92OQB&7AC6H#Fk?ZBD zMD(@3Z#Pc!*T$sY@tc7PVNzVhkm!SZ{ zBZ>N#OtPu329YZwwK0Dz8jY3tV^v!J)bBYpk>z&3b%uQ8rY1B~ zS?Z6V{_-;avhtNte@*m)IyeTi4)GpOzv)MJSslN@%#QS?dj<#TcMLh=cEr08H>BV< z3)=?=m*B4?gb=sm>|+DsEIe$|intr~dJsQ@c*E}o2lG%b=l6qyg@`vG9w2_WFwpNx zPQXPffH;I@4*dnn30PCMAl`smnGTAvfmMw5CSdDvC-Oar(~&R3MsFVC4(y#*gI^!w z7UGMz4R}3H9J#0`+M6&IOJi2HCf){A%(4ls8krsoFy!$9{W_=7&D7Z)So1&IBK zixCG9*CP&rZo_kE4{`AegM+OUzk+rU@7@W0A#QyQdVoF(-WVLDGoijWp(n(xZw(G^ zp!_>%A92|~pa;q$&V$|x-bFtV*S`mONsj}N7xC_Yf}Y~tkQXrp{P{2utP2-1t3Jy* z#Fv)d0$tOsFa6QT-ro)mev2q(r)3eAhtDox=!OX6@jV-#o?k--)MJ@hb24*I8TpM> z=?(0pF~=V>dHh%+BwiKxw7?e%2$+$Xb-8EOh+(y85Lqg}3ZFvwL^EQ$+_OOtQ2E{X zbff(IxbkIo`QyL?u<0RY`56xXU8-FCj)!i4u2b%V{CSX1{LYFlpW~DhTkFEY`9f1^ zUizsuuhtjofj%ve?{x4v0jrIZ$!FNHQGO)&J*Rw{GiT+YQJ2ai|;-qw?pv&tX9Hig6OPOHMc_+m6 z<0_QXp4&R2Yd70{#cr4U)U&L_5lp`P&I7XMY|XoQTM_ zbs0oJmfAlXO%%5kkGxW1Hu0L0St`FBl z;jb+wUA(_;1|2<5sRtCV2tr?GctouB; zq`?_PovGF_6Ec5ivH6(~TP!@{X^UNufz$>o1K>5*X}D%sGd6pyTb)Xx-dt-2JBhKA zQnz~8?4uYf&wSOxF3S3+hyB{hUgu?7tLPiy5pbE$7_~_WLy77a43@+L)_{v)9sc+J>{iv@yRM&VHWmL;9X{ zAMoyUqIoLa2m062eW?3kx(|FV%kY6`*YFk#4gBRB-*&o$K7HSsl%M&A#b#%HY_ZzR z%RTIJD;rNR++<}SeV>&9c)OJWirYQM|J!4|;=x#w&LZr7u$9fGGd4YS5sRj_Sk`$k zoc5(JD?7>>!$Me0AO5Dr8mt9_7HjdO{=s8y^w{OO!_LgS!^0}F?)R{tS=l|rX!PGa z>@mxS^xIYj@QvL+ly>Y- zhO@r3F}DwApQhz(8P2XtAM?m?c5k{5>Fw!0;LoP}K=W3*5A>g=`%rg7h7Wvh%z((D+46=c}^V2 zuoQJ7-KR3_;V#Ddl+6EF z(AAGUY-RQ>9(I*Ay4}NmY59r%evme^E-M{8}wdhSxwf_nQx}B6GnWJ!cNUV>XPi+VJBjKB>jU2E^?~MBULWWm@s2{> zm%Uk=)8Jc+k$xt{w=0dUOMT39PrCI)8t#MtlXe7>H>Dfb#s96>^ZnQ1|J&DLTq^g6 z{TkS>f&CiTuYvs<*sp>88rUNZ>>L*m^o3((+@|6I6}PK$y+)?rpr@eo$GYD3caIE+l*ZdtUiSk#BO+v|ShtU7ghYR`6#byeYdLTfC(0kr45*s_Z=;>cF78&R zDSOXR@fj*!rs9<2e7RQ#NZ-%{}>Djs&E?DscS{4EtvQ}G-XpP}Mq zDqgAL%T;{6itkYIeJXxL#m}kuEfs&F;$dTD`|kdqJZskX{1X;0t*eaH`ST~`PR`An zm|rKd`4>-`l$$r@XazGxR8kSa;{+?CHMQkcl~k6On?EuCI9Z2|y}vZjxJ+Rm47!QP zzbuqoq{fF|5&R8tBKiYF`DjMRZ)U&-FT!X>$8Bc7t{1{+M#pPrm?tu$86BsY;ar8& zai$rn6;8*OX1G-0bX;kM>l9AMlV-R>;dC5nh7N_(@uL|YL&n2KGCdFK@&6WZiygvF zzb$~2Gw*$jG|^{`4IqUrKk<#TW*8umKD8d`n8^&^AcH|~bgX2C!xc`)NM^`aI2{|A zVYb5Qn8*x2Q23#j#^dKH{A?Gl?Lx~lxyU?+n8MIyKn9dB^E_5tshBc6f z^w~C6;%@yfyiMXlY{r<@|B|s1*ZSWCf<*e4<)axLo0viOmyU(Zp!-Y5KxWYWrDGp6 z=>F0%j~R4-=~%}MH$qP8ufEQ@`>TI|5@aIi{h*!k<;RzTRv4e*h={FT5=vAY?_rIS24>GJQQ(Fgx5M`RjFs#*YDRu>+aDzH59g z@I>;{nHi0Xwo3z)utTZBw_h5tF-j!U!%ETaD7L{hZ%~~??b7?2j2*zrY66t7!wrJZ zLCk%fYZLgvIA9Few3N6HxST`dVCMA_K9V)e42XhkReYGj2PR6K&H^dW^G1pIJfP?c zzZDR4bY@B6F@^7(8K5kqvuz3oVu3{ME-4C#Je?_1n5yu$GXf${XTuaO0iMOiF#3H_ zGh8m{O+=<|Q+x)-2Ly1s;&Uz*dVcUpck#Iw^x62wswF+LB0QXg|H05lB0Wq?g0D-0 zL!6s{&UU zBg(}BC6SzK2=`<$eV?GKtP}JjS@+CRTU{(<(5Dt5} z`+I`Imz*CEbo8tcg|iesFgYOd8n0EjTc4LHyltkW*Yf{T;jBdBTAvRHT(FM&`fCzA zh#MO6!`^9<&nzY9b-<}#10jjiGc6RBVw@7rlpek%VRnz8R~aL+aKTDsub{xOE;=zF zsOec93TG<3aAttA^mKv<^$Kqb2Si@`d85JuCrF&04WjUbz-8L}ekTd;#f>NRYe_U9 z$o0IM3VsK8XmXOc=5;FQX*{~;y|Wab?$af`o*ynGdR!m%FCS+qIa`2}{#&L>`c~Dz zD}s-1&51uwf(IeuSomjy;)8CAa5iw7pWX9nxxf!$#kU0{q57@_p2%MJ3mog-<0L&j z(?y|2;qLj$hY5}J>Avn9rf~Osl?yxz`f=;?dxBoJWqzNV1pkfV-*Rj~kn3@=RpEhi zB;Kr;4TCF_oNm85NZ`0!A1Ub-Ih(HNdljGaRl#aSujzFBh@yAv?fE41?;0@3|F5)%>e&r|b; z_S;I}q))dzzZdvW{wZ)a;U`K?ZI`(M2mRPUT%{F?-aXz~Nlh$2w~B?sk)`F~SY$cF z9d$TbUlOg3A-l99nx8im${z|%8VXGw0u4o`4xyPg1erbrDHwtr$HFJiKW*lW`QdPF z-O}*fuzpJ-x1_q7h0iLA%`XUt%kc_9c?_K`sjm+&uc%rYsR*x()Pw~(q~k-|%^%uu z{&7QOnKV>mlZI++(j>RY`b7mPa(s96^ZTLZ6(ZA9v-Mv!0{!tr_)Yaonjuq7v(O9%JH!m?ocp3B%j?~mdR)_JXN6l)stOhS3 zgiGsItXPdIMowrfj&wz&yiy3~R$~HXfY+RbGZqBH!Bc04!^oX{>f&%Pq`=VZg)BV# z%u{D9m^;f>(P?w$6a^QB7tNSCKZqJ&iz4_6Mv8(9=M_x}2TqHgL^0Ov`BR|UepK{&MR4wKx$jI+4)LX-HUw})>cUVRJ_3w z6ff%(iWhK#=Lx;&rlzC#RCq~n@6-}4jl?2gSQI-BKD?s55-;$qH2WH7gju4ab5Db< zOUo<6cn7AG%IEF5GvrT(p~HA9s;VS{5fY4RQ+NgDh)8%T23KVmBqe15xXg^1bHn+$ zlc~);ZxX^M^gsA*MYK}(IXo$MQtnjnpI%Y5oLp}&+6ltP@n0xTTj@AhNxAiTjD{*o zi(*sYTos81OmHCv(PTNSsvuu9vSKasHe7BllIbw!lkuU;j#$&5{>KhkYSOZw=}v? zywMdcRc@?@HyRh?eb3EGt(XogrxdauDSt2RC;DM1CVnoGo)m9kIlB=yrF>CU(afo2 zk9;v!_hNWVsV%=Sny6o9e+tZbS9wX&*_VcHyqcylalxUkI`eP-RE*0R;w8e_;w?Wi zOSqzZDb4SZnpl{e*B&dAr%-LfW_u)3Ld%s_glnQ=R)|uIFMla^31$*Tv(w<#myoQhGU271*X#Gq+0tar3RTy{=)~S$%ppz@RwcOXjYjTUX&jW2IK8WSJ0wZb;5~6UU^Lm#b2z&q#}40&I5O- zwIJTD^YiH4Oyvqgym^nzJsB?Q_CYB-)HPIFiRQqPMVJAnhH*VMRX{#yUoVZZ=@@l7 zoSH6@YE-(MV78ij93Fc+6Jjh>Rn!Ix=PWF$DhkKhNemQP2f4joNUyzXUl$JHMGI!> zRh^*}v51Hp)nrOsfJ&BC4P#4q{&BI(*B7xsfhsa`t+J;ZM0@(H29@!UV9!COC|E( zz3H>DRMJC0t{TG2afgVv$ZM-ABNgSb)!~(S@e4q@!0$t=d#4&Xxg>BvW2})8Sa@;e zs`ARx@WN{?#Xa6E*hmdAd#U=f3h!c_9bucU25peIt|O+<*_mvP8cK0S71pf zukB*$-}3=t+$NdB+*ye2!$KM=+xKgmn2?HQ$Sa$z(tViZ_jpWc6+x0jH^BS2T2*%& z?&%=ml}6u@zyO0H%Bom27xyH&)iqTZ!?D!{ zw6w0gqI6<;se*7vH<5O|1bJDcwv6SLuC7EAGLF^A67{%9TqcY%EEOYEL8YoIVk}o| zCgoybhBWP{psY&V<>p4q)E-J%DeCGRn3j~pZMjJva(hMc&}lRkSy5hsDplZ)uUyfj zWRJO-KCZ` zev=q!93#brX~>!Ni&gz%ReyXOHJv%fhq*wjZRsAJO4r*wDd#<>86kc@dmd@(S3 zwod2u^L1I+ucy!^zNOqGr;B)M>d#aR_49$dRek+D zA=wX48QAUX`nLijo#6Oa27f@sGScS*GB?!!ZbE@s->>TX{j!Gm+Z(zvVjLTYpyNA{ zGwWxK4aoAbB4SUUB4hon>*@S&kTC1(bKW;9B*h3#sABE68on0^s_)T2bwH-7WmIMt z$h^D$9{`*6^>ZI(HIn{zDl~$-{-Y=}>u1FRf;vmha2M%;r+8@lt1NpO3A4U_9`33i zNs3(=no`E@_TL0duC9ie{d`S_I&ksJYWBBoU&kMygj`M6*U$6xsrs5uGthY*{|5!+ zd%C`UK4zz?pQZG#>2<9AU>G`2{nzyeZV4cV_v^0~k?n6X=lH+oL(k8d_3h_yT4arM zDl~$wr(^nCBW8Vlo|=A*tfb}CEOb4cAA`z-Y5DazaE_{<<7z*kE2{Vi)qb7}*Y!_# z;hLQpyIfq +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/29 15:40:29 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:15:12 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "FragTrap.hpp" +#include "ClapTrap.hpp" +#include + +void logFrag(std::string emoji, std::string who, std::string str) { + std::cout << "γ€Œ" << emoji << "」FragTrap(" << who << "): " << str << std::endl; +} + +void logFrag(std::string emoji, std::string str) { + std::cout << "γ€Œ" << emoji << "」FragTrap: " << str << std::endl; +} + +FragTrap::FragTrap(void) : ClapTrap() { + logFrag("βž•", "default constructor called"); + _health = 100; + _energyPoints = 100; + _attackDamage = 30; +} + +FragTrap::~FragTrap(void) { + logFrag("βž–", "destructor called"); +} + +FragTrap::FragTrap(std::string name) : ClapTrap(name) { + logFrag("βž•", name, "constructor called"); + _health = 100; + _energyPoints = 100; + _attackDamage = 30; +} + +FragTrap &FragTrap::operator=(const FragTrap &cpy) { + logFrag("🟰", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage = cpy.getAttackDamage(); + } + return (*this); +} + +void FragTrap::attack(const std::string& target) { + if (_health == 0) { + logFrag("πŸ’€", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logFrag("πŸ’€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logFrag("πŸ’₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); + _energyPoints--; +} + +void FragTrap::highFivesGuys(void) { + logFrag("βœ‹", _name, "send a high five request"); +} diff --git a/ex02/FragTrap.hpp b/ex02/FragTrap.hpp new file mode 100644 index 0000000..5461dcc --- /dev/null +++ b/ex02/FragTrap.hpp @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* FragTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/29 15:40:32 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:11:39 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "ClapTrap.hpp" + +class FragTrap : public ClapTrap { + public : + FragTrap(void); + ~FragTrap(void); + FragTrap(std::string); + FragTrap(const FragTrap &); + + FragTrap &operator=(const FragTrap &); + + void highFivesGuys(void); + void attack(const std::string &); +}; + +void logFrag(std::string, std::string); +void logFrag(std::string, std::string, std::string); diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..9d37d0c --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,56 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2024/11/29 16:18:59 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +SHELL = bash + +NAME = FragTrap + +CC = c++ + +OBJSDIR = obj/ + +SRCS = $(shell find . -name '*.cpp') + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) $(OBJS) -o $(NAME) + @printf "$(YELLOW)γ€Œβœ¨γ€($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -c $< -o $@ + @printf "$(DELETE)$(GREEN)γ€ŒπŸ”¨γ€($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)γ€ŒπŸ—‘οΈγ€($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)γ€ŒπŸ—‘οΈγ€($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex02/ScavTrap.cpp b/ex02/ScavTrap.cpp new file mode 100644 index 0000000..62a773b --- /dev/null +++ b/ex02/ScavTrap.cpp @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ScavTrap.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/27 12:53:46 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:01:32 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ScavTrap.hpp" +#include +#include + +void logScav(std::string emoji, std::string who, std::string str) { + std::cout << "γ€Œ" << emoji << "」ScavTrap(" << who << "): " << str << std::endl; +} + +void logScav(std::string emoji, std::string str) { + std::cout << "γ€Œ" << emoji << "」ScavTrap: " << str << std::endl; +} + +ScavTrap::ScavTrap(void) : ClapTrap() { + logScav("βž•", "default constructor called"); + _health = 100; + _energyPoints = 50; + _attackDamage = 20; +} + +ScavTrap::~ScavTrap(void) { + logScav("βž–", "destructor called"); +} + +ScavTrap::ScavTrap(std::string name) : ClapTrap(name) { + logScav("βž•", name, "constructor called"); + _health = 100; + _energyPoints = 50; + _attackDamage = 20; +} + +ScavTrap::ScavTrap(const ScavTrap &other) { + *this = other; + logScav("βž•", _name, "copy constructor called"); +} + +ScavTrap &ScavTrap::operator=(const ScavTrap &cpy) { + logScav("🟰", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage = cpy.getAttackDamage(); + } + return (*this); +} + +void ScavTrap::attack(const std::string& target) { + if (_health == 0) { + logScav("πŸ’€", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logScav("πŸ’€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logScav("πŸ’₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); + _energyPoints--; +} + +void ScavTrap::guardGate(void) { + logScav("πŸ›‘οΈ", _name, "is now in Gate keeper mode"); +} diff --git a/ex02/ScavTrap.hpp b/ex02/ScavTrap.hpp new file mode 100644 index 0000000..f843279 --- /dev/null +++ b/ex02/ScavTrap.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ScavTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/27 12:29:17 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:14:16 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "ClapTrap.hpp" + +class ScavTrap : public ClapTrap { + public: + ScavTrap(void); + ~ScavTrap(void); + ScavTrap(std::string); + ScavTrap(const ScavTrap &); + ScavTrap &operator=(const ScavTrap &); + + void guardGate(void); + void attack(const std::string &); +}; + +void logScav(std::string, std::string); +void logScav(std::string, std::string, std::string); diff --git a/ex02/main.cpp b/ex02/main.cpp new file mode 100644 index 0000000..d2942ba --- /dev/null +++ b/ex02/main.cpp @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:25:07 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:19:38 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "FragTrap.hpp" +#include + +std::string iToS(unsigned int i) { + std::stringstream ss; + + ss << i; + return (ss.str()); +} + +int main(void) { + FragTrap kanel("Kanel"); + FragTrap suki("Suki"); + + kanel.setAttackDamage(51); + logFrag("πŸ™€", kanel.getName(), "Oh my god Kanel uses his last teeth to attack " + suki.getName()); + kanel.attack(suki.getName()); + suki.takeDamage(kanel.getAttackDamage()); + kanel.highFivesGuys(); + + return (0); +}