From a128048a8f8d32dec42b567205744980d95c0d84 Mon Sep 17 00:00:00 2001 From: DarthMooMancer <107283522+DarthMooMancer@users.noreply.github.com> Date: Thu, 22 May 2025 12:23:06 -0400 Subject: [PATCH] rework(snake): added tail get_new_point for managing tail movement --- .../index/main.cpp.C070F90AD8D66EE4.idx | Bin 1620 -> 1078 bytes .../index/point.cpp.5A6C80E33F52E8D8.idx | Bin 1096 -> 1100 bytes .../index/point.hpp.1A777AC8437A8313.idx | Bin 928 -> 936 bytes .../index/snake.cpp.60A7519252B9A7E3.idx | Bin 534 -> 700 bytes .../index/snake.hpp.8322EDE86440CED8.idx | Bin 426 -> 764 bytes .gitignore | 1 + include/globals.hpp | 6 +- include/point.hpp | 2 +- include/snake.hpp | 1 + src/main.cpp | 103 +++++++++--------- src/point.cpp | 4 +- src/snake.cpp | 18 +++ 12 files changed, 79 insertions(+), 56 deletions(-) diff --git a/.cache/clangd/index/main.cpp.C070F90AD8D66EE4.idx b/.cache/clangd/index/main.cpp.C070F90AD8D66EE4.idx index d3d1fc739207a87634b5b3ca071fc9673eefafcf..c36907cb7643c2cd6e94a61df5f6f3656dde4fdf 100644 GIT binary patch delta 740 zcmcb@vyG!Z$kWYDkA;E3ImNRgH?<@Y$Yc-!;^LB`%veSShHO>_hKe~yryTTRHWX<4 zY&1_rQuk={1IO(gN=XYj_NGnFEH|0WIr)v){d*bS7iVwtP;6KH`TykfnJQk{OSg(k z1(uwb%fI&gxtIL`Z?}^Pi^cDhe6vkz+xbCz*QA9r&(|xu|88@**m^M8^o_Fiy5L)y zzCUfbivwp(6+2_o;r!M!uOYaxuR15YD8qn7Tj0=*!%q&y%+h4ZI>;)0z0~Pou2?$LtnBE8=Ao(CteMs?j5zWU0{KeX6?Vb%U8%dS0XKe}PlrFh?~tGd=P{@czJ zU$gsLqxI}NR~a9x?ue<$J(8)|Q7pLSZ>FYKxa1#Bi8ha|+{$h-?r%aSw_yf8pipJzZlAk-+h?e%c#qAn{o0U zMnz{P9w{j{DJ}!?D-w_26-Dw$$#BZ>!g#VDjeMUwhR8AUNb#}oal(Z47YDB^oOn~0 zQAA3LTZ(sb43qri%S__hik~80sT~syV&;*Ol$BJ0DF@mhDkX#9$%xCyP5#LwZ*oD& z-uS`DH%N(qsey6^7Wkz_46WkRwn>8 zigJsJ!Bluf*YY;~`gke za>hO;pr4ebRAItElhkB1V7za)r=}bc7vwkw3=n=6e$L72tn!nWvwCnbN-3>KUG~bn K#C-Bk)@T4Ugf7+q literal 1620 zcmWIYbaV4zV_9;Zh8)aNHstww{>{o8 zUWYfeJMrJ1;-s0#yzs*9MK}E1dXF1TQeRjfznwFYyE;SI>p+6yesz1#X}w#I-BQ@n znN-d9v8uE%@r|ubmI&(^$4A=^PnQu*J9PeHc0@3Ya!1^yJ=XmfzoYtXhJ*DKj!I|SFDvFOToC_w6=ThzJzT%vzOQ(qcb7v* zw@gl=pXZOB>crz-b42IWoIaMQY49*6Id50~V>LCsz=UZV^dhTTHGkQERuBKyS8wq7 zcKhLtZCih)c#1JE{SdjKE59C)t+>AZz3~tE$FsL36m!O9XY^XE=SW&Bw9$Tj*DX`thdfekK5MzxS;zcc z`m=Q@Pe|-_xrc>+LLafJ*(x$UHJY<%fx*+@AG;Z?=j~rAQ&H{Gz#o5Lc48dku@nF1 zG89+lCdmUs-$49|#N&5Gkvt623=C4-EZiJm0w@CkMX71UFPRw_Zcn_v&a*(4g;7L` zmz!4*rtR&L`l@9Co4FWyqzu^%xnRPpn_>i}h1+riRU1keO2LF>KN|TycMOqZ;*sKG z;p2n}^GHd^Nhrg3U$>g@=0EtR2h=MeARz-2{uZ5nV2Xo=2~e*%r#K%>7|0V5mxS?- z^e%bxU;3*FP%jS`4?j$}@nXn!nVkPNEId-`-0BiAVICAtDB~&H!VAh?Km5~2* zI3ft>IDRgExZ^HmyDd8*_%{qFtSh1`3R7L9Iq@xj@t<&@A%>cUx-elF%_xNuPgxD! zBKME_X8>Iyt{@H%%d6M&q?Lc{%m5l?4Y>_@VZzS--g)bG zisS-Si*bpG!Gu#=e|p-VH7o|2Ex{=PclYCrPYdfxnCn4Ss)=jDR4=}AVbQ;Bf17~9 z22uv{FyZ^*)7KvGb6Ey7+g#8b?#s#VJ6~^jk-VNoL`t7cpB<(e$P?0sJ6A-?fXx6& z&Oq2e1g0`^tA^ZV;q@CquCNw&f(fsiaCfn-`TLzf>x{UJ;BNl#p#0~yl{5B%Jg#U6 z52kOor=}bc7d!?ugr9{U9=&JHEVCYdUvdm+h_1Y@2F&aoYd%@t6Tf&KrKGC=Dz`ab0&U@8 z;eorU@s+^EzRmm}fNs)Z*WrPwp0!|h?%qYWJ_2)xD2pguHII}rk1;&6UYs5HL%=WW z6O)LPD3>VQg)%6L7>ZJJ5V=yoXBAAj0rZ}9*EVb=ZLck?M zML{k>Apv1=5eZ3AF>rwoRU!;m${>bd3Luz52xf9_N)AYdn~#@?nU$Y|kBxt2J1RX6_NcS1qi#bi$=cuP3HR>z;dk(c^@8MY;-`tj@#q#r=$uT3zxP zMu!)zYG}4o*pX0^zEMDLs@i3a%$AaxlrBSV$ySvoHzqn}%AT#Sj`^9fg+0$ivE|;@ z3t4@Plg!v-#T!0aT`9Yn6TiJ)qCZwJleVUu1QaAJH~&e>Sxu?v}yr!w@t6-Y~S8AlV`~br!X~DMp@xE zF&5EU#Sv?`UflfYWcM)C^Zl&Fi&pG=ebXl+Oa5K!#}%G$xYOA_?C+fOgs+&r*xaI4 zi~AR6ftvWM?l$|sOAbZ`U-}{a-|D2)=WiuKmU-;9@du7`N)}hOrzqm&4Uo=^a G#Rvcx`SQL1 delta 586 zcmX@Zae_lJ$kWZufrWv=ImNRgH?<@Y$Yc-!;^LB`OglyfhKCasy`Y8c)fy~DGxvz!s}@#VI^oiWx1FidJZE2D^f)12;eUklg7mWUZ2j|uLS*bb zp0jkXYI^d~Az^RX+=Wg%LQd=w4C2nbY*@$o}wjZC$EhW2zZRUaR z+ginfKL`ZMZ_s0Sd*OQ8jcu1V*3VjDXtCS6Ji$urgT&&^Qk!}04!Vh(b0xR9ewbNv zaqp6OF&#$&EYJKtklQ5sYWr8WqYFPWZ;sm+w{Eg!hqUs|(rYuL4|bX!NvI98a$}55 zx)E8wE#%pT2+<3hOIvFWt)6tx)SWf3_WI_T4tetLTFY8=zO@=N|G4ksSJb|yS%T7DzwU0c|GVU1WbmaQ(*Lba&ieGNL@2(Lm(`)TGB+u9avP(PxZ~$_tjYTr zj|eb{@-v7q3p2|I^9b-rPF}!hF9wqn5n*v-afk6He`WM`fpHQi>I+%8nwT*H)#$P4 z!-QS8#YuhRos`5RBf=uaA`cS=@=RImV7$pKOimnd&N-%Z1jm-ySZ&>eyNhkj-|u9U z5@F|I7o4?VcJAIqw?4u&0EI!Woji?M4{kn84Kt4jGY_*MOzGsu%=#Q|Nw+7x-7LOu IvJ{IE0CO?%UjP6A diff --git a/.cache/clangd/index/point.hpp.1A777AC8437A8313.idx b/.cache/clangd/index/point.hpp.1A777AC8437A8313.idx index c570bedd8ee92f8c8dc76447cfa713faf780d971..1cf8a3c4572f7c8e7d7354912fd974a9dc1000c6 100644 GIT binary patch delta 348 zcmZ3$zJk3z$kWYj0W$-GbBbq0ZfZ#)3j+g#2oM*S6lER)(pHQN3>9yS7FYjZ;BW<`JI^Oe+JLDa?ddrrC`^yit%;TH7 zlD#3_cpYnWDCZ4v*_F=5H&&QT65Fs;d!v+P%CWKl`(*Y#iIw-?TK`u4cjnEu^{Ztb zbLu?|So$GVMT6g8zxd!+!3(nQUvtYl$~72S-R-Lo=Q^=2KIGZw*>eiibon)vckrN$}aUH5`6E6xg^dC5E?yTE1QtyJ+(f+dl>2R?5XVB%r| z`U(ixcm#MPCz~^>Z?0wZWK@GGV3Y()%vvxzckiNGAJ9_Kz7i^}-jwxhwiE zZ-V!uYWE3ho9FL)V9086`1+4S=T6FOC~-S)ypPM$Wit2De}9zRJ~V|(<@)LDKXGqP z=>C!m{}tN)3ST{Zq4l;R=l6_HJoPNcbFwEsN}Zg>C@=2#c^zx=KE@*gOzccR9{~Xy zj{uM4=32%;MzwVl?k=`9f4`Gal8u*>mv7dB*|~cc-TDaA0~7|So&1GKj{_z)S&KPc V-0j*1=D&B^*qK;Z89-qM1pu{zg@6D6 diff --git a/.cache/clangd/index/snake.cpp.60A7519252B9A7E3.idx b/.cache/clangd/index/snake.cpp.60A7519252B9A7E3.idx index 389ad647fab420124601b70fc6d0edd754234d92..73c4065b146d4574ca59fa8c5b9660fe483bceae 100644 GIT binary patch literal 700 zcmWIYbaUIn#K7R3;#rZKT9U}Zz`!5^#Kk2=nM#Zd4Dmp@iaApQFJ?Iz^1S`;A+4Uw z-^A}Mcx*!KgvNZK+b`a}$@RYU`osI{g|2FE9OEZB7x~Setg&|LwZ6Zd5#=W@zA=!} z{L41qNvGkWVeR&cK9vgvzm%d`p7}Bhee`&+n0N1DtsP1!x3zMoek&65Td6U3O4_6= zn^oW1oc~vSrzOR(Vao}Yk58;$1O&D8eCufU+Q9huVC+-H}&FNZdKF5D3E-XQ+!wM*?=HxgN1_|W*CeHss@<|Q*EOsXJ$6zVG&R@3k!=N%*>k)pWWN} zoUN8oMudZhLlma@N~k&GH^I1zK-J7F%=|FbFvFO6M3@+uSYg6I9?)wrNgfe)R(39! zNwXHr&fUA{)<=*l#WDe=PXfLzm$uWq<`8U6bH*+WzN&4sun?O*0ym^|g0SN8Ebm20s@Te8xO zm&QMI?qD^rTJ~PdeY-P^?Oc@Cn1r5Dom0F} zj$vM?cVEQj4Tm+o7V(8XREX(ZeR!gn)}j;xku~WXXCIb6_Wk3Pm--*tjpgFMZ(FW? zCU1h}G)uuF?aQa9ZLm4yw6W{0d5y(P<|3nCyB?TNKAiCBrUzepBE$as``-tijM?4& z%KrKFthxJrHKUWa-jA-EessHq>&%^Pk(Za#XJO}L;DB%xKSjJ!J0=>$$Hc+Jz{V}kEe9rG(vO#2tMHyXFIa$y3#OZs zlT#Wd-N{ftFLGyff&ddUOqzp}Lj)#mqbFx(HsfIt9}_3ga9$2xQ7{3Mz7lHA_)ReG zA|DewP@0E>M;J`Nq%S2^{a3lo`I3zZ7$t0M>})(>f`Jq4az-{*hN9H8;x9lR%#Vzc zV86jM!u-a_1@;q680IISYLH)G!Z5!8g+YFR3B&vVGz8=Un6RZ`qp@U8!EB%~BL|}( zBrq8mU|s?WgZu+itr+mWxm@wVV@4h}Zcc7~n8RSwOk5D3K~3R7@x`nKvvc<@y7dvH tSAbg-rne|HClRE+xG1?;8N^`oI?y1^T_YpF#KOt|O4U%n3S%%Z007oM>U;nI literal 426 zcmWIYbaPw8$iU#7;#rZKT9U}Zz`!5^#Kk2=nQ=fm8Hg+9sCGGWH7E!$e0P0&H(Op{ zQE^A!j?~pV+`jx?qj#8x$LCR5Q~$98r#g9*&UuAi^juNmTF$L`YnJ&Z-@+|oU;j=# zy4?6eyt58#pK8Hd@${GXWYk;PS1(W&E3V8e+3F#-L_%*@Wr111 + +constexpr uint16_t ROW = 10; +constexpr uint16_t COL = 10; #endif // GLOBALS_HPP diff --git a/include/point.hpp b/include/point.hpp index 8a1d436..c7d0689 100644 --- a/include/point.hpp +++ b/include/point.hpp @@ -12,7 +12,7 @@ struct Point { std::string to_string() const; void clear(std::array, ROW> &arr) const; - std::pair get_point(int direction, int row, int col); + std::pair get_new_point(int direction, int row, int col); }; #endif // POINT_HPP diff --git a/include/snake.hpp b/include/snake.hpp index dc8feda..d326b5c 100644 --- a/include/snake.hpp +++ b/include/snake.hpp @@ -7,6 +7,7 @@ struct Snake { Snake(int default_direction); void create_tail(int row, int col); + std::pair get_new_point(int tail_index, int direction, int row, int col); void update_tails_count(); std::vector m_tails; diff --git a/src/main.cpp b/src/main.cpp index a74fb9f..49cc149 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "point.hpp" #include "fruit.hpp" #include "snake.hpp" @@ -9,66 +10,66 @@ #include "globals.hpp" #include "input.hpp" -int main() { +int main (int argc, char *argv[]) { Snake snake {1}; Window window; Input input; Fruit fruit; int x = 5; - int y = 5; - for(int i = 0; i <= x; i++) { - for(int a = 0; a <= y; a++) { - snake.create_tail(i, a); + for(int i = 0; i < x; i++) { + snake.create_tail(i, 0); + } + + int row = 0, col = 0; + int count = 0; + while(count < 2) { + count++; + for(int i = 0; i < snake.m_tails.size(); i++) { + std::tie(row, col) = snake.get_new_point(i, 1, row, col); + std::cout << snake.m_tails.at(i).to_string() << std::endl; } } - for(int i = 0; i < snake.m_tails.size(); i++) { - std::cout << &snake.m_tails.at(i) << std::endl; - } - std::cout << snake.m_tails.size() << std::endl; - - - // int score = 0; - // int row = 0, col = 0; - // int fps = 5; - // bool running = true; - // - // Point previous {row,col}; // Creating initial snake head position - // fruit.create_point(); // Creating initial fruit object - // std::array, ROW> &board = window.m_board; - // std::thread input_thread(&Input::get_input, &input); - // while(running) { - // switch (input.m_current_key) { - // case 's': - // snake.m_direction = 1; - // break; - // case 'w': - // snake.m_direction = 2; - // break; - // case 'a': - // snake.m_direction = 3; - // break; - // case 'd': - // snake.m_direction = 4; - // break; - // case 'q': - // running = false; - // break; - // } - // - // fruit.reset(board, row, col, score); - // std::tie(row, col) = previous.get_point(snake.m_direction, row, col); - // - // board[row][col] = '*'; - // board[fruit.m_row][fruit.m_col] = '*'; - // std::cout << "Score: " << score << std::endl; - // previous.clear(board); // Clear old previous point - // previous = Point {row, col}; // Set new previous point - // window.update_loop(fps); // Update loop to clear board, tick and redisplay board - // } - // - // input_thread.join(); + // int score = 0; + // int fps = 5; + // bool running = true; + // + // Point previous {row,col}; // Creating initial snake head position + // fruit.create_point(); // Creating initial fruit object + // std::array, ROW> &board = window.m_board; + // std::thread input_thread(&Input::get_input, &input); + // while(running) { + // switch (input.m_current_key) { + // case 's': + // snake.m_direction = 1; + // break; + // case 'w': + // snake.m_direction = 2; + // break; + // case 'a': + // snake.m_direction = 3; + // break; + // case 'd': + // snake.m_direction = 4; + // break; + // case 'q': + // running = false; + // break; + // } + // + // fruit.reset(board, row, col, score); + // std::tie(row, col) = previous.get_point(snake.m_direction, row, col); + // + // board[row][col] = '*'; + // board[fruit.m_row][fruit.m_col] = '*'; + // std::cout << "Score: " << score << std::endl; + // previous.clear(board); // Clear old previous point + // previous = Point {row, col}; // Set new previous point + // window.update_loop(fps); // Update loop to clear board, tick and redisplay board + // } + // + // input_thread.join(); return 0; } diff --git a/src/point.cpp b/src/point.cpp index dc3113b..afc1fbc 100644 --- a/src/point.cpp +++ b/src/point.cpp @@ -9,10 +9,10 @@ void Point::clear(std::array, ROW> &arr) const { arr[m_row][m_col] = '.'; } -std::pair Point::get_point(int direction, int row, int col) { +std::pair Point::get_new_point(int direction, int row, int col) { switch (direction) { case 1: - row ++; + row++; if (row >= ROW) row = 0; break; case 2: diff --git a/src/snake.cpp b/src/snake.cpp index 4fc7ebc..f3e6c09 100644 --- a/src/snake.cpp +++ b/src/snake.cpp @@ -9,6 +9,24 @@ void Snake::create_tail(int row, int col) { m_tails.push_back(Point {row, col}); } +std::pair Snake::get_new_point(int tail_index, int direction, int row, int col) { + m_tails.at(tail_index) = Point {row, col}; + if (direction == 1) { + if (row >= ROW - 1) row = 1; + else row++; + } else if (direction == 2) { + if (row <= 0) row = ROW - 1; + else row--; + } else if (direction == 3) { + if (col <= 0) col = COL - 1; + else col--; + } else if (direction == 4) { + if (col >= COL - 1) col = 1; + else col++; + } + return { row, col }; +} + /* snake head for instance is (3, 0) * the direct body to the head when going down would be (snake_head_x, snake_head_y - 1) * the next and so on would be (previous_body_segment_x - 1, previous_body_segment_y - 1)