From a9befc3b37f1743ca1c0b4ed2989261781d86bb1 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 3 Jan 2026 13:59:08 -0800 Subject: [PATCH] Improved maze generation and timer result --- images/apple/PLEIADES-2.20.po | Bin 33553920 -> 33553920 bytes src/samplesrc/maze.pla | 42 +++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/images/apple/PLEIADES-2.20.po b/images/apple/PLEIADES-2.20.po index 5ee7a55734a8db86e54195fbf65cf05a4ea18e27..d70433b7c80be89081827ba092a52361f37c7823 100644 GIT binary patch delta 2625 zcmaLXdwh*`0LO9XY&NBtOMYgFlj}B5+Ge?Imf0}3QX3mziM5@y%nm!pgqTuamkOmk zLQ={lj1s3CN>^Q#3YAj2qf)L>`hBNYmw!61*XRBEJ%X4|kR zGO|^5*O>WBBNx^THm27;GqGkgJ-up1dX>lK4X0N{3|iA5BC(d{)~R)%R?T2)_(*kh ztY`kR9eH#j>C~nZMJJk09XjXHIiF5lIv3E1p;M1eES>sv8qjG-rxBeC=``N#n89AR zptU#79kMK1K2@XWio&rkC5Ir-@s+Ak#!d4k!wS+__n%eUnf{QL$f#K3}G< z<{&>*R1peqvKPJXz8sUS1>)SSY!l`7$T3UY{n;ibY?s>QjkY^#vU{qx!MQb&Yg)Uj za_wDHbB&2??@Ntwx8<1l@X=i3@whuPOl0GKw)|_y?4sh);X{2)XOG*apGl1?_Lr6A z2g)k_3CWJnUmmKMm>8qicDM91&D{}QO>OsJf78|-oo8aho%@@e5mA%;6@iYau6Lm6 z>&6$DHu0KYR8mr!(kUV3+}%1;76^h!Mm{qKLSjC?-k>KXC&winx&|C2k@{6J^90qMQg2V~KG@1ra1d z#CW2Tm_Xc2Oe7`|lZji1Da2HwikL>+O58?FCvGS1AV|z0W)icA*~Fd1UBunQ9AYjp zkGO}pmzYo7N8C>=AY5W0@c^-iSWGM-9we3$4-w0Vhlxjs<;0`JW5fz#C9#TFO*~Gl zA=VP>h-zXzv4MDkc#_yiJVk6GHWOjuY2q2;S>ie3d14E(mDonSK)gt7Ctf06CSD<4 zC0-+5Cw35T5N{H15pNUk5bqK@iT8;2iCx48#D~O3#BO2_v6uLm_=NbB*hhRud`|2q zz97CN4iH}vUlZRD-xA*u-xEI&2Z=+(Vd6*PC*o(~2=NQ?D{+)KMjR(j5GRRK#BaoD z;tcUS@dt5sHav6Sv3YF~wn$rTTa+!@R>yXp?R;BZ+Xc25TRmH>t-h^+t)Z=v?Lu2) zo3S;q#o3zL;%yh%n%OS4HMg~}`D~ZiTH0FKTHD&#+S=OL5^RaKBwKr%W4qMW!FHJ~ z*_L8UwRQAtMVcpSam;`I{pU71mgccsE;@qNC!FE)rL#FJv9cuH&%n?+bWEuIn2is!`h zVvE=+wuu+Si(*ctgA?-V$$%cf`A5r+81iFLsF!#E0S|v0LmB zd&S4%6Y;6oCq5IOi~ZsY@ufH*z7k)HZ^XCaJMq2vK^zo^#9{HH_(}XMj)-5xui~gU eCXR~};-okweiNs~8S%UL!?Uf?v9q4Tb^ZigITZ*1 delta 2425 zcmY+^dwfrI9LI6LpRtiyZr?^tKXMrkn~|8U%r;|k$!)ylzPZjOCKR@kx7=fK+;Xej z@3)_ndy*o`y_;LfCAmke*7v=?>O3B==lAn?oX>fj|GqhS`5`&B4f6s5Dz6JDo4YVz zPQkD_x=7xrf@xfI_JrtckIn0k&Mw?xb*aGcLfQ=~bg59mFxG#2U0{eOck!WibOPuU zp;MGjAe|sO#po2L^8}p|bb{%Wq!U8tNjjzIl%`XLPFXtTwmGJw*FU(9$@R>RGNH>N zjn^LYD_x;^7eS^xF=CL+-77HbmS?lC6ctq@}p+<^%uboq{0Q`kMw#8mMY zi8Ix_ZuJBcuboggJJA$%C&!xwZmoFJ)Ni+sdjos->NChUe2ANnWKc3OBh^>S7ZvO) zc-$p-yye_oNhZjhnq*1^HPvcuUzEEw$+UOF;!SaXOmpM$xH+2(2l@N8Fx5QXhzNIT zvWe2UJK2Pm>ywtA-aaj>S$eO2!@?sSUs^`i&{6K1WD{1QRU8s~q_jxr(7bkC`(osP ztQrMBwx8~4X)1>G%^d0*>5KLKch8raIU*w~(--N#m25%++~RFaf`4`!Qz_6r*vYJR z$ETRK?&%a0?s__#s{Rd~ONTMzgMbsne6VDS3h!=>4L?a@aXiUTqvBZnSOGFbQ zj%Z566A45j(TqqUniDOEWTGYUGSP}?O|&7}60Z>Li1tJWq9f6XNFh2CT?i0eiC2kk zM0cVG(Ua&!^d|ZcsYDvlm*_|ICk7A$i9tjBM`)3}PmcOT16a zB4!gVF^8B-%p>L#3y2Shg~TFaF|mYLN_i?XNm8LABZ1`pNOA{bHsV#0&$VJMEpYhN?ay> zBd!oviEG4l;&PvQabkob#uL_8+)h`)({i2OQY{9mYwh-Hswoikt7NNed(KwHR@GL`R^1kEt6{5Yt7UU+wQY555w=KMU0al`o@W>8dy38v z{@<-Rz0Cdk9?SEhfp|eQ6pci*Xe?qxtawqpB$|jg(Nx5X1d%A3i6qfnv=GUnrFdDi z60JoW(N?@7+KKj}gXkzai4@UUbP*6;#jB#5=q`GQo}!oNE&7O5ktX_zexkn^AO?y- zB3%p?86r~*5wD4%VwlJh!^P`jgcvDCi8sWXVzd||#)@o_Bi<5ki*e!|Fys-P%ILQ#S*bpd?-E=AB$yT zxmY1qidAB@SR>Yobz;5PAU29kVzbyHwu)`SFSd(M#18SP_)P2+yTop>N9+~*#D4L) zI3T_d2gR4-koZb`Ee?w#;u~>P924J)@5FI&LYx$*#A$IxoE6`TAH9o diff --git a/src/samplesrc/maze.pla b/src/samplesrc/maze.pla index 28f30b34..fb17a0ea 100644 --- a/src/samplesrc/maze.pla +++ b/src/samplesrc/maze.pla @@ -1,6 +1,7 @@ include "inc/cmdsys.plh" include "inc/conio.plh" include "inc/args.plh" +include "inc/int32.plh" include "inc/hgrlib.plh" include "inc/hgrtile.plh" sysflags reshgr1 // Reserve HGR page 1 @@ -33,6 +34,7 @@ word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0 word arg, seed, moveCnt byte entry, exit, solved +res[4] tics def cellSetFlags(x, y, flags)#0 maze.[y, x] = maze.[y, x] | flags @@ -112,7 +114,7 @@ def branchNew(x, y) return DIR_UP fin fin - dir = DIR_RIGHT + dir = DIR_DOWN cnt++ break is DIR_LEFT @@ -122,7 +124,7 @@ def branchNew(x, y) return DIR_LEFT fin fin - dir = DIR_DOWN + dir = DIR_RIGHT cnt++ break is DIR_DOWN @@ -152,9 +154,10 @@ end def cellSolve(x, y)#0 byte flags, moveDir, searchCnt - word traceStart, traceEnd, traceBack + word traceStart, traceEnd, traceLast, traceBack traceStart = heapmark + traceLast = traceStart searchCnt = 0 while !(maze.[y, x] & CELL_SOLVED) if searchCnt == 0 @@ -173,7 +176,7 @@ def cellSolve(x, y)#0 y-- else searchCnt++ - moveDir = DIR_RIGHT + moveDir = DIR_DOWN fin break is DIR_LEFT @@ -182,7 +185,7 @@ def cellSolve(x, y)#0 x-- else searchCnt++ - moveDir = DIR_DOWN + moveDir = DIR_RIGHT fin break is DIR_DOWN @@ -212,14 +215,14 @@ def cellSolve(x, y)#0 wend if searchCnt > 3 // - // Dead end - back up and try new branch + // Dead end - restart and try new branch // moveDir = 0 - traceBack = traceEnd + 2 + traceBack = traceLast repeat - traceBack = traceBack - 2 x = traceBack->0 y = traceBack->1 + traceBack = traceBack + 2 moveDir = branchNew(x, y) until moveDir or traceBack == traceStart if not moveDir @@ -229,6 +232,7 @@ def cellSolve(x, y)#0 heaprelease(traceStart) return fin + traceLast = traceBack fin loop // @@ -245,12 +249,9 @@ end def mazeGen#0 byte x, y - //cellSetFlags(MAZE_WIDTH-1, exit, CELL_SOLVED) - //cellSolve(0, entry) - cellSetFlags(0, entry, CELL_SOLVED) - cellSolve(MAZE_WIDTH-1, exit) - //for x = 0 to MAZE_WIDTH-1 - for x = MAZE_WIDTH-1 downto 0 + cellSetFlags(MAZE_WIDTH-1, exit, CELL_SOLVED) + cellSolve(0, entry) + for x = 0 to MAZE_WIDTH-1 for y = 0 to MAZE_HEIGHT-1 if !(maze.[y, x] & CELL_SOLVED) cellSolve(x, y) @@ -293,8 +294,12 @@ def mazePlay cellSetFlags(0, entry, WALL_LEFT) // Block off entry x = 0 y = entry + zero32 while TRUE tileXorDraw(x, y, @mazeTileSet + PLAYER) + while not conio:keypressed() + addi16(1) + loop key = toupper(conio:getkey() & $7F) tileXorDraw(x, y, @mazeTileSet + PLAYER) when key @@ -369,6 +374,7 @@ else getc fin repeat + moveCnt = 0 seed = *rndnum conio:textmode(40) hgrMode(hgrPage1) @@ -377,12 +383,16 @@ repeat tileFromText(0, @mazeTileSet) mazeGen solved = mazePlay + store32(@tics) hgrMode(hgrOff) if solved puts("Solved!\n") fin - puts("Seed = "); puti(seed); putln - puts("Moves = "); puti(moveCnt); putln + puts("Seed = "); puti(seed); putln + puts("Moves = "); puti(moveCnt); putln + puts("Tics = "); puti32(@tics); putln + load32(@tics); divi16(1104); store32(@tics) + puts("Seconds = "); puti32(@tics); putln puts("Play again? (Y/N):")) until toupper(conio:getkey()) == 'N' conio:textmode(0)