From 62e9a2ad2a8e27499fa4ff84ac6ec9ec8da62934 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 31 Aug 2022 22:40:22 +0200 Subject: [PATCH] Trabajando en el marcador --- media/sound/item.ogg | Bin 7608 -> 0 bytes source/game.cpp | 12 ++++++++---- source/game.h | 2 ++ source/room.cpp | 14 +++----------- source/room.h | 3 ++- source/scoreboard.cpp | 9 ++++++--- source/scoreboard.h | 4 +++- 7 files changed, 24 insertions(+), 20 deletions(-) delete mode 100644 media/sound/item.ogg diff --git a/media/sound/item.ogg b/media/sound/item.ogg deleted file mode 100644 index 9da2832d9c4d0395f0bcc798dc1f63983819ab01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7608 zcmahtc|6ox`_GKQSR1m1Y7{Y+G9pIN*fI^mFkxIvmLgFX({f8q_9RWVB!o;TlnSLy zU27!SrO-+#>BCY&iOv)d7kr}XFJas`(3-701JP&RUgPW{%}>- zjSKQhK7nC;0ETmi{{z4=!YusW!r1dE|80Cq{!E3`qdG~?`TuIi1s2&zpjq1; z`*#``tu@@RmaMDGUzLa+{}A83e*U2*Xwnx=lGp3=XNh|PeHICqAsoLQ;r=Fix?}?# zGFgXglqsBQCJwkMWj{c7TYmE1yBuB(A>fclZz%Onma6eqio(9^l6#7tyHA4 zo~?VcS{PTQAlE$JUE_EgmkE4=IJ1K?(FtaFm1s2+*W@U56EupaAXp$DMlk>9Wkm@< zvu60^(QkB(#G~FB%_v7(QCtZKHbRVEVty+#s)T}&RSjqkQ9_gv<>*J+8VQlLy0_$_ zaRwTRk#BVyJEO$R<1?eS8q6q0?=m|mx44F?8I2nyWY(wifw87a%uZBOzZyl%RNB6dC~tR7aVH-<6xrC^wZWi{T~Q1d){hkML*-1+=8M zv}9GcWVMC<{={YN=IaYxZ-JZ!;NU23^}CGl0-YZKKG!IL=bFF^NEnV!!biuJV1WaG ze1V{E;k3y*)$*w`v!^n+|G&C>y8p5Ta->5-d*IGup?F<^WkL&fKw@yD5_D@h|0tQG zK$pxHDWwc%y~%Zx%%qo7mS@o_4ke#YxJ?<(3Tth8pG9s(qx>v4@l1p_oK>6aCb~FM zFF(|lsmX`^-ul5iOR64?)|4LNW}d1*Bf-+Zq)eM~G@{);#5ixmhlTN3ExbO~eNfI? z%Kt37cRT%jTOAtN*MAtuBK(W8fVZGzv|lPA_SB9SBz*gD0C9_ykD}fOv*{6C5yhx1 z^N-I)0t!-%@oH(mGwAAz3daH!uM#7}p#AgmiC2kL2z^W{%#EaL78m6w>NRWMXjym} ze=4~lxlx>4OR&%?tz|d`8+5w{jZua(qi$|z1(jAX=p0=j?$>>bm$p$I9V~-{yphzx2g#D-WZSR zh?l6(uy?qo`@8*5U)(whMj~?d#f^~a6~bC5BdV!{f3}GX3j1WN7yNDObyb^o)hF%R z_7nQ{OHCYQtUC0W&tyFu4TBvw_;(n1IBoD?ZVz@z4|cC)_n-CepN<&(ukIndutjMA z?X z_$}em!Gz+22}K8!M&gqL&ZQR>XKFpZ^r^aR^#AK(3l6Rd5Uy$+s%p(pwPK*bf_6FL zeC;a#NmjKA)oyOrU)DoS6S# zv+K~eTZ$Ab!VlOsR#;2v*(9@(lCzB(1-U)jDDMk;S~McFh6!Zfj0OhTLcBiREIL&X zDGdjXD6Ytj)~z2^ty(FX%X#$_>*9-@j`Z?Ntc`SDrE}1mEcE$UgU7PDvYh7} zbh#W6fiQZ+^4hqv7^)1wadCzyDJIpYl{Cy{Jf^%?_DP@=X8E>KG_q44Q`EClq)9yV zNgB>dZQc4lE2Vv_2J(*@40_Bp^!==WpbkU(lPpjpqHo~n z%(RoS>vCqg$=NZ})$G>W*~u`SmRd1onNI0;%nJXf`oVq9%$IV^u1bIRsR);J_RIBl zef&=}%SN9bmBBC1{>zHlefMyLG!#y0C{%(l#eh;@Erb~AO;@stA*C)$lrZfAx z{F&)&uW;te?H+wSOt|pn$Rz0%Ju5>FWHsTWD#rE&(v3$n1Vy5}?mrV2bINBgD(DV)BYX}-R!|>+m1@Ro-TF=lRenYes?aoe+H4UndvcJ2(KsR z)uE7=@;Q!7_RCZcFGMCE;$`^!e#oY)!M^>b*RQS?x4wT(+oOL&^?kbx_RA3^i&uuR z`W-ie5xF&Z8Zd9VoUJw8V3r|Sr)ct z@iI{;6_BF2j9P{077A%u7{i=Y9K&FoREXkI)~JPTqif{x9OyQA(cR{x@)!ndPia>s z>!d++J4=IC;XprG%u{p^GT4%6)|i!&Oi|~hE=;sgG_#{n3Pp*IrA?}HrKqb#CDDad zc*%5IHJ*ZnW_enw51Qy@?YUi-5vIYbOQ!EpfOi@-VT0L4L0s&CnYrrY1A^BZeriAej-Am&#!5E=6&V<;T5}zM7mc3R^Ycih}n( z<>tROIqEa}_G>pySU%H7k+pmQf}$_Dc@e^9zg)m!vOPSeEgcPz10x4FK~xChHWks~ zya1_;@zQ6yAV|9ZpsNQTr;_ciu)T{933fM(b?;%noQ~N+F|G<3t^P9i=A+U!47+W(9MVaDDFW;XZclFE&!c`8~M4q{rPz{>~~Hx?loBvOR(Qd5zp zb|jMVyn;@aOa%7H;ItyA!&yU( zu>g}a$E*4M1LLJ8F5-#sQj`D2Lv@7Sa4w=nFa~{r7SA7j_!mavSGEhYB(;A>yl4Vl zgO7)FOE5>TzqR}iEcss;gYgdxnd)!6RK`|Rf+`y!S5+`mU&fT%aZyBm1!uv3sQ@yy z+nr8io3)U46|3OMMaAZHQY_ixG4T?~NmM09B`iS&n^(8prVbtK1RUUz3UsLsx&k0B zNiY>QQ>X5`iK<(3zgU{SHZD#$4W!7jpt?rmEtVQnXZ5^JFnrliHYY8eynW!CG4C z$DPS5fB5XxSBx|&QvPl@9ByHR{19-sg}V=KV(;Q4|L((ww^$6{A*z$K8lKdbWGA19 zJQ^7l7oTwIL;^Q4=48^z*qDeTdzAG1EJlOxuguyl=OL^RLHpHh+}GWKYsZV>=1_qx=l2l-*e;O!^-m$`n$|bf!r8;$ zgFYQHdGSZfl@KjERuDW>kb(lU!#X8FIN>7feq0XZ9`y(;rNg(Q)$Hqf;^B^0KK@lB zge7L5kFEiemld)tQeSlJp^=CZ7bfhWF$iH zY*3sQy3o8`S|fC9PO?V-#VTZro4>)(P#HwiAY)P-uokEA_73ep z@}>hj^v|flZ4rd{^)96W@+%@X9QzFjoKrfU(gFa5+dvjL{$k@VhOJ>J_NwN(Cjvm# zJyzfxP?ZUc+H?!S_^Vpb(N5xE?+5OG|5y3hw(9e#Ij=U4tP3k@Xpn_mw^(Bg0|S?y zO{2X~ADtEhBW-vD(4&UFEvf398XWX0U_h0qP{W3hGOHt(idC?po!~9><`x!)oWVPG z2tZVHQV#8FbQQXM=k7w`Sz{&xMAaPhDd&SC!W%t;%AeL=`7Z7_)w{fAYgUxtr%3C| zRG=Mn`|yM322wSTC02_7u5ip-31Ax+QC2DyATpyPP&64z7!pWO$pzEEonL1=B>dzj z?!KEH^f%d52Eb)uX@Zck1^FoYAYFl)SP8I48xd?0f$65k3rE`z+~Xic?>&If%dFAM7?O?)Bf~%iVyF8Ag{~RK)J<;U>u9pWlc_YDd8>je zvi5slpZ+k8MI|i*3mNs>5FMa$HvuQGa(K32pu~F5{LLKklje=WgreP6NrJ3QD-a^h#5$$1YEr!g2Pb# z<8C7M+_%VK6aXgvy%GoT1ocTe9)ewVW=KYRTN4F}E#3D_iyQx=4km?6Fffhvk# z$a+Jbz%kjaiS&5^wnf}q4Onm8)v|mHBxeQ|!+C)cT`q=mxdCT{AqF6c)hG2(F2kNH4OFpTzX?L)k3vl#p#KXL7X_M?!8157p8gqfX9;as^k4{D z>DNJ7PFNSxDZlwa0|t;t@$P2FDhJvxMNjWI{PF~5sKi(pAlZ0GUI4Em6ln<1F9DZP zBxoa7A3{nRFxuJw=7-!fPx_A(n`2tvM?V^b>|Zrx+1wD0q94)fO{XCSswjRFWePCY zoInU$lsIMT*C#t%C}jB*YD}Q>6<-UBZH}~OJ-)yHGH;8vIJC@XOM~~2nE0h+qM78H z-CPx7DMSe}9R$$Eq#?J@T3CF=eT_@Q`+qKfZ6S8-wR~Rkg)2P=Wk_tl=CODI;Hv{V zQH9la86Xk|1i2!bfOilOMP3{!FjW8fGo(M_Rn86V%sByvnr}i5a5|K*1Y7cu?_sD; zL;4t41=I_p^#F?8LC$#V6PCIFvj&gib0#`w3n*f9G%octPqE|e)qbVe%h<+o z$8Pe5{NcRy7)~kxYrF~vdY7?)mxdY;kPQSQi~?o7&_eteA(bE=ox0VE9Iki4ozqCljfb5;QeHQ#YnfjO(8mucfU$fIu6{xrUC7IB zKE~0X&z=jHh{BJ(vNez5a7zgQImeuD_ai_IF<14yoIl zK~p&prk|IGp_-t`kOOIC62?E4$iQ&my>eBGPyYA&Z}qN<1h!2Si>Y$%VF)sX#Y37^ zibThSD1~v9EvX#5_aOt6x7=tucunFWWfAAq!zxUzOlTabQ;LG#SWUxa*GEXvH1=27Hur*Q|G#Y_ZD5}}M@F!w=TSc;IvSp;Q z^|i~RcO=3-&;n>Ka|5A9AU75=e+}LnLH}8%- zI4D7G$~84m$QRs#0`N#YcOrCH>Qkak^}w2j-yYMhe&kRv9DgkimP4osT1f+(r2ow? z{X5^i;2t*${cdHS^U7!U*o{eFU9mkv#b0W^Ld6=U;1wxtAf5~3 z+o&8ou_@p6-L5YyQJC>t@0ezfo5i0y{?v|2jIG6M7_b$79CI%?;Lr0tJkE?fbs% zIoX}ZTS5X)@6{7c?WwpajjzXD_P)L^NH170n0p$)gs>u@t9d2&`>AbzrHwwVyfl;3 zWAyyv3);lg-4i(4GL&YYq=Pq};OvdU@6{irRd(}JbBCYKWv$O+N734ZlrgEXOblV4 zPfhgLX$?@}cKxakQC&h$ER^SY+D0GdWs0x6m-%cq;}%r^XmtO)Uo-np&por{&#_Q5 zA0s>m%ffK|Oj|1`!g|sS8s2lSD>46CefIvj?M_FoCMYI;ULkc`1zb7jZwS!ZXz1F( zl|hosNPj!&yJ3zueJ6Y4gu}zID(PAa;d#rveUDQAAisu#+}SfN8=G#9i&R*>l@I(n zB2N_2f1`gxy(xUNdCXbfz|+lH#bMXE6HP-7+Z(JWMW807ljQs5lh@;&y5Zd)C^YzA2eEhzf<(Y!sn4HtlepO^B7b^fYPv+B_xE;SF-J*K; zVBZ>voZ(q3MhK3Z_jmZ8){B!;`^i<-<0aZ=rT1vWe#6v7O@NiRic$l$H{7*y+lxQfd}GW8h!{`&Yr5y~ll9;kP9& zWffwh_y;3l7lxNFA*M9GV3jxzs1=dLZ0>z{y(HgEknldBv(W%URZBNSUH1|t>cdYl98S8-3H#caH z4xow%0cY>|6qD3{1;wI-h&klTg z?CJ0km3m&jXXfg*)wdiTc8fln(%SLC`}EH3dOy2IDb~|w#LbyO$NNHDPKuijR`@*_ z&f1y$+gxJ8g#%$BzHuc^^=}fs2V-;P89793fBnQai347a*UIKb%q=eim7hBf<2hdZ$n zuAHM1#6Zky&T&+a?#LA$Sk=&?`SbOc-a^?^`)sUEC}qa@yw@}PX)UKBnI9!yF=n)G z>k$&=v4>##UOiIYAMXyNFFR|$DR1>U#akU_2X6lH%ylfquQch|N&2-nH!`j@MrMy; zFAfXV*ydE}Ps~e9ydFCHVzbFNwrNFN!m<3PoE582r}Qq9sKI`Mp>w#^ktjDC)iy2l zyfZPG<(lAV(lyFz4A%G_kL7gwmKs-1XuaIiPBQHfIXm4x8jwKU-0dFg`u*qZ^F(24 zK{G>Zw?X6AaGeWpr{MSPVng-LTF(XC0Y`Y$(iDDm(>hpDRr_XM>HV#1ia9IvlYYU=O&wn4<`^H3M zz2SYe=}+X4>iGDN$FHpVq&OGcoJcQTznY$UL_X7TQ>?=jYs$1bf?T>wj_7<>mvNuY z#ddclcg?C?rB#_rdn4n!XUr5{eu)Ls%HQ^`bM0%LyrVo2`gQ&a$@7y)ZbQyDngYn> z3UgkY!9tzTIinput = input; // Crea los objetos - scoreboard = new ScoreBoard(renderer, asset); + scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked); itemTracker = new ItemTracker(); - room = new Room(asset->get(currentRoom), renderer, asset, itemTracker); + room = new Room(asset->get(currentRoom), renderer, asset, itemTracker,&itemsPicked); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); eventHandler = new SDL_Event(); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); @@ -27,6 +27,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) // Inicializa variables ticks = 0; ticksSpeed = 15; + playerLives = 9; + itemsPicked = 0; section.name = SECTION_PROG_GAME; section.subsection = SUBSECTION_GAME_PLAY; @@ -239,7 +241,7 @@ bool Game::changeRoom(std::string file) room = nullptr; // Crea un objeto habitación nuevo a partir del fichero - room = new Room(asset->get(file), renderer, asset, itemTracker); + room = new Room(asset->get(file), renderer, asset, itemTracker, &itemsPicked); success = true; } @@ -381,11 +383,13 @@ void Game::checkPlayerAndItems() // Mata al jugador void Game::killPlayer() { + playerLives--; + // Destruye la habitacion y el jugador delete room; delete player; // Crea la nueva habitación y el nuevo jugador - room = new Room(asset->get(currentRoom), renderer, asset, itemTracker); + room = new Room(asset->get(currentRoom), renderer, asset, itemTracker, &itemsPicked); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); } \ No newline at end of file diff --git a/source/game.h b/source/game.h index 495ead0..3c641d1 100644 --- a/source/game.h +++ b/source/game.h @@ -40,6 +40,8 @@ private: std::string currentRoom; // Fichero de la habitación actual player_t spawnPoint; // Lugar de la habitación donde aparece el jugador bool debug; // Indica si el modo debug está activo + int playerLives; // Lleva la cuenta de ls vidas restantes del jugador + int itemsPicked; // Lleva la cuenta de los objetos recogidos // Actualiza el juego, las variables, comprueba la entrada, etc. void update(); diff --git a/source/room.cpp b/source/room.cpp index 0304c11..050c14c 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -4,12 +4,13 @@ #include // Constructor -Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker) +Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker, int *items) { // Copia los punteros a objetos this->asset = asset; this->renderer = renderer; this->itemTracker = itemTracker; + this->itemsPicked = items; // Crea los objetos texture = new LTexture(); @@ -551,19 +552,10 @@ bool Room::itemCollision(SDL_Rect &rect) delete items[i]; items.erase(items.begin()+i); JA_PlaySound(itemSound); + *itemsPicked = *itemsPicked + 1; collision = true; } } - //for (auto item : items) - //{ - // if (checkCollision(rect, item->getCollider())) - // { - // itemTracker->addItem(name, item->getPos()); - // item->pick(); - // JA_PlaySound(itemSound); - // collision = true; - // } - //} return collision; } \ No newline at end of file diff --git a/source/room.h b/source/room.h index dcd0f89..c4dceb1 100644 --- a/source/room.h +++ b/source/room.h @@ -53,6 +53,7 @@ private: SDL_Renderer *renderer; // El renderizador de la ventana SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación JA_Sound itemSound; // Sonido producido al coger un objeto + int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego // Carga las variables desde un fichero bool load(std::string file_path); @@ -71,7 +72,7 @@ private: public: // Constructor - Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *item_tracker); + Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *item_tracker, int *items); // Destructor ~Room(); diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index bb19e55..407a17d 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -3,11 +3,13 @@ #include // Constructor -ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset) +ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items) { // Obten punteros a objetos this->asset = asset; this->renderer = renderer; + this->lives = lives; + this->items = items; // Reserva memoria para los objetos texture = new LTexture(); @@ -96,7 +98,7 @@ void ScoreBoard::render() const int frame = desp % 4; sprite->setCurrentFrame(frame); - for (int i = 0; i < num_lives; i++) + for (int i = 0; i < *lives; i++) { sprite->setPosX(8 + (16 * i) + desp); index = i % color.size(); @@ -105,7 +107,8 @@ void ScoreBoard::render() } // Escribe los textos - const std::string text = "Items collected 008 Time 88875"; + // const std::string text = "Items collected 008 Time 88875"; + std::string text = "Items collected " + std::to_string(*items / 100) + std::to_string((*items % 100) / 10) + std::to_string(*items % 10) + " Time 88875"; const color_t color = stringToColor("white"); this->text->writeColored(BLOCK, 21 * BLOCK, text, color); } diff --git a/source/scoreboard.h b/source/scoreboard.h index c4fed89..dd5c26e 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -23,10 +23,12 @@ private: std::vector color; // Vector con los colores del objeto int counter; // Contador interno int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color + int *lives; // Número ara mostrar en el marcador de vidas + int *items; // Número para mostrar en el marcador de items public: // Constructor - ScoreBoard(SDL_Renderer *renderer, Asset *asset); + ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items); // Destructor ~ScoreBoard();