From 1e2f7982f660a99dfcd845d376e75114c0e45b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20K=C3=BCderli?= Date: Wed, 12 Aug 2026 17:53:50 +0200 Subject: [PATCH] added README and gitignore --- .../clangd/index/astar.c.E6AC3CE66692E01A.idx | Bin 0 -> 5870 bytes .../clangd/index/astar.h.9F59AB6C6E104B18.idx | Bin 0 -> 2332 bytes .cache/clangd/index/main.c.16130F5469FBBF55.idx | Bin 0 -> 536 bytes .../clangd/index/visual.c.AA33B4E7B60454EE.idx | Bin 0 -> 1684 bytes .../clangd/index/visual.h.C6F519C14D5C0D47.idx | Bin 0 -> 216 bytes .gitignore | 1 + README.md | 10 ++++++++++ src/astar.c | 11 ++++++++++- target | Bin 21520 -> 0 bytes 9 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 .cache/clangd/index/astar.c.E6AC3CE66692E01A.idx create mode 100644 .cache/clangd/index/astar.h.9F59AB6C6E104B18.idx create mode 100644 .cache/clangd/index/main.c.16130F5469FBBF55.idx create mode 100644 .cache/clangd/index/visual.c.AA33B4E7B60454EE.idx create mode 100644 .cache/clangd/index/visual.h.C6F519C14D5C0D47.idx create mode 100644 .gitignore create mode 100644 README.md delete mode 100755 target diff --git a/.cache/clangd/index/astar.c.E6AC3CE66692E01A.idx b/.cache/clangd/index/astar.c.E6AC3CE66692E01A.idx new file mode 100644 index 0000000000000000000000000000000000000000..991e0bdee62b8983b992679a7873849faacc1047 GIT binary patch literal 5870 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 PpodKB<{qh5X}JFZ+mxrg literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/astar.h.9F59AB6C6E104B18.idx b/.cache/clangd/index/astar.h.9F59AB6C6E104B18.idx new file mode 100644 index 0000000000000000000000000000000000000000..0602db185c192492b5823b86da2327f2efb2cdbe GIT binary patch literal 2332 zcmYjR3s_8996vM7>(1Qn)YQD2nP#TxG_k!Tn`e|#mS|bldL?rL!#s1TJbABD&(d*;rZneO-9|98*t{LlY&e!m+N86NIR01!Gga$!RJ z{8$zMz!kkI^XJX9*tGFCRU=|Ed4h_PETjW*1F+$B>Rg3+pxw7@1m=C}=z4E!j{Td?4?DyJ7W? z@I6O;H$QzmsnuB9JL6=^oANoYOz((~fpKLno&#$N%1_U@kT~2c^{%_2!?WVb@Qzi= zBV~!5U-pB4S{_v0IJTF4y*BGs>bsC!W$4qZH^*H*pT9)zcYp1RE$zETw={;#9#NAu zV7h$Ry{0KO(s3t_dAxfauRpV0A-{07PpNnFkG$4g{~H@aKTN$iG&u5wcAdi{@e@%* zWm$h{}`cYBvWKZ{o z7il+pcV>F!Y`Z>%7*sE89GUEvU(L_RxWsWPypbe&dheAh@n}a&b!v9gqql!0EKMYT ze|30#-l_-Z5{0GF)y~aP>cbOu9a7A?-@aR#r%qqrx*~Fy+XKg{q>4R5?+Wfz3|DrS z$7RjlSY|4BC@o8lk%bR)y7qkHpAE~m$M48K6P9&8-?{v|_YZ5YrT)=*aovINl?lDR z`C%p}W8KN3?LD3~KMDH^I@Pft^M?l#i`|H7PH!}NbcGS{B!a2cikt?!9B zl~F5e6|;`q5ojW$^@`7qR|4-!7r+bRU!wOc<1BxF~m^E)`Ql^wo8+(kgyO)+y)lZ@*&{G7U3(tk54dBt8fV%x$R*Z1XBnkw$0w^Se zuC&41XY07Wr2{owYX;Fh{iefhuA))i{i2B^t zWda~a4LUKM2-?^itlB!cWN@9w8WMbkVmxCI&lobOB$P5hkSrikp%~&KZ+86Ul57eD zqAIu~S410J#hBxQE!86`wviwRMaW^YbC_bNVQWwoj%>@AlPjpRl>YKT5_lk&^-N+t zQw>#wN(~4no+U}rXa1*w360lCphqq{ne3fREi|wVT00{S1=PQpfAm8=1+?fcTzRfS z+Tc2p$451IRAe`hK#C#+v4SMf$TA{E5e&;Ton;&Q_04O0N`W5eyo8cC(*~dK_bM%{ zxiYAg0=}qCf=3Xv!P{fqPc4s)mb|4vH?+;?@d?`CZ7?r>TFM3oJNFrU3+F9F0TU`s z%}v=y9GN7fSd^7M0FY3~653W+77V#X4A!$)3J9hpV1=;&P$o0`tth~>N8U8qtvIGS zVWqegCZQb2c{l?Jm2#!l#tEpAXw&} zDWK%qn^Jl!{kyD!l_B<(3aGd?wnEhqRdkot7}Z4kN&_`M_R(m9H2v%=Ezoki3<~Oe zx(uqDJ^p;2cv;uZcAph1{_19%WP2^s{gd+Q*u>Y03t+HH3& zVMzp72DoW-me#w~2~Q1WGD{t2!p$LXTH97{JP!oZdbYy&?h#CD*a~9>qu6Ho;>*WP zB5zu;R&QJ=@-~YVdt;p<*ep_9Al4^>&Emu`(&e03bHJ2&aVfs$4;bv0wR>#SDkld| Sqc`w0Lzc%Ie*j>#fBp|qTe9o` literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/main.c.16130F5469FBBF55.idx b/.cache/clangd/index/main.c.16130F5469FBBF55.idx new file mode 100644 index 0000000000000000000000000000000000000000..42ef43d454c58e0e4614b7002061820f31724d23 GIT binary patch literal 536 zcmWIYbaNA6VqkDi@vO*AElFfyU|yuW!}!8Hfhw7=$mr}pFN@lvrAo2b76d3{fM z-*k$VJifR<)hMC-aI=`tnFDH9QvB0O+RD#<>iW?#SL|GE!+R~g{{i!^SU^&PLzj^fsBgtb@o>Dc82WD=%TU?o&WC!%o0l`*5pIdEy zJPaHR4BQ-S9713MC<6w6!(UZDT*}|Z!yo{ZmSBqnXVzR)E*E^MEF-Q`O23~o<}=>Ob#+BSU79hZ40?JgBI~AHhI!AY~LpwH*z)b(~_SU&V1AB zSGT@F>YUA{T8*-^G>^qhoN>2W@1y9C^qeQBmX-=dFArSO@-y>d@r}FHwSQ0kEO?gp zdtX_9$gYwzyU$c_+?@6^@^;UySB0w!_8K0&TFZEN-uAxY%G@M*pnn+7X}kCYwzTjt z@Bux?$->D8CO|S^P?VZhEX2yd5c6n$`}=2?7?@%Xf0CD~+Q|UjWF>252vhXz ze1g%|Voi0Run3C?A52(Xu5Ir7c~<&tJX|guF1#>d9UxEHiIRDA0}L;e#m&^_50aCAIQqeBDq;jRt<^gtKth! zPcvI<*Snp3mdnb+CB!1c4Ks;{ONK{A7{OEJQAOg}@Yo>nYG(7(1r@E|pC!n|hXm*@H z9NbR^rt>v5-keq%J&7GTy#&^zNp+?|~Lb z@<_s+Q~;#rZKT9U{DWQzcCaY<2T2#^i};)*${ClB&ADDbde=vyrQe=hHw zLnd3f*t!-z_%o}bwtv}7l{F7=~+AQU(r+bxeD9`gytE~B`B0p!k z$4RTLiMRQ`F!{}taVW0LO_B$i%WzKH#V4?(g@=I^!~+6mMixds22Mss1{Nj;hN9H8 pVsVf#R2`!vL>?pr0!67gi6FYTD7ly$#9*F0eT9f+>$L9-3;?)KK5GB~ literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target diff --git a/README.md b/README.md new file mode 100644 index 0000000..dd0c262 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Project + +This is a classic A* implementation written in c. +The project is split into: +- `frontend`: An interactive raylib visualization +- `backend`: The independent algorithm (can be used elsewhere) + +## Background + +I wrote this as a prototype and copied it almost 1 to 1 into my [other projects](https://git.magnusku.de/Magnus/topdown_game) code. diff --git a/src/astar.c b/src/astar.c index 781afc5..bf3c69f 100644 --- a/src/astar.c +++ b/src/astar.c @@ -5,10 +5,19 @@ #include "../include/astar.h" +bool is_collider(int i) { + if (i == -1 || i == 10) { + return false; + } + else { + return true; + } +} + void reset_field(afield_t *field, int** map) { for (int r = 0; r < field->rows; r++) { for (int c = 0; c < field->columns; c++) { - bool is_obstacle = map[r][c] != -1 ? true : false; + bool is_obstacle = is_collider(map[r][c]); field->map[r][c] = (anode_t){ .parent = {-1, -1}, diff --git a/target b/target deleted file mode 100755 index 0b5e72d1d3c697449f2a3e80ec5cd6512e538bf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21520 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