|
Post by bluatigro on May 20, 2018 13:19:51 GMT
i want to build al platonic solids and create a puzle from it
this is the first : a 2x2x2 cube
only rot left left and rot top left are active
error : the colors are not moving right
'' bluatigro 20 may 2018 '' cube 2 WindowWidth = 800 WindowHeight = 600 global winx , winy winx = 800 winy = 600 dim kl$( 24 ) [new] restore for i = 0 to 5 read q$ for j = 0 to 3 kl$( i * 4 + j ) = q$ next j next i data "red","green","blue","cyan","pink","yellow" nomainwin menu #m , "game" _ , "rot left left" , leftleft _ , "rot rigt left" , rightleft _ , "rot top left" , topleft _ , "rot left right" , leftright _ , "rot right right" , rightright _ , "rot bottom right" , bottomright _ ,|, "shuffle" , shuffle _ , "quit" , [quit] open "cube 2x2x2" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end sub leftleft call rot4 4,5,7,6 call rot8 1,3,8,10,22,20,15,14 call rot8 1,3,8,10,22,20,15,14 call draw end sub sub rightleft end sub sub topleft call rot4 0,1,3,2 call rot8 18,19,22,23,4,5,8,9 call rot8 18,19,22,23,4,5,8,9 call draw end sub sub leftright end sub sub rightright end sub sub bottomright end sub sub shuffle end sub sub rot4 a , b , c , d h$ = kl$( a ) kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = kl$( d ) kl$( d ) = h$ end sub sub rot8 a , b , c , d , e , f , g , h h$ = kl$( a ) kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = kl$( d ) kl$( d ) = kl$( e ) kl$( e ) = kl$( f ) kl$( f ) = kl$( h ) kl$( h ) = h$ end sub sub draw ''up left call quad 150,150,200,100,200,200,250,150,kl$(0) call quad 100,200,150,150,150,250,200,200,kl$(1) call quad 200,200,250,150,250,250,300,200,kl$(2) call quad 150,250,200,200,200,300,250,250,kl$(3) ''left left call quad 100,200,150,250,100,300,150,350,kl$(4) call quad 150,250,200,300,150,350,200,400,kl$(5) call quad 100,300,150,350,100,400,150,450,kl$(6) call quad 150,350,200,400,150,450,200,500,kl$(7) ''right left call quad 250,250,200,300,250,350,200,400,kl$(8) call quad 300,200,250,250,300,300,250,350,kl$(9) call quad 250,350,200,400,250,450,200,500,kl$(10) call quad 300,300,250,350,300,400,250,450,kl$(11) ''bottom right call quad 550,450,600,400,600,500,650,450,kl$(12) call quad 600,400,650,350,650,450,700,400,kl$(13) call quad 500,400,550,350,550,450,600,400,kl$(14) call quad 550,350,600,300,600,400,650,350,kl$(15) ''left right call quad 500,400,550,350,500,300,550,250,kl$(16) call quad 550,350,600,300,550,250,600,200,kl$(17) call quad 500,300,550,250,500,200,550,150,kl$(18) call quad 550,250,600,200,550,150,600,100,kl$(19) ''right right call quad 600,200,600,300,650,250,650,350,kl$(20) call quad 650,250,650,350,700,300,700,400,kl$(21) call quad 600,100,600,200,650,150,650,250,kl$(22) call quad 650,150,650,250,700,200,700,300,kl$(23) end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 #m "down" #m "line " ; a ; " " ; i ; " " ; b ; " " ; i #m "up" next i end sub
|
|
|
Post by bluatigro on May 20, 2018 16:34:27 GMT
update : cude 3x3x3
error : when i use rot red 3x strange things happen
'' bluatigro 20 may 2018 '' cube 3x3x3 WindowWidth = 800 WindowHeight = 600 global winx , winy winx = 800 winy = 600 dim kl$( 60 ) call reset nomainwin menu #m , "game" _ , "reset" , reset _ ,|, "rot red" , rotred _ , "rot green" , rotgreen _ , "rot blue" , rotblue _ , "rot cyan" , rotcyan _ , "rot pink" , rotpink _ , "rot yellow" , rotyellow _ ,|, "shuffle" , shuffle _ ,|, "quit" , [quit] open "cube 2x2x2" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end ''red = 0 ... 8 ''green = 10 ... 18 ''blue = 20 ... 28 ''yellow = 50 ... 58 ''cyan = 40 ... 48 ''pink = 30 ... 38 '' \ 00 / 40 | 50 '' \ / / \ '' \ / / \ '' 10 | 20 / 30 \ sub rotred '' 10-20-40-50 00 '' for i = 1 to 3 call rot12 16,13,10,20,23,26,48,45,42,52,55,58 '' next i call draw end sub sub rotgreen '' 00-20-30-40 10 end sub sub rotblue '' 00-10-50-30 20 end sub sub rotyellow '' 00-20-30-40 50 end sub sub rotcyan '' 10-20-40-50 30 end sub sub rotpink '' 00-10-30-50 40 end sub sub shuffle end sub sub reset restore for i = 0 to 5 read q$ for j = 0 to 8 kl$( i * 10 + j ) = q$ next j next i data "red","green","blue","cyan","pink","yellow" end sub sub rot9 a , b , c , d , e , f , g , h , i help$ = kl$( a ) kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = kl$( d ) kl$( d ) = kl$( e ) kl$( e ) = kl$( f ) kl$( f ) = kl$( h ) kl$( h ) = kl$( i ) kl$( i ) = help$ end sub sub rot12 a , b , c , d , e , f , g , h , i , j , k , l help$ = kl$( a ) kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = kl$( d ) kl$( d ) = kl$( e ) kl$( e ) = kl$( f ) kl$( f ) = kl$( h ) kl$( h ) = kl$( i ) kl$( i ) = kl$( j ) kl$( j ) = kl$( k ) kl$( k ) = kl$( l ) kl$( l ) = help$ end sub sub draw for a = 0 to 2 for b = 0 to 2 x = 0 - a * 30 + b * 30 y = 0 - a * 20 - b * 20 call quad 170+x , 280+y , 200+x , 260+y _ , 200+x , 300+y , 230+x , 280+y _ , kl$( a * 3 + b ) x = 0 - a * 30 y = 0 - a * 20 + b * 40 call quad 170+x , 280+y , 200+x , 300+y _ , 170+x , 320+y , 200+x , 340+y _ , kl$( a * 3 + b + 10 ) x = a * 30 y = 0 - a * 20 + b * 40 call quad 200+x , 340+y , 200+x , 300+y _ , 230+x , 320+y , 230+x , 280+y _ , kl$( a * 3 + b + 20 ) x = a * 30 - b * 30 y = a * 20 + b * 20 call quad 570+x , 320+y , 600+x , 300+y _ , 600+x , 340+y , 630+x , 320+y _ , kl$( a * 3 + b + 30 ) x = 0 - a * 30 y = a * 20 - b * 40 call quad 570+x , 320+y , 600+x , 300+y _ , 570+x , 280+y , 600+x , 260+y _ , kl$( a * 3 + b + 40 ) x = a * 30 y = a * 20 - b * 40 call quad 630+x , 320+y , 600+x , 300+y _ , 630+x , 280+y , 600+x , 260+y _ , kl$( a * 3 + b + 50 ) next b next a end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 if abs( a - b ) > 1 then #m "down" #m "line " ; int( a ) ; " " ; i _ ; " " ; int( b ) ; " " ; i #m "up" end if next i end sub
|
|
|
Post by B+ on May 23, 2018 2:14:08 GMT
Dang it! I can't stop thinking about how I might do Rubic's cube. Thanks to this start.
Bluatigro, you sure do bring in some interesting ideas, thanks!
|
|
|
Post by bluatigro on Jun 7, 2018 13:37:28 GMT
update : try at rubix 4 3
error : 3 * 9 + 0 = +-3100 !!
'' bluatigro 6 jun 2018 '' rubix 4 3 WindowWidth = 800 WindowHeight = 650 global winx , winy , l,r,m,b winx = 800 winy = 650
dim kl$( in( 4 , 9 ) ) m = 0 l = 1 r = 2 b = 3 call reset nomainwin menu #m , "game" _ , "reset" , reset _ ,|, "rot left" , left _ , "rot far" , far _ , "rot right" , right _ , "rot top" , top _ ,|, "shuffle" , shuffle _ ,|, "quit" , [quit] open "rubix 4 3" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end ''45678 0 45678 '' 123 123 123 '' 0 45678 0 '' 45678 '' 123 '' 0 sub left call rot3 in( l , 0 ) , in( m , 4 ) , in( b , 4 ) call rot3 in( l , 2 ) , in( m , 5 ) , in( b , 5 ) call rot3 in( l , 1 ) , in( m , 1 ) , in( b , 6 ) call rot3 in( l , 3 ) , in( m , 6 ) , in( b , 1 ) end sub sub right end sub sub far end sub sub top end sub sub rot3 a , b , c help$ = kl$( a ) kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = help$ end sub sub shuffle end sub sub reset restore for i = 0 to 3 read q$ for j = 0 to 8 kl$( in( i , j ) ) = q$ next j next i data "red" , "green" , "blue" , "yellow" end sub function in( face , no ) in = face * 9 + no end function sub draw ''Left ''45678 '' 123 '' 0 call tri 250,300,300,200,200,200,kl$(in(l,0)) call tri 200,200,250,100,150,100,kl$(in(l,1)) call tri 200,200,250,100,300,200,kl$(in(l,2)) call tri 250,100,300,200,350,100,kl$(in(l,3)) call tri 100,000,150,100,200,000,kl$(in(l,4)) call tri 150,100,200,000,250,100,kl$(in(l,5)) call tri 250,100,200,000,300,000,kl$(in(l,6)) call tri 300,000,250,100,350,100,kl$(in(l,7)) call tri 300,000,350,100,400,000,kl$(in(l,8)) ''Bottom ''45678 '' 123 '' 0 call tri 400,600,450,500,350,500,kl$(in(b,0)) '' call tri 350,500,400,400,300,400,kl$(in(b,1)) '' call tri 350,500,400,400,450,500,kl$(in(b,2)) '' call tri 400,400,450,500,500,400,kl$(in(b,3)) '' call tri 250,300,300,400,350,300,kl$(in(b,4)) '' call tri 300,400,350,300,400,400,kl$(in(b,5)) '' call tri 400,400,350,300,450,300,kl$(in(b,6)) '' call tri 450,300,400,400,500,400,kl$(in(b,7)) '' call tri 450,300,500,400,550,300,kl$(in(b,8)) ''Right ''45678 '' 123 '' 0 call tri 550,300,600,200,400,200,kl$(in(r,0)) call tri 500,200,550,100,450,100,kl$(in(r,1)) call tri 500,200,550,100,600,200,kl$(in(r,2)) call tri 550,100,600,200,650,100,kl$(in(r,3)) call tri 400,000,450,100,500,000,kl$(in(r,4)) call tri 450,100,500,000,550,100,kl$(in(r,5)) call tri 550,100,500,000,600,000,kl$(in(r,6)) call tri 600,000,550,100,650,100,kl$(in(r,7)) call tri 600,000,650,100,700,000,kl$(in(r,8))
''Middle '' 0 '' 123 ''45678 call tri 400,000,450,100,350,100,kl$(in(m,0)) call tri 350,100,400,200,300,200,kl$(in(m,1)) call tri 350,100,400,200,450,100,kl$(in(m,2)) call tri 400,200,450,100,500,200,kl$(in(m,3)) call tri 250,300,300,200,350,300,kl$(in(m,4)) call tri 300,200,350,300,400,200,kl$(in(m,5)) call tri 400,200,350,300,450,300,kl$(in(m,6)) call tri 450,300,400,200,500,200,kl$(in(m,7)) call tri 450,300,500,200,550,300,kl$(in(m,8))
end sub sub tri x1,y1,x2,y2,x3,y3,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ '' 1 - 2 '' | | '' 3 - 4 call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub five x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,clr$ '' 1-2 '' | \ '' 5-4-3 call triangle x1,y1,x2,y2,x5,y5,clr$ call triangle x2,y2,x5,y5,x4,y4,clr$ call triangle x2,y2,x4,y4,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x5 ; " " ; y5 #m "line " ; x5 ; " " ; y5 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 if abs( a - b ) > 1 then #m "down" #m "line " ; int( a ) ; " " ; i _ ; " " ; int( b ) ; " " ; i #m "up" end if next i end sub
|
|
|
Post by Gordon R on Jun 7, 2018 17:15:45 GMT
Hello bluatigro,
kl$( a ) = kl$( b ) kl$( b ) = kl$( c ) kl$( c ) = kl$( d ) kl$( d ) = kl$( e ) kl$( e ) = kl$( f ) kl$( f ) = kl$( h ) kl$( h ) = kl$( i ) kl$( i ) = help$
and in your last listing b = 350 b is set to 350 when you try to draw lines.
Gordon
|
|
|
Post by bluatigro on Jun 8, 2018 4:50:26 GMT
update : try 2
changed as gordon r sugeted
error : 3 * 9 + 0 = +-3100 !!
'' bluatigro 6 jun 2018 '' rubix 4 3 WindowWidth = 800 WindowHeight = 650 global winx , winy , l,r,m,b winx = 800 winy = 650
dim kl$( in( 4 , 9 ) ) m = 0 l = 1 r = 2 b = 3 call reset nomainwin menu #m , "game" _ , "reset" , reset _ ,|, "rot left" , left _ , "rot far" , far _ , "rot right" , right _ , "rot top" , top _ ,|, "shuffle" , shuffle _ ,|, "quit" , [quit] open "rubix 4 3" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end ''45678 0 45678 '' 123 123 123 '' 0 45678 0 '' 45678 '' 123 '' 0 sub left call rot3 in( l , 0 ) , in( m , 4 ) , in( b , 4 ) call rot3 in( l , 2 ) , in( m , 5 ) , in( b , 5 ) call rot3 in( l , 1 ) , in( m , 1 ) , in( b , 6 ) call rot3 in( l , 3 ) , in( m , 6 ) , in( b , 1 ) end sub sub right end sub sub far end sub sub top end sub sub rot3 x , y , z help$ = kl$( x ) kl$( x ) = kl$( y ) kl$( y ) = kl$( z ) kl$( z ) = help$ end sub sub shuffle end sub sub solve end sub sub reset restore for i = 0 to 3 read q$ for j = 0 to 8 kl$( in( i , j ) ) = q$ next j next i data "red" , "green" , "blue" , "yellow" end sub function in( face , no ) in = face * 9 + no end function sub draw ''Left ''45678 '' 123 '' 0 call tri 250,300,300,200,200,200,kl$(in(l,0)) call tri 200,200,250,100,150,100,kl$(in(l,1)) call tri 200,200,250,100,300,200,kl$(in(l,2)) call tri 250,100,300,200,350,100,kl$(in(l,3)) call tri 100,000,150,100,200,000,kl$(in(l,4)) call tri 150,100,200,000,250,100,kl$(in(l,5)) call tri 250,100,200,000,300,000,kl$(in(l,6)) call tri 300,000,250,100,350,100,kl$(in(l,7)) call tri 300,000,350,100,400,000,kl$(in(l,8)) ''Bottom ''45678 '' 123 '' 0 call tri 400,600,450,500,350,500,kl$(in(b,0)) '' call tri 350,500,400,400,300,400,kl$(in(b,1)) '' call tri 350,500,400,400,450,500,kl$(in(b,2)) '' call tri 400,400,450,500,500,400,kl$(in(b,3)) '' call tri 250,300,300,400,350,300,kl$(in(b,4)) '' call tri 300,400,350,300,400,400,kl$(in(b,5)) '' call tri 400,400,350,300,450,300,kl$(in(b,6)) '' call tri 450,300,400,400,500,400,kl$(in(b,7)) '' call tri 450,300,500,400,550,300,kl$(in(b,8)) ''Right ''45678 '' 123 '' 0 call tri 550,300,600,200,400,200,kl$(in(r,0)) call tri 500,200,550,100,450,100,kl$(in(r,1)) call tri 500,200,550,100,600,200,kl$(in(r,2)) call tri 550,100,600,200,650,100,kl$(in(r,3)) call tri 400,000,450,100,500,000,kl$(in(r,4)) call tri 450,100,500,000,550,100,kl$(in(r,5)) call tri 550,100,500,000,600,000,kl$(in(r,6)) call tri 600,000,550,100,650,100,kl$(in(r,7)) call tri 600,000,650,100,700,000,kl$(in(r,8))
''Middle '' 0 '' 123 ''45678 call tri 400,000,450,100,350,100,kl$(in(m,0)) call tri 350,100,400,200,300,200,kl$(in(m,1)) call tri 350,100,400,200,450,100,kl$(in(m,2)) call tri 400,200,450,100,500,200,kl$(in(m,3)) call tri 250,300,300,200,350,300,kl$(in(m,4)) call tri 300,200,350,300,400,200,kl$(in(m,5)) call tri 400,200,350,300,450,300,kl$(in(m,6)) call tri 450,300,400,200,500,200,kl$(in(m,7)) call tri 450,300,500,200,550,300,kl$(in(m,8))
end sub sub tri x1,y1,x2,y2,x3,y3,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ '' 1 - 2 '' | | '' 3 - 4 call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub five x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,clr$ '' 1-2 '' | \ '' 5-4-3 call triangle x1,y1,x2,y2,x5,y5,clr$ call triangle x2,y2,x5,y5,x4,y4,clr$ call triangle x2,y2,x4,y4,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x5 ; " " ; y5 #m "line " ; x5 ; " " ; y5 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 if abs( a - b ) > 1 then #m "down" #m "line " ; int( a ) ; " " ; i _ ; " " ; int( b ) ; " " ; i #m "up" end if next i end sub
|
|
|
Post by bluatigro on Jun 8, 2018 5:50:37 GMT
update : graphics are good rotation's are good
error : call draw in sub reset gives #m not good
test this for mistakes
'' bluatigro 6 jun 2018 '' rubix 4 3 WindowWidth = 800 WindowHeight = 650 global winx , winy , l1,r1,m1,b1 winx = 800 winy = 650
dim kl$( in( 4 , 9 ) ) m1 = 0 l1 = 1 r1 = 2 b1 = 3 call reset nomainwin menu #m , "game" _ , "reset" , reset _ ,|, "rot left" , left _ , "rot far" , far _ , "rot right" , right _ , "rot top" , top _ ,|, "shuffle" , shuffle _ ,|, "quit" , [quit] open "rubix 4 3" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end ''45678 0 45678 '' 123 123 123 '' 0 45678 0 '' 45678 '' 123 '' 0 sub left call rot3 in( l1 , 0 ) , in( m1 , 4 ) , in( b1 , 4 ) call rot3 in( l1 , 2 ) , in( m1 , 5 ) , in( b1 , 5 ) call rot3 in( l1 , 1 ) , in( m1 , 1 ) , in( b1 , 6 ) call rot3 in( l1 , 3 ) , in( m1 , 6 ) , in( b1 , 1 ) call draw end sub sub right call rot3 in( m1 , 8 ) , in( r1 , 0 ) , in( b1 , 8 ) call rot3 in( m1 , 7 ) , in( r1 , 2 ) , in( b1 , 7 ) call rot3 in( m1 , 6 ) , in( r1 , 1 ) , in( b1 , 3 ) call rot3 in( m1 , 3 ) , in( r1 , 3 ) , in( b1 , 6 ) call draw end sub sub far call rot3 in( l1 , 4 ) , in( r1 , 8 ) , in( b1 , 0 ) call rot3 in( l1 , 1 ) , in( r1 , 6 ) , in( b1 , 3 ) call rot3 in( l1 , 5 ) , in( r1 , 7 ) , in( b1 , 2 ) call rot3 in( l1 , 6 ) , in( r1 , 3 ) , in( b1 , 1 ) call draw end sub sub top call rot3 in( m1 , 0 ) , in( r1 , 4 ) , in( l1 , 8 ) call rot3 in( m1 , 1 ) , in( r1 , 1 ) , in( l1 , 6 ) call rot3 in( m1 , 2 ) , in( r1 , 5 ) , in( l1 , 7 ) call rot3 in( m1 , 3 ) , in( r1 , 6 ) , in( l1 , 3 ) call draw end sub ''this is al the rotates you ever need !! sub rot3 x1 , x2 , x3 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = help$ end sub sub rot4 x1 , x2 , x3 , x4 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = kl$( x4 ) kl$( x4 ) = help$ end sub sub rot5 x1 , x2 , x3 , x4 , x5 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = kl$( x4 ) kl$( x4 ) = kl$( x5 ) kl$( x5 ) = help$ end sub sub shuffle prompt "HOW MANY ROTATION'S ?" ; level$ level = val( level$ ) for i = 1 to level select case int( rnd(0) * 4 ) case 0 call left case 1 call right case 2 call top case 3 call far case else end select next i end sub sub solve end sub sub reset restore for i = 0 to 3 read q$ for j = 0 to 8 kl$( in( i , j ) ) = q$ next j next i data "red" , "green" , "blue" , "yellow" call draw end sub function in( face , no ) in = face * 9 + no end function sub draw ''Left ''45678 '' 123 '' 0 call tri 250,300,300,200,200,200,kl$(in(l1,0)) call tri 200,200,250,100,150,100,kl$(in(l1,1)) call tri 200,200,250,100,300,200,kl$(in(l1,2)) call tri 250,100,300,200,350,100,kl$(in(l1,3)) call tri 100,000,150,100,200,000,kl$(in(l1,4)) call tri 150,100,200,000,250,100,kl$(in(l1,5)) call tri 250,100,200,000,300,000,kl$(in(l1,6)) call tri 300,000,250,100,350,100,kl$(in(l1,7)) call tri 300,000,350,100,400,000,kl$(in(l1,8)) ''Bottom ''45678 '' 123 '' 0 call tri 400,600,450,500,350,500,kl$(in(b1,0)) call tri 350,500,400,400,300,400,kl$(in(b1,1)) call tri 350,500,400,400,450,500,kl$(in(b1,2)) call tri 400,400,450,500,500,400,kl$(in(b1,3)) call tri 250,300,300,400,350,300,kl$(in(b1,4)) call tri 300,400,350,300,400,400,kl$(in(b1,5)) call tri 400,400,350,300,450,300,kl$(in(b1,6)) call tri 450,300,400,400,500,400,kl$(in(b1,7)) call tri 450,300,500,400,550,300,kl$(in(b1,8)) ''Right ''45678 '' 123 '' 0 call tri 550,300,600,200,400,200,kl$(in(r1,0)) call tri 500,200,550,100,450,100,kl$(in(r1,1)) call tri 500,200,550,100,600,200,kl$(in(r1,2)) call tri 550,100,600,200,650,100,kl$(in(r1,3)) call tri 400,000,450,100,500,000,kl$(in(r1,4)) call tri 450,100,500,000,550,100,kl$(in(r1,5)) call tri 550,100,500,000,600,000,kl$(in(r1,6)) call tri 600,000,550,100,650,100,kl$(in(r1,7)) call tri 600,000,650,100,700,000,kl$(in(r1,8))
''Middle '' 0 '' 123 ''45678 call tri 400,000,450,100,350,100,kl$(in(m,0)) call tri 350,100,400,200,300,200,kl$(in(m,1)) call tri 350,100,400,200,450,100,kl$(in(m,2)) call tri 400,200,450,100,500,200,kl$(in(m,3)) call tri 250,300,300,200,350,300,kl$(in(m,4)) call tri 300,200,350,300,400,200,kl$(in(m,5)) call tri 400,200,350,300,450,300,kl$(in(m,6)) call tri 450,300,400,200,500,200,kl$(in(m,7)) call tri 450,300,500,200,550,300,kl$(in(m,8))
end sub ''this is al the graphics you ever need !! sub tri x1,y1,x2,y2,x3,y3,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ '' 1 - 2 '' | | '' 3 - 4 call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub five x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,clr$ '' 1-2 '' | \ '' 5-4-3 call triangle x1,y1,x2,y2,x5,y5,clr$ call triangle x2,y2,x5,y5,x4,y4,clr$ call triangle x2,y2,x4,y4,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x5 ; " " ; y5 #m "line " ; x5 ; " " ; y5 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 if abs( a - b ) > 1 then #m "down" #m "line " ; int( a ) ; " " ; i _ ; " " ; int( b ) ; " " ; i #m "up" end if next i end sub
|
|
|
Post by bluatigro on Jun 8, 2018 6:19:14 GMT
update : added REM's removed const's changed var name
there is code in this to build every rubix's
'' bluatigro 8 jun 2018 '' rubix 4 3 '' there is code here to aid in making other rubix's WindowWidth = 800 WindowHeight = 650 global winx , winy winx = 800 winy = 650 LeftUpperX = ( DisplayWidth - winx ) / 2 LeftUpperY = ( DisplayHeight - winy ) / 2 dim kl$( Q( 4 , 9 ) ) call reset nomainwin ''this has to change by every rubix menu #m , "game" _ , "reset" , reset _ ,|, "rot left" , left _ , "rot far" , far _ , "rot right" , right _ , "rot top" , top _ ,|, "shuffle" , shuffle _ ,|, "quit" , [quit] open "rubix 4 3" for graphics as #m #m "trapclose [quit]" call draw wait [quit] close #m end ''these have to change by every rubix ''even the number of sub's ''45678 0 45678 '' 123 123 123 '' 0 45678 0 '' 45678 '' 123 '' 0 sub left call rot3 Q( 0 , 0 ) , Q( m1 , 4 ) , Q( 3 , 4 ) call rot3 Q( 0 , 2 ) , Q( m1 , 5 ) , Q( 3 , 5 ) call rot3 Q( 0 , 1 ) , Q( m1 , 1 ) , Q( 3 , 6 ) call rot3 Q( 0 , 3 ) , Q( m1 , 6 ) , Q( 3 , 1 ) call draw end sub sub right call rot3 Q( m1 , 8 ) , Q( r1 , 0 ) , Q( 3 , 8 ) call rot3 Q( m1 , 7 ) , Q( r1 , 2 ) , Q( 3 , 7 ) call rot3 Q( m1 , 6 ) , Q( r1 , 1 ) , Q( 3 , 3 ) call rot3 Q( m1 , 3 ) , Q( r1 , 3 ) , Q( 3 , 6 ) call draw end sub sub far call rot3 Q( 0 , 4 ) , Q( r1 , 8 ) , Q( 3 , 0 ) call rot3 Q( 0 , 1 ) , Q( r1 , 6 ) , Q( 3 , 3 ) call rot3 Q( 0 , 5 ) , Q( r1 , 7 ) , Q( 3 , 2 ) call rot3 Q( 0 , 6 ) , Q( r1 , 3 ) , Q( 3 , 1 ) call draw end sub sub top call rot3 Q( m1 , 0 ) , Q( r1 , 4 ) , Q( 0 , 8 ) call rot3 Q( m1 , 1 ) , Q( r1 , 1 ) , Q( 0 , 6 ) call rot3 Q( m1 , 2 ) , Q( r1 , 5 ) , Q( 0 , 7 ) call rot3 Q( m1 , 3 ) , Q( r1 , 6 ) , Q( 0 , 3 ) call draw end sub ''this is al the rotates we ever need !! sub rot3 x1 , x2 , x3 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = help$ end sub sub rot4 x1 , x2 , x3 , x4 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = kl$( x4 ) kl$( x4 ) = help$ end sub sub rot5 x1 , x2 , x3 , x4 , x5 help$ = kl$( x1 ) kl$( x1 ) = kl$( x2 ) kl$( x2 ) = kl$( x3 ) kl$( x3 ) = kl$( x4 ) kl$( x4 ) = kl$( x5 ) kl$( x5 ) = help$ end sub ''this has to change by every rubix sub shuffle prompt "HOW MANY ROTATION'S ?" ; level$ level = val( level$ ) for i = 1 to level select case int( rnd(0) * 4 ) case 0 call left case 1 call right case 2 call top case 3 call far case else end select next i end sub ''this has to change by every rubix sub solve end sub ''thia has to change by every rubix sub reset restore for i = 0 to 3 read q$ for j = 0 to 8 kl$( Q( i , j ) ) = q$ next j next i data "red" , "green" , "blue" , "yellow" '' call draw end sub ''this has to change by every rubix function Q( face , no ) Q = face * 9 + no end function ''this has to change by every rubix sub draw ''Left ''45678 '' 123 '' 0 call tri 250,300,300,200,200,200,kl$(Q(0,0)) call tri 200,200,250,100,150,100,kl$(Q(0,1)) call tri 200,200,250,100,300,200,kl$(Q(0,2)) call tri 250,100,300,200,350,100,kl$(Q(0,3)) call tri 100,000,150,100,200,000,kl$(Q(0,4)) call tri 150,100,200,000,250,100,kl$(Q(0,5)) call tri 250,100,200,000,300,000,kl$(Q(0,6)) call tri 300,000,250,100,350,100,kl$(Q(0,7)) call tri 300,000,350,100,400,000,kl$(Q(0,8)) ''Bottom ''45678 '' 123 '' 0 call tri 400,600,450,500,350,500,kl$(Q(3,0)) call tri 350,500,400,400,300,400,kl$(Q(3,1)) call tri 350,500,400,400,450,500,kl$(Q(3,2)) call tri 400,400,450,500,500,400,kl$(Q(3,3)) call tri 250,300,300,400,350,300,kl$(Q(3,4)) call tri 300,400,350,300,400,400,kl$(Q(3,5)) call tri 400,400,350,300,450,300,kl$(Q(3,6)) call tri 450,300,400,400,500,400,kl$(Q(3,7)) call tri 450,300,500,400,550,300,kl$(Q(3,8)) ''Right ''45678 '' 123 '' 0 call tri 550,300,600,200,400,200,kl$(Q(2,0)) call tri 500,200,550,100,450,100,kl$(Q(2,1)) call tri 500,200,550,100,600,200,kl$(Q(2,2)) call tri 550,100,600,200,650,100,kl$(Q(2,3)) call tri 400,000,450,100,500,000,kl$(Q(2,4)) call tri 450,100,500,000,550,100,kl$(Q(2,5)) call tri 550,100,500,000,600,000,kl$(Q(2,6)) call tri 600,000,550,100,650,100,kl$(Q(2,7)) call tri 600,000,650,100,700,000,kl$(Q(2,8)) ''Middle '' 0 '' 123 ''45678 call tri 400,000,450,100,350,100,kl$(Q(1,0)) call tri 350,100,400,200,300,200,kl$(Q(1,1)) call tri 350,100,400,200,450,100,kl$(Q(1,2)) call tri 400,200,450,100,500,200,kl$(Q(1,3)) call tri 250,300,300,200,350,300,kl$(Q(1,4)) call tri 300,200,350,300,400,200,kl$(Q(1,5)) call tri 400,200,350,300,450,300,kl$(Q(1,6)) call tri 450,300,400,200,500,200,kl$(Q(1,7)) call tri 450,300,500,200,550,300,kl$(Q(1,8))
end sub ''these are al the graphics we ever need !! sub tri x1,y1,x2,y2,x3,y3,clr$ call triangle x1,y1,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub quad x1,y1,x2,y2,x3,y3,x4,y4,clr$ '' 1 - 2 '' | | '' 3 - 4 call triangle x1,y1,x2,y2,x3,y3,clr$ call triangle x4,y4,x2,y2,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x1 ; " " ; y1 #m "up" end sub sub five x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,clr$ '' 1-2 '' | \ '' 5-4-3 call triangle x1,y1,x2,y2,x5,y5,clr$ call triangle x2,y2,x5,y5,x4,y4,clr$ call triangle x2,y2,x4,y4,x3,y3,clr$ #m "color black" #m "size 5" #m "down" #m "line " ; x1 ; " " ; y1 ; " " ; x2 ; " " ; y2 #m "line " ; x2 ; " " ; y2 ; " " ; x3 ; " " ; y3 #m "line " ; x3 ; " " ; y3 ; " " ; x4 ; " " ; y4 #m "line " ; x4 ; " " ; y4 ; " " ; x5 ; " " ; y5 #m "line " ; x5 ; " " ; y5 ; " " ; x1 ; " " ; y1 #m "up" end sub sub triangle x1 , y1 , x2 , y2 , x3 , y3 , clr$ if y1 = y2 then y1 = y1 - .1 if y2 = y3 then y3 = y3 + .1 if y1 = y3 then y3 = y3 + .1 if y1 > y3 then h = y1 y1 = y3 y3 = h h = x1 x1 = x3 x3 = h end if if y1 > y2 then h = y1 y1 = y2 y2 = h h = x1 x1 = x2 x2 = h end if if y2 > y3 then h = y2 y2 = y3 y3 = h h = x2 x2 = x3 x3 = h end if #m "color " ; clr$ #m "size 1" 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 if abs( a - b ) > 1 then #m "down" #m "line " ; int( a ) ; " " ; i _ ; " " ; int( b ) ; " " ; i #m "up" end if next i end sub
|
|