milions of maze's
but try to solve maze 0 6x6x6 first
HAVE FUN
Code: Select all
'' bluatigro 5 feb 2018
'' Qbe a 3D maze
#include "_text.bas"
#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB '' Scan code constants are stored in the FB namespace in lang FB
#endif
DIM shared AS INTEGER winx, winy, bitdepth , nu
SCREENINFO winx , winy , bitdepth
SCREENRES winx , winy , 32 , 2 , FB.GFX_FULLSCREEN
dim shared as ulong upkl,downkl,leftkl,rightkl,backkl,frontkl
upkl =rgb(255,0,0)
leftkl =rgb(0,255,0)
backkl =rgb(255,255,0)
frontkl=rgb(0,0,255)
rightkl=rgb(255,0,255)
downkl =rgb(0,255,255)
const wMaze = 6
const hMaze = 6
const dMaze = 6
function index(x as integer,y as integer,z as integer)as integer
return x + y * (wMaze+1) + z * (wMaze+1) * (hMaze+1)
end function
dim shared as integer upno,downno,leftno,rightno,backno,frontno
upno = index( 0 , 1 , 0 )
downno = index( 0 , -1 , 0 )
leftno = index( -1 , 0 , 0 )
rightno = index( 1 , 0 , 0 )
backno = index( 0 , 0 , -1 )
frontno = index( 0 , 0 , 1 )
dim shared as integer movetel
'' make array and fill
DIM shared as string maze( index(wMaze, hMaze , dMaze) )
FOR x as integer = 0 TO wMaze
FOR y as integer = 0 TO hMaze
for z as integer = 0 to dMaze
maze( index(x , y , z) ) = "#"
next z
NEXT y
NEXT x
function wal( x as integer , y as integer , z as integer ) as integer
return maze( index( x , y , z ) ) = "#"
end function
sub box( x1 as integer , y1 as integer _
, x2 as integer , y2 as integer , kl as ulong )
line ( x1 , y1 ) - ( x2 , y2 ) , kl , bf
end sub
sub tri( x1 as double , y1 as double _
, x2 as double , y2 as double _
, x3 as double , y3 as double , kl as ulong )
dim as integer i , a , b
if y1 = y2 then y1 = y1 - 1e-10
if y2 = y3 then y3 = y3 + 1e-10
if y1 > y3 then
swap y1 , y3
swap x1 , x3
end if
if y1 > y2 then
swap y1 , y2
swap x1 , x2
end if
if y2 > y3 then
swap y2 , y3
swap x2 , x3
end if
for i = y1 to y3
a = x1 + ( x3 - x1 ) * (i-y1) / ( y3 - y1 )
if i < y2 then
b = x1 + ( x2 - x1 ) * (i-y1) / ( y2 - y1 )
else
b = x2 + ( x3 - x2 ) * (i-y2) / ( y3 - y2 )
end if
line ( a , i ) - ( b , i ) , kl
next i
end sub
sub quad( x1 as double , y1 as double _
, x2 as double , y2 as double _
, x3 as double , y3 as double _
, x4 as double , y4 as double ,kl as ulong )
x1=x1*winx
y1=y1*winy
x2=x2*winx
y2=y2*winy
x3=x3*winx
y3=y3*winy
x4=x4*winx
y4=y4*winy
tri x1 , y1 , x2 , y2 , x3 , y3 , kl
tri x1 , y1 , x3 , y3 , x4 , y4 , kl
end sub
sub drawMaze
if maze( nu + upno ) = "#" then
tri 0,0 , winx/4,0 , winx/4,winy/4 , upkl
box winx/4,0 , winx*3/4,winy/4 , upkl
tri winx,0 , winx*3/4,0 , winx*3/4,winy/4 , upkl
else
tri 0,0 , winx/4,0 , winx/4,winy/4 , leftkl
box winx/4,0 , winx*3/4,winy/4 , frontkl
tri winx,0 , winx*3/4,0 , winx*3/4,winy/4 , rightkl
end if
if maze( nu + rightno ) = "#" then
tri winx,0 , winx,winy/4 , winx*3/4,winy/4 , rightkl
box winx,winy/4 , winx*3/4,winy*3/4 , rightkl
tri winx,winy , winx,winy*3/4 , winx*3/4,winy*3/4 , rightkl
else
tri winx,0 , winx,winy/4 , winx*3/4,winy/4 , upkl
box winx,winy/4 , winx*3/4,winy*3/4 , frontkl
tri winx,winy , winx,winy*3/4 , winx*3/4,winy*3/4 , downkl
end if
if maze( nu + downno ) = "#" then
tri 0,winy , winx/4,winy , winx/4,winy*3/4 , downkl
box winx/4,winy*3/4 , winx*3/4,winy , downkl
tri winx,winy , winx*3/4,winy , winx*3/4,winy*3/4 , downkl
else
tri 0,winy , winx/4,winy , winx/4,winy*3/4 , leftkl
box winx/4,winy*3/4 , winx*3/4,winy , frontkl
tri winx,winy , winx*3/4,winy , winx*3/4,winy*3/4 , rightkl
end if
if maze( nu + leftno ) = "#" then
tri 0,0 , 0,winy/4 , winx/4,winy/4 , leftkl
box 0,winy/4 , winx/4,winy*3/4 , leftkl
tri 0,winy*3/4 , winx/4,winy*3/4 , 0,winy , leftkl
else
tri 0,0 , 0,winy/4 , winx/4,winy/4 , upkl
box 0,winy/4 , winx/4,winy*3/4 , frontkl
tri 0,winy*3/4 , winx/4,winy*3/4 , 0,winy , downkl
end if
if maze( nu + frontno ) <> "#" then
quad 1/4,1/4 , 3/4,1/4 , 5/8,3/8 , 3/8,3/8 , upkl
quad 3/4,1/4 , 3/4,3/4 , 5/8,5/8 , 5/8,3/8 , rightkl
quad 3/4,3/4 , 1/4,3/4 , 3/8,5/8 , 5/8,5/8 , downkl
quad 1/4,3/4 , 1/4,1/4 , 3/8,3/8 , 3/8,5/8 , leftkl
box winx*3/8,winy*3/8 , winx*5/8,winy*5/8 , 0
else
box winx/4,winy/4 , winx*3/4,winy*3/4 , frontkl
end if
end sub
sub createMaze()
'' initial start location
dim as integer currentx = INT(RND * (wMaze - 1))
dim as integer currenty = INT(RND * (hMaze - 1))
dim as integer currentz = int(rnd * (dMaze - 1))
'' value must be odd
IF currentx MOD 2 = 0 THEN currentx = currentx + 1
IF currenty MOD 2 = 0 THEN currenty = currenty + 1
if currentz mod 2 = 0 then currentz = currentz + 1
maze(index(currentx, currenty,currentz)) = " "
'' generate maze
dim as integer done,oldx,oldy,oldz
done = 0
DO WHILE done = 0
FOR i as integer = 0 TO 99
oldx = currentx
oldy = currenty
oldz = currentz
'' move in random direction
SELECT CASE INT(RND * 6)
CASE 0
IF currentx + 2 < wMaze THEN currentx = currentx + 2
CASE 1
IF currenty + 2 < hMaze THEN currenty = currenty + 2
CASE 2
IF currentx - 2 > 0 THEN currentx = currentx - 2
CASE 3
IF currenty - 2 > 0 THEN currenty = currenty - 2
case 4
if currentz + 2 < dMaze then currentz += 2
case 5
if currentz - 2 > 0 then currentz -= 2
END SELECT
'' if cell is unvisited then connect it
IF maze(index(currentx, currenty, currentz)) = "#" THEN
maze(index(currentx, currenty,currentz)) = " "
maze(index(INT((currentx + oldx) / 2) _
, int((currenty + oldy) / 2) _
, int((currentz + oldz) / 2) ) ) = " "
END If
NEXT i
'' check if all cells are visited
done = 1
FOR x as integer = 1 TO wMaze - 1 STEP 2
FOR y as integer = 1 TO hMaze - 1 STEP 2
for z as integer = 1 to dMaze - 1 step 2
IF maze( index( x , y , z ) ) = "#" THEN done = 0
next z
NEXT y
NEXT x
LOOP
end sub
sub turnup
dim as integer hno = frontno
dim as ulong hkl = frontkl
frontno = upno
frontkl = upkl
upno = backno
upkl = backkl
backno = downno
backkl = downkl
downno = hno
downkl = hkl
end sub
sub turndown
dim as integer hno = frontno
frontno = downno
downno = backno
backno = upno
upno = hno
dim as ulong hkl = frontkl
frontkl = downkl
downkl = backkl
backkl = upkl
upkl = hkl
end sub
sub turnright
dim as integer hno = frontno
frontno = rightno
rightno = backno
backno = leftno
leftno = hno
dim as ulong hkl = frontkl
frontkl = rightkl
rightkl = backkl
backkl = leftkl
leftkl = hkl
end sub
sub turnleft
dim as integer hno = frontno
frontno = leftno
leftno = backno
backno = rightno
rightno = hno
dim as ulong hkl = frontkl
frontkl = leftkl
leftkl = backkl
backkl = rightkl
rightkl = hkl
end sub
dim as string in
print "bluatigro presents :"
print "Qbe , a 3D maze ."
print "Try to reats chamber "+str(wMaze-1)+" "+str(hMaze-1)+" "+str(dMaze-1)
print "instructions :"
print "use a w d x to rotate ."
print "use s to move ."
print "use q to quit ."
input "Whitch maze [ 0 - 1000000 ]" ; in
randomize cint( val( in ) )
createMaze()
dim as integer x = 1 , y = 1 , z = 1 , zetten
nu = index( 1 , 1 , 1 )
do
cls
drawMaze
text winx / 2 , winy / 2 - 100 , "x " + str( x ) , 10 , rgb( 255 , 255 , 255 )
text winx / 2 , winy / 2 , "y " + str( y ) , 10 , rgb( 255 , 255 , 255 )
text winx / 2 , winy / 2 + 100 , "z " + str( z ) , 10 , rgb( 255 , 255 , 255 )
in = ""
while in = ""
in = inkey
wend
select case in
case "w"
turnup
case "a"
turnleft
case "x"
turndown
case "d"
turnright
case "s"
if maze( nu + frontno ) <> "#" then
nu += frontno
zetten += 1
select case frontno
case index( -1 , 0 , 0 )
x -= 1
case index( 1 , 0 , 0 )
x += 1
case index( 0 , -1 , 0 )
y -= 1
case index( 0 , 1 , 0 )
y += 1
case index( 0 , 0 , -1 )
z -= 1
case index( 0 , 0 , 1 )
z += 1
case else
end select
end if
case else
end select
loop until ( x = wMaze - 1 and y = hMaze - 1 and z = dMaze - 1 ) or in = "q"
drawMaze
text winx / 2 , winy / 2 , "game over" , 20 , rgb( 255 , 255 , 255 )
sleep
Code: Select all
dim shared as integer letterpart( 40 , 7 )
dim as integer j , k
const as string letters = "abcdefghijklmnopqrstuvwxyz0123456789"
dim as string q
for i as byte = 1 to len( letters )
for j = 0 to 7
read q
for k = 0 to 7
if mid( q , k + 1 , 1 ) = "1" then
letterpart( i , j ) = letterpart( i , j ) or 2 ^ k
end if
next k
next j
next i
''a
data "...1...."
data "..111..."
data ".1...1.."
data "1.....1."
data "1111111."
data "1.....1."
data "1.....1."
data "1.....1."
''b
data "1111...."
data "1...1..."
data "1....1.."
data "1....1.."
data "111111.."
data "1.....1."
data "1.....1."
data "111111.."
''c
data "..111..."
data ".1...1.."
data "1.....1."
data "1......."
data "1......."
data "1.....1."
data ".1...1.."
data "..111..."
''d
data "11111..."
data "1....1.."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1....1.."
data "11111..."
''e
data "1111111."
data "1.....1."
data "1......."
data "1......."
data "111111.."
data "1......."
data "1.....1."
data "1111111."
''f
data "1111111."
data "1.....1."
data "1......."
data "1......."
data "111111.."
data "1......."
data "1......."
data "1......."
''g
data "..111..."
data ".1...1.."
data "1.....1."
data "1......."
data "1...111."
data "1.....1."
data ".1...1.."
data "..111..."
''h
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1111111."
data "1.....1."
data "1.....1."
data "1.....1."
''i
data "..111..."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "..111..."
''j
data "..111..."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "1..1...."
data "1..1...."
data ".11...."
''k
data "1......."
data "1.....1."
data "1....1.."
data "1...1..."
data "1111...."
data "1...1..."
data "1....1.."
data "1.....1."
''l
data "1......."
data "1......."
data "1......."
data "1......."
data "1......."
data "1......."
data "1......."
data "1111111."
''m
data "1.....1."
data "11...11."
data "1.1.1.1."
data "1..1..1."
data "1..1..1."
data "1.....1."
data "1.....1."
data "1.....1."
''n
data "1.....1."
data "11....1."
data "1.1...1."
data "1..1..1."
data "1..1..1."
data "1...1.1."
data "1....11."
data "1.....1."
''o
data "..111..."
data ".1...1.."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data ".1...1.."
data "..111..."
''p
data "11111..."
data "1....1.."
data "1.....1."
data "1....1.."
data "11111..."
data "1.....,."
data "1......."
data "1......."
''q
data "..111..."
data ".1...1.."
data "1.....1."
data "1.....1."
data "1..1..1."
data "1...1.1."
data ".1...1.."
data "..111.1."
''r
data "11111..."
data "1....1.."
data "1.....1."
data "1....1.."
data "111111.."
data "1...1..."
data "1....1.."
data "1.....1."
''s
data "..111..."
data ".1...1.."
data "1.....1."
data "1......."
data ".11111.."
data "......1."
data "1.....1."
data ".11111.."
''t
data "1111111."
data "1..1..1."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "...1...."
data "..111..."
''u
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data ".11111.."
''v
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data ".1...1.."
data "..1.1..."
data "...1...."
''w
data "1.....1."
data "1.....1."
data "1.....1."
data "1.....1."
data "1..1..1."
data "1.1.1.1."
data "11...11."
data "1.....1."
''x
data "1.....1."
data ".1...1.."
data "..1.1.."
data "...1...."
data "...1...."
data "..1.1..."
data ".1...1.."
data "1.....1."
''y
data "1.....1."
data ".1...1.."
data "..1.1.."
data "...1...."
data "...1...."
data "..1....."
data ".1......"
data "1......."
''z
data "1111111."
data ".....1.."
data "....1..."
data "...1...."
data "...1...."
data "..1....."
data ".1......"
data "1111111."
''0
data ".11111.."
data "1.....1."
data "1.....1."
data "1.....1."
data "........"
data "1.....1."
data "1.....1."
data ".11111.."
''1
data "........"
data "......1."
data "......1."
data "......1."
data "........"
data "......1."
data "......1."
data "........"
''2
data ".11111.."
data "......1."
data "......1."
data "......1."
data ".11111.."
data "1......."
data "1......."
data ".11111.."
''3
data ".11111.."
data "......1."
data "......1."
data "......1."
data ".11111.."
data "......1."
data "......1."
data ".11111.."
''4
data "........"
data "1.....1."
data "1.....1."
data "1.....1."
data ".11111.."
data "......1."
data "......1."
data "........"
''5
data ".11111.."
data "1......."
data "1......."
data "1......."
data ".11111.."
data "......1."
data "......1."
data ".11111.."
''6
data ".11111.."
data "1......."
data "1......."
data "1......."
data ".11111.."
data "1.....1."
data "1.....1."
data ".11111.."
''7
data ".11111.."
data "......1."
data "......1."
data "......1."
data "........"
data "......1."
data "......1."
data "........"
''8
data ".11111.."
data "1.....1."
data "1.....1."
data "1.....1."
data ".11111.."
data "1.....1."
data "1.....1."
data ".11111.."
''9
data ".11111.."
data "1.....1."
data "1.....1."
data "1.....1."
data ".11111.."
data "......1."
data "......1."
data ".11111.."
sub digit( x as integer , y as integer , b as integer , d as double , kl as ulong )
dim as integer i , j
for i = 0 to 7
for j = 0 to 7
if ( letterpart( b , i ) and 2 ^ j ) <> 0 then
circle ( x + j * d - 3 * d , y + i * d - 3 * d ) , d / 2 , kl ,,,, f
end if
next j
next i
end sub
sub text( x as integer , y as integer , t as string , d as double , kl as ulong )
dim as integer i
for i = 1 to len( t )
digit x + i * 8 * d - len( t ) * 4 * d , y , instr( letters , lcase( mid( t , i , 1 ) ) ) , d , kl
next i
end sub