From 2efe03145f6089ff402e057e151556fbfb2d6326 Mon Sep 17 00:00:00 2001 From: Daniel Legt Date: Thu, 26 Feb 2026 23:28:08 +0200 Subject: [PATCH] + README.md --- .gitignore | 1 - README.md | 76 ++++++++++++++++++++++++++++++++++++ docs/images/maze.png | Bin 0 -> 2586 bytes docs/images/maze_solved.png | Bin 0 -> 2962 bytes 4 files changed, 76 insertions(+), 1 deletion(-) delete mode 100644 .gitignore create mode 100644 README.md create mode 100644 docs/images/maze.png create mode 100644 docs/images/maze_solved.png diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 95e60b8..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -maze.png \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff26ee9 --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# go-maze + +Tiny Go maze library I built for fun. + +It generates random mazes, can solve them, and can render PNGs. + +## What it does + +- Generate a maze grid (`0 = wall`, `1 = walkable`) +- Solve a maze (top entrance -> bottom exit) +- Render mazes as images +- Optionally highlight the solution path + +## Upcoming Features + +- [ ] Add the posibiltiy for entrance/exit to be on the left/right walls +- [ ] Add the posiblity of choice when it comes to which position to put the entrance or the exit +- [ ] Add complex maze shapes, such as L, U, etc... + +## Example images + +Normal maze: + +![Normal maze](docs/images/maze.png) + +Maze with solution path: + +![Solved maze](docs/images/maze_solved.png) + +## Install + +```bash +go get tea.chunkbyte.com/kato/go-maze@latest +``` + +If this is private on your Gitea, set: + +```bash +go env -w GOPRIVATE=tea.chunkbyte.com # You need to do this +git config --global url."ssh://git@tea.chunkbyte.com:2422/".insteadOf "https://tea.chunkbyte.com/" # Optional +``` + +## Use in code + +```go +package main + +import ( + "log" + + maze "tea.chunkbyte.com/kato/go-maze/maze" +) + +func main() { + grid, err := maze.GenerateWithSeed(41, 41, 42) + if err != nil { + log.Fatal(err) + } + + opts := maze.DefaultRenderOptions() + opts.Scale = 8 + opts.HighlightPath = true + + if err := maze.SavePNG(grid, "maze.png", opts); err != nil { + log.Fatal(err) + } +} +``` + +## Run the web example + +```bash +go run ./examples/web +``` + +Then open `http://localhost:8080`. \ No newline at end of file diff --git a/docs/images/maze.png b/docs/images/maze.png new file mode 100644 index 0000000000000000000000000000000000000000..a364681bc63a77dcb28b1768e77e42354425da56 GIT binary patch literal 2586 zcmZ8jd05hU9=2;IEw{5#_N4ktXCJTUJz&2&gD6H&>iba5s`%Tyv__sLx$E7Z~O z3b3ijkfXs1&A@FmEmF%1Nkyi}%Fq}PL}0?fdTja4AHRQo&*ynR$NPRh@3-J!^nP2L zO*U3mR<@B5VX;CCKIoO-w_Wk9@`iF=G=O=L zzwE+|j%(ChxO`vqu{v{dGc+!qUg(n_2VNKI z56^HlrotTW*r^-Dcz2*L5bk5Wh9Cj-C3E4nDhRm$2pZ)cWYox9RJ=(}t|pwFAKI*Fz$1rR89t*a z3j<%IoKoYI97Ta{cKDqzC2iPw_8W%~JS${M%B#Hv;Ie%**URNY_YqiiW$4ca?s--w z^DZfK3t%`T^KkyH(b0DCPs2h%3XiHu@v3a-lea0B1STqQ_q0W(lu~M0*{)lc&ZO@? z%=qGt`Z*$IUb4Qmo@H&R9CbFE zw?$RlNY+JB&kGJQ`0TsaPCk0tZ3z}zHKXCihHOwfkA`~{>5x@S+T3zuZ9Kn<1(3~C z(Lkr)9wkxpQbR*R&iMD~at_0)sOE`N?)F*&s@Z|Im3D(~5|GddArwW|isAB&{ZZOe z?5hC9CI*ahUy37-J0LflZ&UM1l|-rrzH3I(%rK6Fw~bh`A>Mw)QL$uXH|_h!-E}?P zr6wZPS$9y689Qfywj}^&-CI8m4%*{Y<1DS?xefELq?Er?xVLIGQ5#6e|0}!yd9GLM zWiZX3kR}j}&ILIdPmm5Mj%KljPXehMF$c0%h1wi*NL!C_3+n-uXil*%vy`drI%B-V zvPLR~|7(KpP(P)7HBRXD#yx24!o4%s`@U}JGW#U>QLHkCk}iKVW#0e=8KT;J|2SwZK5ePBvD&UT9eis^?HyM?A6)~ zHqftI%PrR8DmbRVrH&x;EF201XY{Bxc{-!zo&Y+{I0zTnw%pOxe)lsUb+AbYmOn(o zRKfuz>kr~;vweD~6Ep9{*4bT#cH#kUEp=IQU$NU(L9zRp;N5+_bC9-oC?8P@VO{M&nM zRq}c!aqtJ{Xb9V_-!f;`bb6~3sc>`aAx7q;wDZ!VVh^qe>HTW?J)tWgC6|U7#)>4J zKS;e|d|S0ax*WYGC_k9Ogj29dz?}8dkdcI_=Lwx}@u9y-WC(qctI)J#%xw*QW9|#% z22^=29i#j9mXFJ6;(2xiBOH8MXqi1wp@Wo zrrP_K?>|xbzgCdZ-1{MC*`aroN&+?=Y%l_yAVAjSkoA|uhq2Y-;_;i6AC5x{ef*@g zNidIz^njJy7pW*|6dgvc>*g39be5Y6wNRM?u)g%A&&{K`7hD~=8``7iTS=JvH}H)YxsuK8wu6YJIc*G z;pAa^FBg=S$rf2^FSa&N+Y?kf##e@$JxU5L9;-sbcGa^cA5dN9>@DGJae@pKe4umV zUa$SBT270n(^P!hU^vu13fP5cfWy6=QhMDtn(LoCK|-7(yZHD>cHC4;LuSC?nx_(-dmQtZu(cEj!6K#wKP2Eu~z>3M_w6r-3rcLi(^ wlASm?NzrueXl{lOnUuJ?J~`+4sBex5h)MA(sa zYn|5G*x0N)cJyF`jmt*Hv-!^M=}ezBE3dRIEw$yC7Z)ViguSaJMv=_k#^LDBZ8xKj{*!y- zt?IYQploxdak4zfbxGEoGS;auv$D+2L4|oiqHlej%CI$<#j^$hf&nH85&eGz9X#`o zyl49hkdmHxrV(LV9c9WQjnYG)BL4-FoGzmH_6g^(>Ejdy829HrmXH@$JA2wM-A5xv zlE%FX(`m}t3L_(!$9Nto7$W5zO6F!J=Nys(Y>=QgCp5 zAgDG|QyMo<)`I2L}=POMQE`MF@_3I|#Ez`9mK&jI2 zr<%G^MpITA3O<$-_DLvHnS#TOv>PK(@mh>*U^$Pl{SL&j;IFBE#ldq83KYwsdm7`vO^vzu-Wr!tBx9cX&; zSd^HMrybPB$K>tc4cuP4P21c^;C-X__nL|hDzOeotO;-rsKAeUS5XB!sLak?y>}eD zT(I@CJ2PEXie_}_rD^8EX=rxlJ0t*>g|j2g_n?JPpLZVyN9vCpJ}lPbzHri2BZ*&D z2P4tH3+MkF1nL?xQoAL^;k;MnC>a(hdmgF>)e>?02b((2)#(7xvPh|*fVb(E#|L??ejDOJIp`tXFj8I4L%4pJ2Fs@Rl7DuFGfGodIi zfU}~>3wAmARl(Uao|$Yay&+Z(LlGAkSZ8&WQ;FMGfVN|kWW-_U4*cj3ZAQAJG?P?a zjID^+tBXkOyXra0SXTgOrbYPZz27kE^o|on8L2{;s!}9Po9L{m>dzpu4?Hx;8{zfU z4qSiYu!_1l1wlZ?=5=Y zPGHkL6Gm&QlBxcx?R%2JYf8Zh1d{_GJ+DqbQqs71bXg7YXX$AqKbri2(hq-Wpul~~ z@P5&AK)y3+|&?Vb!(pW1)O;I_!YXa0a`>XfqH}0HuA4*=G?fTbfv3N5l zjB{3TycCVdO4alQ@|!yhF)=nEY{>TOpKP#A_;@!4Ugmh|MnE_J_WTze(ElRysf2qI zaX5AB_e4*H(;p-7Bf^O406Em?!Idd*J~cVtErKBZyjT&vdwd5mvJ?LTDB)^nB(qvA zjtNXH-S{q_-jN?F!@@aLD=VaP*jQ2T*2M(I+>mwd-BD$Zj);5+NbaOx{Q2lq?v|4r z{Vlpj`DkmyJy&}(NLQS9-r6ji!Ql*#@+P|KNBE-v5^iotI8ZzlxZ2<@h)Dtr*!u0) z?Fpfm)1RRNi`j6;V8j*q1+|iZUjSy!CcJc&NUSZsyl9`>f0AhRO&PxqY{Df2ySTub>G= zy6j0cJJs$bpU;Mmb=qdnRd;8cwJytef}EcC=G9i&f&tEnD*GCdqKg27Pcb&1N`<1BrHj1-lr`kD}vW_Ma8q{U$$r>yNo@WLy40(p}pFwYyn%Y0Hgs{yv4XrjPN zDB(nH_IdL3tk8IhvdiIq)y6)3L(b`sYstd+P+EhW<9@+pcqSOa%`Of@%LyNpx?<11 z)7F43>T%xecM(_6v(;H`FC*E#;bt}38^nbRSo3m@^-|kTxRf~3tj3x-^x zx|`oOdntWJ_^GT~3Eny@3tnb`v|S9lqK$4;PezMi%me2}S!C0x^V&{rR}oH5(nxAC zn+9g?0a_NM-w>kASFhVm6S5Vgn)ST% z7b8P39mDN<;yPQ!IzZE+EtFh3`Jy=TKf$7w$3-(r?<#sY{O+}xcQeMrTEK#P`;^cU zCLR+?M!u)me#N zQtq({zVMcdpUh4Owsv!>N$KpKd7UC^dDS_`zR)il<~-FALVuAyeEkzZMHW&F;=Pt_ zub>7q6$8gZKIgC9##bVF+h)@4POr$ewa!Yz*JjjLvtWHi{mvs_-sDYACx@?Inodjer)1R`Wh@ru2*k{|4!D)_{AnrO$Y=^ZC z{&4qE$0!hG$k5pWM1>KPH4l?( zwZG(?)4X z9EO$Rqz3DEQ)~A$OmiGNTZjkk@XlsaB&{hMR=UzP3tpW^^q-N+3 pK?@4MBcGiD6l6qMp4UrD{^wq6FJmaKmJgd_hr$j%+JE}W{{ZU8x6%Lr literal 0 HcmV?d00001