Posts: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
Hello All,
This is my take on the single player logic puzzle Twizzle.
https://www.youtube.com/shorts/4Mo5ROmY3...ture=share
Twizzle-Description.pdf (Size: 8.41 KB / Downloads: 15)
Twizzle Logic Puzzle.bas (Size: 30.96 KB / Downloads: 12)
Posts: 718
Threads: 110
Joined: Apr 2022
Reputation:
28
05-27-2025, 03:40 AM
(This post was last modified: 05-27-2025, 03:44 AM by PhilOfPerth.)
(05-27-2025, 02:10 AM)Donald Foster Wrote: Hello All,
This is my take on the single player logic puzzle Twizzle.
https://www.youtube.com/shorts/4Mo5ROmY3...ture=share
![[Image: Twizzle-Screenshot.png]](https://i.ibb.co/vCTMbmW4/Twizzle-Screenshot.png)
hi Donald.
Looks like an interesting game; the graphics are great.
But I can't get the knobs or buttons to work - they ignore the mouse.
I tried changing to Full Screen (esc) and lost the mouse cursor.
Am I missing something (again)?
(I'm using Windows10)
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) 
Please visit my Website at: http://oldendayskids.blogspot.com/
Posts: 4,155
Threads: 190
Joined: Apr 2022
Reputation:
263
Yeah I am not finding in code how the rotation area is selected.
Looks like your font characters are getting cut off at top, try _UPrintString?
b = b + ...
Posts: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
Hello,
To rotate a knob, click on the knob which is a light gray circle on the game board, it should turn white. there a 2 circular arrows on the right side of the screen. One on each side of the large number of moves. Click on that circular arrow to rotate the tiles for the knob you have chosen.
The font used is one of Windows fonts. I have used this font in other games I made. Maybe those games are not finished or posted yet. Also, I'm not understanding why the <ESC> key is not working for you to switch between Window and Full Screen mode. I will look into the features of _UPrintString, that's a new one for me.
Donald
Posts: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
I'm sorry, I just retested the game and found I accidently deleted the code which rotated the tiles. I will fix and repost the code.
Posts: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
When I was fine tuning the 5 buttons (Restart, New, Exit, Load, Save) fixed in the section where you choose the knob mouse input. Instead of making all of those changes in the choose rotation section, I cut out the code for those 5 buttons and repasted the updated code. But I also accidently cut out the code that rotates the tiles. Sorry about that. Here's the corrected code
Code: (Select All) _Title "Twizzle Logic Puzzle"
Screen _NewImage(1324, 737, 256): Randomize Timer
Randomize Timer
_PaletteColor 1, _RGB32(1) ' Black
_PaletteColor 2, _RGB32(50) ' Black
_PaletteColor 3, _RGB32(100) ' Black
_PaletteColor 4, _RGB32(0, 185, 0) ' Green
_PaletteColor 5, _RGB32(0, 159, 255) ' Blue
_PaletteColor 6, _RGB32(129, 0, 125) ' Purple
_PaletteColor 7, _RGB32(225, 0, 0) ' Red
Dim As _Byte U, Y, Z, Selected, Selection, Position, Knob, Rotation
Dim As Integer V, W, X
Dim As Integer LevelY(4), KnobX(9), KnobY(9), CardX(10), CardY(10), Rotate1X, Rotate1Y, Rotate2X, Rotate2Y
Dim Shared As _Byte StartCard, EndCard, Level, Moves, LevelColor(4), Tile(24), CardPattern(40, 24)
Dim Shared As Integer TileX(24), TileY(24)
LevelColor(0) = 0: LevelColor(1) = 4: LevelColor(2) = 5: LevelColor(3) = 6: LevelColor(4) = 7
'Setup Card Patterns
Data 0,0,0,0,1,1,0,0,0,0,3,2,2,3,0,0,0,0,4,4,0,0,0,0: ' Card 01
Data 0,0,0,4,3,1,2,0,0,0,0,0,0,0,0,0,0,2,1,3,4,0,0,0: ' Card 02
Data 4,0,3,1,0,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,3,1,0,4: ' Card 03
Data 2,0,3,2,0,0,3,0,0,0,0,0,0,0,0,0,0,4,0,0,1,4,0,1: ' Card 04
Data 0,0,0,0,1,1,0,2,0,3,0,0,0,0,2,0,3,0,4,4,0,0,0,0: ' Card 05
Data 0,0,0,0,1,3,0,2,0,4,0,0,0,0,3,0,1,0,4,2,0,0,0,0: ' Card 06
Data 0,0,0,0,0,0,0,2,4,3,1,0,0,1,2,4,3,0,0,0,0,0,0,0: ' Card 07
Data 0,4,0,0,0,0,0,0,4,0,1,1,2,2,0,3,0,0,0,0,0,0,3,0: ' Card 08
Data 0,0,1,0,0,2,2,0,0,1,0,0,0,0,4,0,0,3,3,0,0,4,0,0: ' Card 09
Data 0,0,0,0,0,2,0,3,2,0,0,3,4,0,0,1,4,0,1,0,0,0,0,0: ' Card 10
Data 0,3,0,1,3,3,2,0,0,0,1,0,0,2,0,0,0,1,4,4,2,0,4,0: ' Card 11
Data 1,1,1,4,0,0,3,0,0,0,4,0,0,3,0,0,0,4,0,0,3,2,2,2: ' Card 12
Data 2,1,2,3,0,0,4,0,0,0,4,0,0,3,0,0,0,3,0,0,4,1,2,1: ' Card 13
Data 2,2,2,0,4,3,0,0,0,0,0,4,3,0,0,0,0,0,4,3,0,1,1,1: ' Card 14
Data 0,0,0,0,1,4,0,1,1,4,0,3,4,0,3,2,2,0,3,2,0,0,0,0: ' Card 15
Data 0,0,0,0,3,4,0,1,1,1,0,3,4,0,2,2,2,0,3,4,0,0,0,0: ' Card 16
Data 3,0,3,2,0,0,1,0,3,0,0,2,1,0,0,4,0,2,0,0,1,4,0,4: ' Card 17
Data 0,3,0,0,1,1,0,2,0,4,4,0,0,2,2,0,4,0,3,3,0,0,1,0: ' Card 18
Data 4,0,2,1,3,3,1,2,0,4,0,0,0,0,0,3,0,0,4,2,0,0,1,0: ' Card 19
Data 3,0,0,4,4,0,0,3,3,0,0,4,1,0,0,2,2,0,0,1,1,0,0,2: ' Card 20
Data 4,4,4,1,4,4,2,1,0,2,1,0,0,2,1,0,2,1,3,3,2,3,3,3: ' Card 21
Data 3,3,3,4,4,1,1,3,0,3,4,0,0,1,2,0,2,4,4,1,1,2,2,2: ' Card 22
Data 4,3,1,2,1,2,2,4,0,3,1,0,0,4,2,0,1,3,3,4,3,4,2,1: ' Card 23
Data 4,3,1,2,1,2,2,4,0,3,1,0,0,4,2,0,1,3,3,4,3,4,2,1: ' Card 24
Data 4,2,4,2,3,3,1,1,0,2,1,0,0,4,2,0,3,3,1,2,1,4,3,4: ' card 25
Data 3,2,2,3,2,0,2,0,2,4,3,3,4,4,3,1,0,1,0,1,4,1,1,4: ' Card 26
Data 2,2,0,3,2,2,0,3,2,4,3,3,4,4,3,1,4,0,1,1,4,0,1,1: ' Card 27
Data 3,0,1,4,1,4,3,2,2,2,0,1,4,0,3,3,3,4,1,4,2,2,0,1: ' Card 28
Data 1,0,3,1,1,2,4,1,2,4,0,2,4,0,2,4,3,2,4,3,3,1,0,3: ' Card 29
Data 4,0,2,4,4,2,2,4,4,2,0,1,2,0,1,3,3,1,1,3,3,1,0,3: ' Card 30
Data 1,1,1,4,4,3,3,1,1,1,4,4,3,3,2,2,2,4,4,3,3,2,2,2: ' Card 31
Data 1,1,1,2,3,3,1,3,3,3,2,4,3,1,4,4,4,2,4,4,1,2,2,2: ' Card 32
Data 2,1,2,4,1,1,3,3,1,4,3,3,4,4,3,2,4,4,2,2,3,1,2,1: ' Card 33
Data 4,2,2,1,4,2,2,1,4,2,3,1,4,2,3,1,4,3,3,1,4,3,3,1: ' Card 34
Data 3,3,3,4,1,1,3,2,2,2,4,1,1,3,2,2,2,4,1,1,3,4,4,4: ' Card 35
Data 1,1,1,4,2,1,3,4,4,4,4,2,1,3,3,3,3,4,2,1,3,2,2,2: ' Card 36
Data 2,2,2,4,3,3,1,1,3,4,4,1,4,1,1,2,4,4,2,2,1,3,3,3: ' Card 37
Data 3,3,3,3,3,1,1,3,1,1,2,2,1,1,2,2,4,2,2,4,4,4,4,4: ' Card 38
Data 3,3,2,3,3,2,2,3,3,2,1,1,2,2,1,4,4,1,1,4,4,1,4,4: ' Card 39
Data 1,1,1,3,1,1,4,3,1,4,3,3,4,4,3,2,4,3,2,2,4,2,2,2: ' Card 40
For Z = 1 To 40: For Y = 1 To 24: Read CardPattern(Z, Y): Next: Next
LevelCursor$ = "R389D55L389U55H1R391D57L391U57"
CardCursor$ = "R165D165L165U165H1R167D167L167U167H1R169D169"
Puzzle: Cls , 15
' Draw Board
Circle (170, 170), 160, 2, 1.4, 3.3: Circle (567, 170), 160, 2, 0, 1.8: Circle (170, 567), 160, 2, 2.9, 4.8: Circle (567, 567), 160, 2, 4.4, 0
Line (170, 10)-(567, 10), 2: Line (170, 727)-(567, 727), 2: Line (10, 170)-(10, 567), 2: Line (727, 170)-(727, 567), 2: Paint (170, 170), 2
X = 70: W = 0: U = 0
For Z = 1 To 7
V = 70
For Y = 1 To 7
If Z = 1 Or Z = 3 Or Z = 5 Or Z = 7 Then
If Y = 2 Or Y = 4 Or Y = 6 Then
Circle (V, X + 100), 138, 1, .81, 2.34: Circle (V, X - 100), 138, 1, 3.96, 5.455: Paint (V, X), 0, 1
Tile(U) = 0: U = U + 1: TileX(U) = V: TileY(U) = X
End If
Else
If Y = 1 Or Y = 3 Or Y = 5 Or Y = 7 Then
Circle (V + 100, X), 138, 1, 2.36, 3.93: Circle (V - 100, X), 138, 1, 5.5, .771: Paint (V, X), 0, 1
Tile(U) = 0: U = U + 1: TileX(U) = V: TileY(U) = X
End If
If Y = 2 Or Y = 4 Or Y = 6 Then Circle (V, X), 50, 1: Paint (V, X), 3, 1: W = W + 1: KnobX(W) = V: KnobY(W) = X
End If
V = V + 100
Next
X = X + 100
Next
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 30): _Font font&: _PrintString (820, 10), "T W I Z Z L E L O G I C P U Z Z L E"
font& = _LoadFont(BoldFont$, 25): _Font font&:
X = 220
For Z = 1 To 4
Color LevelColor(Z), 15
If Z = 1 Then _PrintString (883, X), "L E V E L 1: B E G I N N E R"
If Z = 2 Then _PrintString (850, X), "L E V E L 2: I N T E R M E D I A T E"
If Z = 3 Then _PrintString (883, X), "L E V E L 3: A D V A N C E D"
If Z = 4 Then _PrintString (905, X), "L E V E L 4: E X P E R T"
LevelY(Z) = X: X = X + 100
Next
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (920, 713), "Choose a Level to Play"
ChooseLevel:
Do While _MouseInput
For Z = 1 To 4
If _MouseX > 830 And _MouseY < 1219 And _MouseY > LevelY(Z) - 20 And _MouseY < LevelY(Z) + 35 Then Selected = 1 Else Selected = 0
If Selected = 1 Then PSet (830, LevelY(Z) - 20), 0: Draw LevelCursor$ Else PSet (830, LevelY(Z) - 20), 15: Draw LevelCursor$
If _MouseButton(1) = -1 And Selected = 1 Then GoSub ReleaseButton: Level = Z: GoTo ClearLevels
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseLevel
ClearLevels:
Line (828, 198)-(1220, 560), 15, BF: Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (920, 713), Space$(300)
Color 0, 15: _PrintString (905, 320), "Choose Cards Randomly": _PrintString (915, 420), "Choose Cards Yourself"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (920, 713), "Choose Cards Selection"
ChooseCardSelection:
Do While _MouseInput
For Z = 1 To 2
If _MouseX > 830 And _MouseY < 1219 And _MouseY > LevelY(Z + 1) - 20 And _MouseY < LevelY(Z + 1) + 35 Then Selected = 1 Else Selected = 0
If Selected = 1 Then PSet (830, LevelY(Z + 1) - 20), 0: Draw LevelCursor$ Else PSet (830, LevelY(Z + 1) - 20), 15: Draw LevelCursor$
If _MouseButton(1) = -1 And Selected = 1 Then GoSub ReleaseButton: Selection = Z: GoTo ChooseCards
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseCardSelection
ChooseCards:
Line (828, 198)-(1220, 560), 15, BF: Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (920, 713), Space$(300)
If Selection = 2 Then
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
X = 118: Position = 1
For Z = 1 To 4
If Z = 4 Then W = 1: V = 1025 Else W = 3: V = 857
For Y = 1 To W
DrawCard V, X, Card: CardX(Position) = V: CardY(Position) = X
Card = Card + 1: Position = Position + 1: V = V + 168
Next
X = X + 168
Next
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (910, 713), "Choose a Starting Card"
StartingCard:
Do While _MouseInput
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
For Z = 1 To 10
If _MouseX > CardX(Z) - 80 And _MouseX < CardX(Z) + 80 And _MouseY > CardY(Z) - 80 And _MouseY < CardY(Z) + 80 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: StartCard = Card: Position = Z: GoTo PlaceStartCard
End If
Card = Card + 1
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo StartingCard
PlaceStartCard:
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(CardPattern(StartCard, Z)), 1: Tile(Z) = CardPattern(StartCard, Z): Next
Line (CardX(Position) - 80, CardY(Position) - 80)-(CardX(Position) + 80, CardY(Position) + 80), 15, BF
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (910, 713), "Choose an Ending Card"
EndingCard:
Do While _MouseInput
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
For Z = 1 To 10
If _MouseX > CardX(Z) - 80 And _MouseX < CardX(Z) + 80 And _MouseY > CardY(Z) - 80 And _MouseY < CardY(Z) + 80 And _MouseButton(1) = -1 Then
If Z <> Position Then GoSub ReleaseButton: EndCard = Card: GoTo ClearCards
End If
Card = Card + 1
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo EndingCard
ClearCards: Line (777, 38)-(1290, 737), 15, BF
Else
Card1 = Int(Rnd * 10) + 1
If Level = 1 Then StartCard = Card1 Else If Level = 2 Then StartCard = Card1 + 10 Else If Level = 3 Then StartCard = Card1 + 20 Else If Level = 4 Then StartCard = Card1 + 30
GetCard2: card2 = Int(Rnd * 10) + 1: If card2 = Card1 GoTo GetCard2
If Level = 1 Then EndCard = card2 Else If Level = 2 Then EndCard = card2 + 10 Else If Level = 3 Then EndCard = card2 + 20 Else If Level = 4 Then EndCard = card2 + 30
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(CardPattern(StartCard, Z)), 1: Tile(Z) = CardPattern(StartCard, Z): Next
End If
' Display Level
Color LevelColor(Level), 15
If Level = 1 Then _PrintString (883, 60), "L E V E L 1: B E G I N N E R"
If Level = 2 Then _PrintString (850, 60), "L E V E L 2: I N T E R M E D I A T E"
If Level = 3 Then _PrintString (883, 60), "L E V E L 3: A D V A N C E D"
If Level = 4 Then _PrintString (905, 60), "L E V E L 4: E X P E R T"
' Display Cards
DrawCard 873, 190, StartCard: DrawCard 1177, 190, EndCard: PSet (980, 190), 0: Draw "D30R30D30E60H60D30L30D30BR10P0,0"
Color 0, 15: _PrintString (825, 280), "STARTING": Color 0, 15: _PrintString (830, 305), "PATTERN"
Color 0, 15: _PrintString (1135, 280), "ENDING": Color 0, 15: _PrintString (1130, 305), "PATTERN"
' Display Rotation Arrows
Circle (873, 440), 70, 0, 1.5, 0: Circle (873, 440), 50, 0, 1.5, 0: PSet (873, 370), 0: Draw "U20F30G30U20BD50BR50R20BG10P0,0"
Circle (1177, 440), 70, 0, 3.1, 1.6: Circle (1177, 440), 50, 0, 3.1, 1.6: PSet (1177, 370), 0: Draw "U20G30F30U20BD50BL50L20BF10P0,0"
Color 0, 15: font& = _LoadFont(BoldFont$, 35): _Font font&: _PrintString (955, 370), "M O V E S": Moves = 0
' Display Buttons
DrawButtons
GameLoop:
' Display Move
If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _PrintString (X, 410), Str$(Moves)
ChooseKnob:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (910, 713), "Choose Knob to Rotate"
ChooseKnobInput:
Do While _MouseInput
' Select Knob
For Z = 1 To 9
If _MouseX > KnobX(Z) - 50 And _MouseX < KnobX(Z) + 50 And _MouseY > KnobY(Z) - 50 And _MouseY < KnobY(Z) + 50 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: Knob = Z: GoTo SelectKnob
End If
Next
' Restart Puzzle
If _MouseX > 853 And _MouseX < 1009 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else SetupPuzzle: DisplayPuzzle: GoTo ChooseKnob
End If
' New Puzzle
If _MouseX > 1040 And _MouseX < 1197 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob
For Z = 1 To 24: Tile(Z) = 0: Next: GoTo Puzzle
End If
' Exit Puzzle
If _MouseX > 759 And _MouseX < 915 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else System
End If
' Load Puzzle
If _MouseX > 947 And _MouseX < 1103 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else GoTo LoardPuzzle
End If
' Save Puzzle
If _MouseX > 1135 And _MouseX < 1291 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: GoTo SavePuzzle
End If
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseKnobInput
SelectKnob:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (910, 713), Space$(250)
' Show Selected Knob
Paint (KnobX(Knob), KnobY(Knob)), 15, 1
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (930, 685), "Choose a Direction": _PrintString (890, 713), "or Choose a Different Knob"
ChooseRotation:
Do While _MouseInput
' Choose Different Knob
For Z = 1 To 9
If _MouseX > KnobX(Z) - 50 And _MouseX < KnobX(Z) + 50 And _MouseY > KnobY(Z) - 50 And _MouseY < KnobY(Z) + 50 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: Paint (KnobX(Knob), KnobY(Knob)), 3, 1: Knob = Z:: Paint (KnobX(Knob), KnobY(Knob)), 15, 1: GoTo ChooseRotation
End If
Next
' Rotate Clockwise
If _MouseX > 803 And _MouseX < 943 And _MouseY > 370 And _MouseY < 510 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: RotateTiles Knob, 1: Paint (KnobX(Knob), KnobY(Knob)), 3, 1: Moves = Moves + 1: If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _PrintString (X, 410), Str$(Moves): GoTo ChooseKnob
End If
' Rotate Counter Clockwise
If _MouseX > 1107 And _MouseX < 1247 And _MouseY > 370 And _MouseY < 510 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: RotateTiles Knob, 2: Paint (KnobX(Knob), KnobY(Knob)), 3, 1: Moves = Moves + 1: If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _PrintString (X, 410), Str$(Moves):: GoTo ChooseKnob
End If
' Restart Puzzle
If _MouseX > 853 And _MouseX < 1009 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else SetupPuzzle: DisplayPuzzle: GoTo ChooseKnob
End If
' New Puzzle
If _MouseX > 1040 And _MouseX < 1197 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob
For Z = 1 To 24: Tile(Z) = 0: Next: GoTo Puzzle
End If
' Exit Puzzle
If _MouseX > 759 And _MouseX < 915 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else System
End If
' Load Puzzle
If _MouseX > 947 And _MouseX < 1103 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else GoTo LoardPuzzle
End If
' Save Puzzle
If _MouseX > 1135 And _MouseX < 1291 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: GoTo SavePuzzle
End If
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseRotation
Rotation:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (930, 685), Space$(250): _PrintString (890, 713), Space$(250)
RotateTiles Knob, Rotation
' Rest Knob Color
Paint (KnobX(Knob), KnobY(Knob)), 3, 1
' Chect if Ending Pattern is Complete
If CheckTiles(EndCard) = 1 Then
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (800, 685), "You have Completed this Puzzle in " + Str$(Moves) + " Moves"
_PrintString (870, 713), "Solve Another Puzzle? Y or N"
YorN: A$ = UCase$(InKey$): If A$ = "" GoTo YorN
If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
If A$ = "Y" Then Run
If A$ = "N" Then System
GoTo YorN
End If
' Start Next Move
Moves = Moves + 1: GoTo GameLoop
ReleaseButton:
Do While _MouseInput
If _MouseButton(1) = 0 Then Return
Loop
GoTo ReleaseButton
NoPuzzle:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (885, 685), "There are No Saved Puzzles": _PrintString (890, 713), "Press <ENTER> to Continee"
Enter: A$ = InKey$: If A$ = "" GoTo Enter Else If Asc(A$) <> 13 GoTo Enter
_PrintString (885, 685), Space$(300): _PrintString (890, 713), Space$(300)
GoTo ChooseKnob
LoardPuzzle:
On Error GoTo NoPuzzle
Open "TwizzleData" For Input As #1
Input #1, Level, StartCard, EndCard, Moves
For Z = 1 To 24: Input #1, Tile(Z): Next
Close #1
DisplayPuzzle
GoTo ChooseKnob
SavePuzzle:
Open "TwizzleData" For Output As #1
Write #1, Level, StartCard, EndCard, Moves
For Z = 1 To 24: Write #1, Tile(Z): Next
Close #1
PuzzleMessage
GoTo ChooseKnob
Sub DrawCard (X, Y, Card)
Dim As _Byte R, S, V, W, Z: V = LevelColor(Level)
Dim As Integer T, U
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Circle (X - 69, Y - 69), 10, V, 1.3, 3.3: Circle (X + 69, Y - 69), 10, V, 0, 1.8: Circle (X - 69, Y + 69), 10, V, 2.9, 4.8: Circle (X + 69, Y + 69), 10, V, 4.4, 0
Line (X - 69, Y - 79)-(X + 69, Y - 79), V: Line (X - 69, Y + 79)-(X + 69, Y + 79), V: Line (X - 79, Y - 69)-(X - 79, Y + 69), V: Line (X + 79, Y - 69)-(X + 79, Y + 69), V: Paint (X, Y), V
Circle (X - 65, Y - 65), 7, 15, 1.3, 3.3: Circle (X + 65, Y - 65), 7, 15, 0, 1.8: Circle (X - 65, Y + 65), 7, 15, 2.9, 4.8: Circle (X + 65, Y + 65), 7, 15, 4.4, 0
Line (X - 65, Y - 72)-(X + 65, Y - 72), 15: Line (X - 65, Y + 72)-(X + 65, Y + 72), 15: Line (X - 72, Y - 65)-(X - 72, Y + 65), 15: Line (X + 72, Y - 65)-(X + 72, Y + 65), 15: Paint (X, Y), 15
Circle (X, Y - 67), 3, V: Paint (X, Y - 67), V
Circle (X - 67, Y - 6), 3, V: Paint (X - 67, Y - 6), V: Circle (X - 67, Y + 6), 3, V: Paint (X - 67, Y + 6), V
Circle (X, Y + 67), 3, V: Paint (X, Y + 67), V: Circle (X - 12, Y + 67), 3, V: Paint (X - 12, Y + 67), V: Circle (X + 12, Y + 67), 3, V: Paint (X + 12, Y + 67), V
Circle (X + 67, Y - 6), 3, V: Paint (X + 67, Y - 6), V: Circle (X + 67, Y + 6), 3, V: Paint (X + 67, Y + 6), V: Circle (X + 67, Y - 18), 3, V: Paint (X + 67, Y - 18), V: Circle (X + 67, Y + 18), 3, V: Paint (X + 67, Y + 18), V
Circle (X - 30, Y - 30), 30, 0, 1.3, 3.3: Circle (X + 30, Y - 30), 30, 0, 0, 1.8: Circle (X - 30, Y + 30), 30, 0, 2.9, 4.8: Circle (X + 30, Y + 30), 30, 0, 4.4, 0
Line (X - 30, Y - 60)-(X + 30, Y - 60), 0: Line (X - 30, Y + 60)-(X + 30, Y + 60), 0: Line (X - 60, Y - 30)-(X - 60, Y + 30), 0: Line (X + 60, Y - 30)-(X + 60, Y + 30), 0: Paint (X, Y), 0
U = Y - 51: W = 0
For Z = 1 To 7
T = X - 51
For V = 1 To 7
If Z = 1 Or Z = 3 Or Z = 5 Or Z = 7 Then
If V = 2 Or V = 4 Or V = 6 Then
W = W + 1: S = CardPattern(Card, W): R = LevelColor(S)
If S > 0 Then Circle (T, U + 15), 20, R, .82, 2.33: Circle (T, U - 15), 20, R, 3.97, 5.454: Paint (T, U), R
End If
Else
If V = 1 Or V = 3 Or V = 5 Or V = 7 Then
W = W + 1: S = CardPattern(Card, W): R = LevelColor(S)
If S > 0 Then Circle (T + 15, U), 20, R, 2.36, 3.93: Circle (T - 15, U), 20, R, 5.5, .771: Paint (T, U), R
End If
End If
T = T + 17:
Next
U = U + 17
Next
End Sub
Sub DrawButtons
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 15, 0: font& = _LoadFont(BoldFont$, 30): _Font font&
' Restart Puzzle
Circle (873, 561), 21, 0, 1.4, 4.8: Circle (989, 561), 21, 0, 4.4, 1.6: Line (873, 540)-(989, 540), 0: Line (873, 582)-(989, 582), 0: Paint (873, 561), 0
_PrintString (888, 552), "Restart"
' Change Puzzle
Circle (1061, 561), 21, 0, 1.4, 4.8: Circle (1177, 561), 21, 0, 4.4, 1.6: Line (1061, 540)-(1177, 540), 0: Line (1061, 582)-(1177, 582), 0: Paint (1061, 561), 0
_PrintString (1088, 552), "New"
' Exit Puzzle
Circle (779, 634), 21, 0, 1.4, 4.8: Circle (895, 634), 21, 0, 4.4, 1.6: Line (779, 613)-(895, 613), 0: Line (779, 655)-(895, 655), 0: Paint (779, 634), 0
_PrintString (811, 625), "Exit"
' Load Puzzle
Circle (967, 634), 21, 0, 1.4, 4.8: Circle (1083, 634), 21, 0, 4.4, 1.6: Line (967, 613)-(1083, 613), 0: Line (967, 655)-(1083, 655), 0: Paint (967, 634), 0
_PrintString (997, 625), "Load"
' Save Puzzle
Circle (1155, 634), 21, 0, 1.4, 4.8: Circle (1271, 634), 21, 0, 4.4, 1.6: Line (1155, 613)-(1271, 613), 0: Line (1155, 655)-(1271, 655), 0: Paint (1155, 634), 0
_PrintString (1187, 625), "Save"
End Sub
Sub RotateTiles (Knob, Rotation)
Dim As _Byte Temp
Select Case Knob
Case 1
If Rotation = 1 Then
Temp = Tile(1):
Tile(1) = Tile(4): Paint (TileX(1), TileY(1)), LevelColor(Tile(1)), 1
Tile(4) = Tile(8): Paint (TileX(4), TileY(4)), LevelColor(Tile(4)), 1
Tile(8) = Tile(5): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(5) = Temp: Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Else
Temp = Tile(1):
Tile(1) = Tile(5): Paint (TileX(1), TileY(1)), LevelColor(Tile(1)), 1
Tile(5) = Tile(8): Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Tile(8) = Tile(4): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(4) = Temp: Paint (TileX(4), TileY(4)), LevelColor(Tile(4)), 1
End If
Case 2
If Rotation = 1 Then
Temp = Tile(2):
Tile(2) = Tile(5): Paint (TileX(2), TileY(2)), LevelColor(Tile(2)), 1
Tile(5) = Tile(9): Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Tile(9) = Tile(6): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(6) = Temp: Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Else
Temp = Tile(2):
Tile(2) = Tile(6): Paint (TileX(2), TileY(2)), LevelColor(Tile(2)), 1
Tile(6) = Tile(9): Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Tile(9) = Tile(5): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(5) = Temp: Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
End If
Case 3
If Rotation = 1 Then
Temp = Tile(3):
Tile(3) = Tile(6): Paint (TileX(3), TileY(3)), LevelColor(Tile(3)), 1
Tile(6) = Tile(10): Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Tile(10) = Tile(7): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(7) = Temp: Paint (TileX(7), TileY(7)), LevelColor(Tile(7)), 1
Else
Temp = Tile(3):
Tile(3) = Tile(7): Paint (TileX(3), TileY(3)), LevelColor(Tile(3)), 1
Tile(7) = Tile(10): Paint (TileX(7), TileY(7)), LevelColor(Tile(7)), 1
Tile(10) = Tile(6): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(6) = Temp: Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
End If
Case 4
If Rotation = 1 Then
Temp = Tile(8):
Tile(8) = Tile(11): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(11) = Tile(15): Paint (TileX(11), TileY(11)), LevelColor(Tile(11)), 1
Tile(15) = Tile(12): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(12) = Temp: Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Else
Temp = Tile(8):
Tile(8) = Tile(12): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(12) = Tile(15): Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Tile(15) = Tile(11): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(11) = Temp: Paint (TileX(11), TileY(11)), LevelColor(Tile(11)), 1
End If
Case 5
If Rotation = 1 Then
Temp = Tile(9):
Tile(9) = Tile(12): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(12) = Tile(16): Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Tile(16) = Tile(13): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(13) = Temp: Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Else
Temp = Tile(9):
Tile(9) = Tile(13): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(13) = Tile(16): Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Tile(16) = Tile(12): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(12) = Temp: Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
End If
Case 6
If Rotation = 1 Then
Temp = Tile(10):
Tile(10) = Tile(13): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(13) = Tile(17): Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Tile(17) = Tile(14): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(14) = Temp: Paint (TileX(14), TileY(14)), LevelColor(Tile(14)), 1
Else
Temp = Tile(10):
Tile(10) = Tile(14): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(14) = Tile(17): Paint (TileX(14), TileY(14)), LevelColor(Tile(14)), 1
Tile(17) = Tile(13): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(13) = Temp: Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
End If
Case 7
If Rotation = 1 Then
Temp = Tile(15):
Tile(15) = Tile(18): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(18) = Tile(22): Paint (TileX(18), TileY(18)), LevelColor(Tile(18)), 1
Tile(22) = Tile(19): Paint (TileX(22), TileY(22)), LevelColor(Tile(22)), 1
Tile(19) = Temp: Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Else
Temp = Tile(15):
Tile(15) = Tile(19): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(19) = Tile(22): Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Tile(22) = Tile(18): Paint (TileX(22), TileY(22)), LevelColor(Tile(22)), 1
Tile(18) = Temp: Paint (TileX(18), TileY(18)), LevelColor(Tile(18)), 1
End If
Case 8
If Rotation = 1 Then
Temp = Tile(16):
Tile(16) = Tile(19): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(19) = Tile(23): Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Tile(23) = Tile(20): Paint (TileX(23), TileY(23)), LevelColor(Tile(23)), 1
Tile(20) = Temp: Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Else
Temp = Tile(16):
Tile(16) = Tile(20): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(20) = Tile(23): Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Tile(23) = Tile(19): Paint (TileX(23), TileY(23)), LevelColor(Tile(23)), 1
Tile(19) = Temp: Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
End If
Case 9
If Rotation = 1 Then
Temp = Tile(17):
Tile(17) = Tile(20): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(20) = Tile(24): Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Tile(24) = Tile(21): Paint (TileX(24), TileY(24)), LevelColor(Tile(24)), 1
Tile(21) = Temp: Paint (TileX(21), TileY(21)), LevelColor(Tile(21)), 1
Else
Temp = Tile(17):
Tile(17) = Tile(21): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(21) = Tile(24): Paint (TileX(21), TileY(21)), LevelColor(Tile(21)), 1
Tile(24) = Tile(20): Paint (TileX(24), TileY(24)), LevelColor(Tile(24)), 1
Tile(20) = Temp: Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
End If
End Select
End Sub
Function CheckTiles (Card)
Dim As _Byte X, Z: X = 0
For Z = 1 To 24
If Tile(Z) = CardPattern(Card, Z) Then X = X + 1
Next
If X = 24 Then CheckTiles = 1 Else CheckTiles = 0
End Function
Function EndPuzzle
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (860, 685), Space$(250): _PrintString (870, 713), " End this Puzzle? Y or N "
YorN: A$ = UCase$(InKey$): If A$ = "" Then GoTo YorN
If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
If A$ = "Y" Then EndPuzzle = 1: GoTo EndSub
If A$ = "N" Then EndPuzzle = 0: GoTo EndSub
GoTo YorN
EndSub: Color 0, 15: _PrintString (870, 713), Space$(250)
End Function
Sub SetupPuzzle
For Z = 1 To 24: Tile(Z) = CardPattern(StartCard, Z): Next: Moves = 0
End Sub
Sub DisplayPuzzle
Dim As _Byte Z: Dim As Integer X
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 25): _Font font&
If Level = 1 Then _PrintString (883, 60), "L E V E L 1: B E G I N N E R"
If Level = 2 Then _PrintString (850, 60), "L E V E L 2: I N T E R M E D I A T E"
If Level = 3 Then _PrintString (883, 60), "L E V E L 3: A D V A N C E D"
If Level = 4 Then _PrintString (905, 60), "L E V E L 4: E X P E R T"
Line (795, 110)-(955, 270), 15, BF: DrawCard 875, 190, StartCard
Line (1097, 110)-(1257, 270), 15, BF: DrawCard 1177, 190, EndCard
If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _PrintString (X, 410), Str$(Moves)
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(Tile(Z)), 2: Next
End Sub
Sub PuzzleMessage
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _PrintString (885, 685), "Your Puzzle has been Saved": _PrintString (890, 713), "Press <ENTER> to Continee"
Enter2: A$ = InKey$: If A$ = "" GoTo Enter2 Else If Asc(A$) <> 13 GoTo Enter2
_PrintString (885, 685), Space$(300): _PrintString (890, 713), Space$(300)
End Sub
Posts: 4,155
Threads: 190
Joined: Apr 2022
Reputation:
263
05-27-2025, 02:42 PM
(This post was last modified: 05-27-2025, 02:45 PM by bplus.)
Still buggy, did you clear the YorN varaible? because it seems stuck on my last answer after I used it once.
I did manage to rotate a few circles before stuck.
Would be nice if screen dims a little smaller, and you could toggle the selected circle to dial rotation so don't have reclick same circle over and over to turn white back on.
b = b + ...
Posts: 4,155
Threads: 190
Joined: Apr 2022
Reputation:
263
05-27-2025, 05:31 PM
(This post was last modified: 05-27-2025, 05:32 PM by bplus.)
Check out fonts with _UprintString swapped in for _PrintString, much better!
Here is solved puzzle but no congrats or other acknowledgement???
b = b + ...
Posts: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
This all got screwed up when I accidently deleted the code and tried remember and rush fixing it. I changed my _PrintString to _UPrintString and didn't really notice a difference, except the names in 5 buttons got shifted down and I moved them back up. But, I also noticed the top of my numbers are not chopped off anymore. bplus, did you change the font used?
here is a fix to then not giving you credit for finishing the puzzle:
Code: (Select All) _Title "Twizzle Logic Puzzle"
Screen _NewImage(1324, 737, 256): Randomize Timer
Randomize Timer
_PaletteColor 1, _RGB32(1) ' Black
_PaletteColor 2, _RGB32(50) ' Black
_PaletteColor 3, _RGB32(100) ' Black
_PaletteColor 4, _RGB32(0, 185, 0) ' Green
_PaletteColor 5, _RGB32(0, 159, 255) ' Blue
_PaletteColor 6, _RGB32(129, 0, 125) ' Purple
_PaletteColor 7, _RGB32(225, 0, 0) ' Red
Dim As _Byte U, Y, Z, Selected, Selection, Position, Knob, Rotation
Dim As Integer V, W, X
Dim As Integer LevelY(4), KnobX(9), KnobY(9), CardX(10), CardY(10), Rotate1X, Rotate1Y, Rotate2X, Rotate2Y
Dim Shared As _Byte StartCard, EndCard, Level, Moves, LevelColor(4), Tile(24), CardPattern(40, 24)
Dim Shared As Integer TileX(24), TileY(24)
LevelColor(0) = 0: LevelColor(1) = 4: LevelColor(2) = 5: LevelColor(3) = 6: LevelColor(4) = 7
'Setup Card Patterns
Data 0,0,0,0,1,1,0,0,0,0,3,2,2,3,0,0,0,0,4,4,0,0,0,0: ' Card 01
Data 0,0,0,4,3,1,2,0,0,0,0,0,0,0,0,0,0,2,1,3,4,0,0,0: ' Card 02
Data 4,0,3,1,0,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,3,1,0,4: ' Card 03
Data 2,0,3,2,0,0,3,0,0,0,0,0,0,0,0,0,0,4,0,0,1,4,0,1: ' Card 04
Data 0,0,0,0,1,1,0,2,0,3,0,0,0,0,2,0,3,0,4,4,0,0,0,0: ' Card 05
Data 0,0,0,0,1,3,0,2,0,4,0,0,0,0,3,0,1,0,4,2,0,0,0,0: ' Card 06
Data 0,0,0,0,0,0,0,2,4,3,1,0,0,1,2,4,3,0,0,0,0,0,0,0: ' Card 07
Data 0,4,0,0,0,0,0,0,4,0,1,1,2,2,0,3,0,0,0,0,0,0,3,0: ' Card 08
Data 0,0,1,0,0,2,2,0,0,1,0,0,0,0,4,0,0,3,3,0,0,4,0,0: ' Card 09
Data 0,0,0,0,0,2,0,3,2,0,0,3,4,0,0,1,4,0,1,0,0,0,0,0: ' Card 10
Data 0,3,0,1,3,3,2,0,0,0,1,0,0,2,0,0,0,1,4,4,2,0,4,0: ' Card 11
Data 1,1,1,4,0,0,3,0,0,0,4,0,0,3,0,0,0,4,0,0,3,2,2,2: ' Card 12
Data 2,1,2,3,0,0,4,0,0,0,4,0,0,3,0,0,0,3,0,0,4,1,2,1: ' Card 13
Data 2,2,2,0,4,3,0,0,0,0,0,4,3,0,0,0,0,0,4,3,0,1,1,1: ' Card 14
Data 0,0,0,0,1,4,0,1,1,4,0,3,4,0,3,2,2,0,3,2,0,0,0,0: ' Card 15
Data 0,0,0,0,3,4,0,1,1,1,0,3,4,0,2,2,2,0,3,4,0,0,0,0: ' Card 16
Data 3,0,3,2,0,0,1,0,3,0,0,2,1,0,0,4,0,2,0,0,1,4,0,4: ' Card 17
Data 0,3,0,0,1,1,0,2,0,4,4,0,0,2,2,0,4,0,3,3,0,0,1,0: ' Card 18
Data 4,0,2,1,3,3,1,2,0,4,0,0,0,0,0,3,0,0,4,2,0,0,1,0: ' Card 19
Data 3,0,0,4,4,0,0,3,3,0,0,4,1,0,0,2,2,0,0,1,1,0,0,2: ' Card 20
Data 4,4,4,1,4,4,2,1,0,2,1,0,0,2,1,0,2,1,3,3,2,3,3,3: ' Card 21
Data 3,3,3,4,4,1,1,3,0,3,4,0,0,1,2,0,2,4,4,1,1,2,2,2: ' Card 22
Data 4,3,1,2,1,2,2,4,0,3,1,0,0,4,2,0,1,3,3,4,3,4,2,1: ' Card 23
Data 4,3,1,2,1,2,2,4,0,3,1,0,0,4,2,0,1,3,3,4,3,4,2,1: ' Card 24
Data 4,2,4,2,3,3,1,1,0,2,1,0,0,4,2,0,3,3,1,2,1,4,3,4: ' card 25
Data 3,2,2,3,2,0,2,0,2,4,3,3,4,4,3,1,0,1,0,1,4,1,1,4: ' Card 26
Data 2,2,0,3,2,2,0,3,2,4,3,3,4,4,3,1,4,0,1,1,4,0,1,1: ' Card 27
Data 3,0,1,4,1,4,3,2,2,2,0,1,4,0,3,3,3,4,1,4,2,2,0,1: ' Card 28
Data 1,0,3,1,1,2,4,1,2,4,0,2,4,0,2,4,3,2,4,3,3,1,0,3: ' Card 29
Data 4,0,2,4,4,2,2,4,4,2,0,1,2,0,1,3,3,1,1,3,3,1,0,3: ' Card 30
Data 1,1,1,4,4,3,3,1,1,1,4,4,3,3,2,2,2,4,4,3,3,2,2,2: ' Card 31
Data 1,1,1,2,3,3,1,3,3,3,2,4,3,1,4,4,4,2,4,4,1,2,2,2: ' Card 32
Data 2,1,2,4,1,1,3,3,1,4,3,3,4,4,3,2,4,4,2,2,3,1,2,1: ' Card 33
Data 4,2,2,1,4,2,2,1,4,2,3,1,4,2,3,1,4,3,3,1,4,3,3,1: ' Card 34
Data 3,3,3,4,1,1,3,2,2,2,4,1,1,3,2,2,2,4,1,1,3,4,4,4: ' Card 35
Data 1,1,1,4,2,1,3,4,4,4,4,2,1,3,3,3,3,4,2,1,3,2,2,2: ' Card 36
Data 2,2,2,4,3,3,1,1,3,4,4,1,4,1,1,2,4,4,2,2,1,3,3,3: ' Card 37
Data 3,3,3,3,3,1,1,3,1,1,2,2,1,1,2,2,4,2,2,4,4,4,4,4: ' Card 38
Data 3,3,2,3,3,2,2,3,3,2,1,1,2,2,1,4,4,1,1,4,4,1,4,4: ' Card 39
Data 1,1,1,3,1,1,4,3,1,4,3,3,4,4,3,2,4,3,2,2,4,2,2,2: ' Card 40
For Z = 1 To 40: For Y = 1 To 24: Read CardPattern(Z, Y): Next: Next
LevelCursor$ = "R389D55L389U55H1R391D57L391U57"
CardCursor$ = "R165D165L165U165H1R167D167L167U167H1R169D169"
Puzzle: Cls , 15
' Draw Board
Circle (170, 170), 160, 2, 1.4, 3.3: Circle (567, 170), 160, 2, 0, 1.8: Circle (170, 567), 160, 2, 2.9, 4.8: Circle (567, 567), 160, 2, 4.4, 0
Line (170, 10)-(567, 10), 2: Line (170, 727)-(567, 727), 2: Line (10, 170)-(10, 567), 2: Line (727, 170)-(727, 567), 2: Paint (170, 170), 2
X = 70: W = 0: U = 0
For Z = 1 To 7
V = 70
For Y = 1 To 7
If Z = 1 Or Z = 3 Or Z = 5 Or Z = 7 Then
If Y = 2 Or Y = 4 Or Y = 6 Then
Circle (V, X + 100), 138, 1, .81, 2.34: Circle (V, X - 100), 138, 1, 3.96, 5.455: Paint (V, X), 0, 1
Tile(U) = 0: U = U + 1: TileX(U) = V: TileY(U) = X
End If
Else
If Y = 1 Or Y = 3 Or Y = 5 Or Y = 7 Then
Circle (V + 100, X), 138, 1, 2.36, 3.93: Circle (V - 100, X), 138, 1, 5.5, .771: Paint (V, X), 0, 1
Tile(U) = 0: U = U + 1: TileX(U) = V: TileY(U) = X
End If
If Y = 2 Or Y = 4 Or Y = 6 Then Circle (V, X), 50, 1: Paint (V, X), 3, 1: W = W + 1: KnobX(W) = V: KnobY(W) = X
End If
V = V + 100
Next
X = X + 100
Next
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 30): _Font font&: _UPrintString (820, 10), "T W I Z Z L E L O G I C P U Z Z L E"
font& = _LoadFont(BoldFont$, 25): _Font font&:
X = 220
For Z = 1 To 4
Color LevelColor(Z), 15
If Z = 1 Then _UPrintString (883, X), "L E V E L 1: B E G I N N E R"
If Z = 2 Then _UPrintString (850, X), "L E V E L 2: I N T E R M E D I A T E"
If Z = 3 Then _UPrintString (883, X), "L E V E L 3: A D V A N C E D"
If Z = 4 Then _UPrintString (905, X), "L E V E L 4: E X P E R T"
LevelY(Z) = X: X = X + 100
Next
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (920, 713), "Choose a Level to Play"
ChooseLevel:
Do While _MouseInput
For Z = 1 To 4
If _MouseX > 830 And _MouseY < 1219 And _MouseY > LevelY(Z) - 20 And _MouseY < LevelY(Z) + 35 Then Selected = 1 Else Selected = 0
If Selected = 1 Then PSet (830, LevelY(Z) - 20), 0: Draw LevelCursor$ Else PSet (830, LevelY(Z) - 20), 15: Draw LevelCursor$
If _MouseButton(1) = -1 And Selected = 1 Then GoSub ReleaseButton: Level = Z: GoTo ClearLevels
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseLevel
ClearLevels:
Line (828, 198)-(1220, 560), 15, BF: Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (920, 713), Space$(300)
Color 0, 15: _UPrintString (905, 320), "Choose Cards Randomly": _UPrintString (915, 420), "Choose Cards Yourself"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (920, 713), "Choose Cards Selection"
ChooseCardSelection:
Do While _MouseInput
For Z = 1 To 2
If _MouseX > 830 And _MouseY < 1219 And _MouseY > LevelY(Z + 1) - 20 And _MouseY < LevelY(Z + 1) + 35 Then Selected = 1 Else Selected = 0
If Selected = 1 Then PSet (830, LevelY(Z + 1) - 20), 0: Draw LevelCursor$ Else PSet (830, LevelY(Z + 1) - 20), 15: Draw LevelCursor$
If _MouseButton(1) = -1 And Selected = 1 Then GoSub ReleaseButton: Selection = Z: GoTo ChooseCards
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseCardSelection
ChooseCards:
Line (828, 198)-(1220, 560), 15, BF: Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (920, 713), Space$(300)
If Selection = 2 Then
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
X = 118: Position = 1
For Z = 1 To 4
If Z = 4 Then W = 1: V = 1025 Else W = 3: V = 857
For Y = 1 To W
DrawCard V, X, Card: CardX(Position) = V: CardY(Position) = X
Card = Card + 1: Position = Position + 1: V = V + 168
Next
X = X + 168
Next
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (910, 713), "Choose a Starting Card"
StartingCard:
Do While _MouseInput
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
For Z = 1 To 10
If _MouseX > CardX(Z) - 80 And _MouseX < CardX(Z) + 80 And _MouseY > CardY(Z) - 80 And _MouseY < CardY(Z) + 80 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: StartCard = Card: Position = Z: GoTo PlaceStartCard
End If
Card = Card + 1
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo StartingCard
PlaceStartCard:
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(CardPattern(StartCard, Z)), 1: Tile(Z) = CardPattern(StartCard, Z): Next
Line (CardX(Position) - 80, CardY(Position) - 80)-(CardX(Position) + 80, CardY(Position) + 80), 15, BF
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (910, 713), "Choose an Ending Card"
EndingCard:
Do While _MouseInput
If Level = 1 Then Card = 1 Else If Level = 2 Then Card = 11 Else If Level = 3 Then Card = 21 Else Card = 31
For Z = 1 To 10
If _MouseX > CardX(Z) - 80 And _MouseX < CardX(Z) + 80 And _MouseY > CardY(Z) - 80 And _MouseY < CardY(Z) + 80 And _MouseButton(1) = -1 Then
If Z <> Position Then GoSub ReleaseButton: EndCard = Card: GoTo ClearCards
End If
Card = Card + 1
Next
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo EndingCard
ClearCards: Line (777, 38)-(1290, 737), 15, BF
Else
Card1 = Int(Rnd * 10) + 1
If Level = 1 Then StartCard = Card1 Else If Level = 2 Then StartCard = Card1 + 10 Else If Level = 3 Then StartCard = Card1 + 20 Else If Level = 4 Then StartCard = Card1 + 30
GetCard2: card2 = Int(Rnd * 10) + 1: If card2 = Card1 GoTo GetCard2
If Level = 1 Then EndCard = card2 Else If Level = 2 Then EndCard = card2 + 10 Else If Level = 3 Then EndCard = card2 + 20 Else If Level = 4 Then EndCard = card2 + 30
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(CardPattern(StartCard, Z)), 1: Tile(Z) = CardPattern(StartCard, Z): Next
End If
' Display Level
Color LevelColor(Level), 15
If Level = 1 Then _UPrintString (883, 60), "L E V E L 1: B E G I N N E R"
If Level = 2 Then _UPrintString (850, 60), "L E V E L 2: I N T E R M E D I A T E"
If Level = 3 Then _UPrintString (883, 60), "L E V E L 3: A D V A N C E D"
If Level = 4 Then _UPrintString (905, 60), "L E V E L 4: E X P E R T"
' Display Cards
DrawCard 873, 190, StartCard: DrawCard 1177, 190, EndCard: PSet (980, 190), 0: Draw "D30R30D30E60H60D30L30D30BR10P0,0"
Color 0, 15: _UPrintString (825, 280), "STARTING": Color 0, 15: _UPrintString (830, 305), "PATTERN"
Color 0, 15: _UPrintString (1135, 280), "ENDING": Color 0, 15: _UPrintString (1130, 305), "PATTERN"
' Display Rotation Arrows
Circle (873, 440), 70, 0, 1.5, 0: Circle (873, 440), 50, 0, 1.5, 0: PSet (873, 370), 0: Draw "U20F30G30U20BD50BR50R20BG10P0,0"
Circle (1177, 440), 70, 0, 3.1, 1.6: Circle (1177, 440), 50, 0, 3.1, 1.6: PSet (1177, 370), 0: Draw "U20G30F30U20BD50BL50L20BF10P0,0"
Color 0, 15: font& = _LoadFont(BoldFont$, 35): _Font font&: _PrintString (955, 370), "M O V E S": Moves = 0
' Display Buttons
DrawButtons
GameLoop:
' Display Move
If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _PrintString (X, 410), Str$(Moves)
ChooseKnob:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (910, 713), "Choose Knob to Rotate"
ChooseKnobInput:
Do While _MouseInput
' Select Knob
For Z = 1 To 9
If _MouseX > KnobX(Z) - 50 And _MouseX < KnobX(Z) + 50 And _MouseY > KnobY(Z) - 50 And _MouseY < KnobY(Z) + 50 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: Knob = Z: GoTo SelectKnob
End If
Next
' Restart Puzzle
If _MouseX > 853 And _MouseX < 1009 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else SetupPuzzle: DisplayPuzzle: GoTo ChooseKnob
End If
' New Puzzle
If _MouseX > 1040 And _MouseX < 1197 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob
For Z = 1 To 24: Tile(Z) = 0: Next: GoTo Puzzle
End If
' Exit Puzzle
If _MouseX > 759 And _MouseX < 915 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else System
End If
' Load Puzzle
If _MouseX > 947 And _MouseX < 1103 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else GoTo LoardPuzzle
End If
' Save Puzzle
If _MouseX > 1135 And _MouseX < 1291 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: GoTo SavePuzzle
End If
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseKnobInput
SelectKnob:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (910, 713), Space$(250)
' Show Selected Knob
Paint (KnobX(Knob), KnobY(Knob)), 15, 1
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (930, 685), "Choose a Direction": _UPrintString (890, 713), "or Choose a Different Knob"
ChooseRotation:
Do While _MouseInput
' Choose Different Knob
For Z = 1 To 9
If _MouseX > KnobX(Z) - 50 And _MouseX < KnobX(Z) + 50 And _MouseY > KnobY(Z) - 50 And _MouseY < KnobY(Z) + 50 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: Paint (KnobX(Knob), KnobY(Knob)), 3, 1: Knob = Z:: Paint (KnobX(Knob), KnobY(Knob)), 15, 1: GoTo ChooseRotation
End If
Next
' Rotate Clockwise
If _MouseX > 803 And _MouseX < 943 And _MouseY > 370 And _MouseY < 510 And _MouseButton(1) = -1 Then GoSub ReleaseButton: Rotation = 1: GoTo Rotation
' Rotate Counter Clockwise
If _MouseX > 1107 And _MouseX < 1247 And _MouseY > 370 And _MouseY < 510 And _MouseButton(1) = -1 Then GoSub ReleaseButton: Rotation = 2: GoTo Rotation
' Restart Puzzle
If _MouseX > 853 And _MouseX < 1009 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else SetupPuzzle: DisplayPuzzle: GoTo ChooseKnob
End If
' New Puzzle
If _MouseX > 1040 And _MouseX < 1197 And _MouseY > 520 And _MouseY < 602 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob
For Z = 1 To 24: Tile(Z) = 0: Next: GoTo Puzzle
End If
' Exit Puzzle
If _MouseX > 759 And _MouseX < 915 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else System
End If
' Load Puzzle
If _MouseX > 947 And _MouseX < 1103 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: If EndPuzzle = 0 GoTo ChooseKnob Else GoTo LoardPuzzle
End If
' Save Puzzle
If _MouseX > 1135 And _MouseX < 1291 And _MouseY > 613 And _MouseY < 653 And _MouseButton(1) = -1 Then
GoSub ReleaseButton: GoTo SavePuzzle
End If
Loop
A$ = InKey$: If A$ <> "" Then If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
GoTo ChooseRotation
Rotation:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (930, 685), Space$(250): _UPrintString (890, 713), Space$(250)
RotateTiles Knob, Rotation
' Rest Knob Color
Paint (KnobX(Knob), KnobY(Knob)), 3, 1
' Chect if Ending Pattern is Complete
If CheckTiles(EndCard) = 1 Then
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (800, 685), "You have Completed this Puzzle in " + Str$(Moves) + " Moves"
_PrintString (870, 713), "Solve Another Puzzle? Y or N"
YorN: A$ = UCase$(InKey$): If A$ = "" GoTo YorN
If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
If A$ = "Y" Then Run
If A$ = "N" Then System
GoTo YorN
End If
' Start Next Move
Moves = Moves + 1: GoTo GameLoop
ReleaseButton:
Do While _MouseInput
If _MouseButton(1) = 0 Then Return
Loop
GoTo ReleaseButton
NoPuzzle:
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (885, 685), "There are No Saved Puzzles": _UPrintString (890, 713), "Press <ENTER> to Continee"
Enter: A$ = InKey$: If A$ = "" GoTo Enter Else If Asc(A$) <> 13 GoTo Enter
_UPrintString (885, 685), Space$(300): _UPrintString (890, 713), Space$(300)
GoTo ChooseKnob
LoardPuzzle:
On Error GoTo NoPuzzle
Open "TwizzleData" For Input As #1
Input #1, Level, StartCard, EndCard, Moves
For Z = 1 To 24: Input #1, Tile(Z): Next
Close #1
DisplayPuzzle
GoTo ChooseKnob
SavePuzzle:
Open "TwizzleData" For Output As #1
Write #1, Level, StartCard, EndCard, Moves
For Z = 1 To 24: Write #1, Tile(Z): Next
Close #1
PuzzleMessage
GoTo ChooseKnob
Sub DrawCard (X, Y, Card)
Dim As _Byte R, S, V, W, Z: V = LevelColor(Level)
Dim As Integer T, U
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Circle (X - 69, Y - 69), 10, V, 1.3, 3.3: Circle (X + 69, Y - 69), 10, V, 0, 1.8: Circle (X - 69, Y + 69), 10, V, 2.9, 4.8: Circle (X + 69, Y + 69), 10, V, 4.4, 0
Line (X - 69, Y - 79)-(X + 69, Y - 79), V: Line (X - 69, Y + 79)-(X + 69, Y + 79), V: Line (X - 79, Y - 69)-(X - 79, Y + 69), V: Line (X + 79, Y - 69)-(X + 79, Y + 69), V: Paint (X, Y), V
Circle (X - 65, Y - 65), 7, 15, 1.3, 3.3: Circle (X + 65, Y - 65), 7, 15, 0, 1.8: Circle (X - 65, Y + 65), 7, 15, 2.9, 4.8: Circle (X + 65, Y + 65), 7, 15, 4.4, 0
Line (X - 65, Y - 72)-(X + 65, Y - 72), 15: Line (X - 65, Y + 72)-(X + 65, Y + 72), 15: Line (X - 72, Y - 65)-(X - 72, Y + 65), 15: Line (X + 72, Y - 65)-(X + 72, Y + 65), 15: Paint (X, Y), 15
Circle (X, Y - 67), 3, V: Paint (X, Y - 67), V
Circle (X - 67, Y - 6), 3, V: Paint (X - 67, Y - 6), V: Circle (X - 67, Y + 6), 3, V: Paint (X - 67, Y + 6), V
Circle (X, Y + 67), 3, V: Paint (X, Y + 67), V: Circle (X - 12, Y + 67), 3, V: Paint (X - 12, Y + 67), V: Circle (X + 12, Y + 67), 3, V: Paint (X + 12, Y + 67), V
Circle (X + 67, Y - 6), 3, V: Paint (X + 67, Y - 6), V: Circle (X + 67, Y + 6), 3, V: Paint (X + 67, Y + 6), V: Circle (X + 67, Y - 18), 3, V: Paint (X + 67, Y - 18), V: Circle (X + 67, Y + 18), 3, V: Paint (X + 67, Y + 18), V
Circle (X - 30, Y - 30), 30, 0, 1.3, 3.3: Circle (X + 30, Y - 30), 30, 0, 0, 1.8: Circle (X - 30, Y + 30), 30, 0, 2.9, 4.8: Circle (X + 30, Y + 30), 30, 0, 4.4, 0
Line (X - 30, Y - 60)-(X + 30, Y - 60), 0: Line (X - 30, Y + 60)-(X + 30, Y + 60), 0: Line (X - 60, Y - 30)-(X - 60, Y + 30), 0: Line (X + 60, Y - 30)-(X + 60, Y + 30), 0: Paint (X, Y), 0
U = Y - 51: W = 0
For Z = 1 To 7
T = X - 51
For V = 1 To 7
If Z = 1 Or Z = 3 Or Z = 5 Or Z = 7 Then
If V = 2 Or V = 4 Or V = 6 Then
W = W + 1: S = CardPattern(Card, W): R = LevelColor(S)
If S > 0 Then Circle (T, U + 15), 20, R, .82, 2.33: Circle (T, U - 15), 20, R, 3.97, 5.454: Paint (T, U), R
End If
Else
If V = 1 Or V = 3 Or V = 5 Or V = 7 Then
W = W + 1: S = CardPattern(Card, W): R = LevelColor(S)
If S > 0 Then Circle (T + 15, U), 20, R, 2.36, 3.93: Circle (T - 15, U), 20, R, 5.5, .771: Paint (T, U), R
End If
End If
T = T + 17:
Next
U = U + 17
Next
End Sub
Sub DrawButtons
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 15, 0: font& = _LoadFont(BoldFont$, 30): _Font font&
' Restart Puzzle
Circle (873, 561), 21, 0, 1.4, 4.8: Circle (989, 561), 21, 0, 4.4, 1.6: Line (873, 540)-(989, 540), 0: Line (873, 582)-(989, 582), 0: Paint (873, 561), 0
_UPrintString (888, 548), "Restart"
' Change Puzzle
Circle (1061, 561), 21, 0, 1.4, 4.8: Circle (1177, 561), 21, 0, 4.4, 1.6: Line (1061, 540)-(1177, 540), 0: Line (1061, 582)-(1177, 582), 0: Paint (1061, 561), 0
_UPrintString (1088, 548), "New"
' Exit Puzzle
Circle (779, 634), 21, 0, 1.4, 4.8: Circle (895, 634), 21, 0, 4.4, 1.6: Line (779, 613)-(895, 613), 0: Line (779, 655)-(895, 655), 0: Paint (779, 634), 0
_UPrintString (811, 621), "Exit"
' Load Puzzle
Circle (967, 634), 21, 0, 1.4, 4.8: Circle (1083, 634), 21, 0, 4.4, 1.6: Line (967, 613)-(1083, 613), 0: Line (967, 655)-(1083, 655), 0: Paint (967, 634), 0
_UPrintString (997, 621), "Load"
' Save Puzzle
Circle (1155, 634), 21, 0, 1.4, 4.8: Circle (1271, 634), 21, 0, 4.4, 1.6: Line (1155, 613)-(1271, 613), 0: Line (1155, 655)-(1271, 655), 0: Paint (1155, 634), 0
_UPrintString (1187, 621), "Save"
End Sub
Sub RotateTiles (Knob, Rotation)
Dim As _Byte Temp
Select Case Knob
Case 1
If Rotation = 1 Then
Temp = Tile(1):
Tile(1) = Tile(4): Paint (TileX(1), TileY(1)), LevelColor(Tile(1)), 1
Tile(4) = Tile(8): Paint (TileX(4), TileY(4)), LevelColor(Tile(4)), 1
Tile(8) = Tile(5): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(5) = Temp: Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Else
Temp = Tile(1):
Tile(1) = Tile(5): Paint (TileX(1), TileY(1)), LevelColor(Tile(1)), 1
Tile(5) = Tile(8): Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Tile(8) = Tile(4): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(4) = Temp: Paint (TileX(4), TileY(4)), LevelColor(Tile(4)), 1
End If
Case 2
If Rotation = 1 Then
Temp = Tile(2):
Tile(2) = Tile(5): Paint (TileX(2), TileY(2)), LevelColor(Tile(2)), 1
Tile(5) = Tile(9): Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
Tile(9) = Tile(6): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(6) = Temp: Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Else
Temp = Tile(2):
Tile(2) = Tile(6): Paint (TileX(2), TileY(2)), LevelColor(Tile(2)), 1
Tile(6) = Tile(9): Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Tile(9) = Tile(5): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(5) = Temp: Paint (TileX(5), TileY(5)), LevelColor(Tile(5)), 1
End If
Case 3
If Rotation = 1 Then
Temp = Tile(3):
Tile(3) = Tile(6): Paint (TileX(3), TileY(3)), LevelColor(Tile(3)), 1
Tile(6) = Tile(10): Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
Tile(10) = Tile(7): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(7) = Temp: Paint (TileX(7), TileY(7)), LevelColor(Tile(7)), 1
Else
Temp = Tile(3):
Tile(3) = Tile(7): Paint (TileX(3), TileY(3)), LevelColor(Tile(3)), 1
Tile(7) = Tile(10): Paint (TileX(7), TileY(7)), LevelColor(Tile(7)), 1
Tile(10) = Tile(6): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(6) = Temp: Paint (TileX(6), TileY(6)), LevelColor(Tile(6)), 1
End If
Case 4
If Rotation = 1 Then
Temp = Tile(8):
Tile(8) = Tile(11): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(11) = Tile(15): Paint (TileX(11), TileY(11)), LevelColor(Tile(11)), 1
Tile(15) = Tile(12): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(12) = Temp: Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Else
Temp = Tile(8):
Tile(8) = Tile(12): Paint (TileX(8), TileY(8)), LevelColor(Tile(8)), 1
Tile(12) = Tile(15): Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Tile(15) = Tile(11): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(11) = Temp: Paint (TileX(11), TileY(11)), LevelColor(Tile(11)), 1
End If
Case 5
If Rotation = 1 Then
Temp = Tile(9):
Tile(9) = Tile(12): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(12) = Tile(16): Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
Tile(16) = Tile(13): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(13) = Temp: Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Else
Temp = Tile(9):
Tile(9) = Tile(13): Paint (TileX(9), TileY(9)), LevelColor(Tile(9)), 1
Tile(13) = Tile(16): Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Tile(16) = Tile(12): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(12) = Temp: Paint (TileX(12), TileY(12)), LevelColor(Tile(12)), 1
End If
Case 6
If Rotation = 1 Then
Temp = Tile(10):
Tile(10) = Tile(13): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(13) = Tile(17): Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
Tile(17) = Tile(14): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(14) = Temp: Paint (TileX(14), TileY(14)), LevelColor(Tile(14)), 1
Else
Temp = Tile(10):
Tile(10) = Tile(14): Paint (TileX(10), TileY(10)), LevelColor(Tile(10)), 1
Tile(14) = Tile(17): Paint (TileX(14), TileY(14)), LevelColor(Tile(14)), 1
Tile(17) = Tile(13): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(13) = Temp: Paint (TileX(13), TileY(13)), LevelColor(Tile(13)), 1
End If
Case 7
If Rotation = 1 Then
Temp = Tile(15):
Tile(15) = Tile(18): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(18) = Tile(22): Paint (TileX(18), TileY(18)), LevelColor(Tile(18)), 1
Tile(22) = Tile(19): Paint (TileX(22), TileY(22)), LevelColor(Tile(22)), 1
Tile(19) = Temp: Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Else
Temp = Tile(15):
Tile(15) = Tile(19): Paint (TileX(15), TileY(15)), LevelColor(Tile(15)), 1
Tile(19) = Tile(22): Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Tile(22) = Tile(18): Paint (TileX(22), TileY(22)), LevelColor(Tile(22)), 1
Tile(18) = Temp: Paint (TileX(18), TileY(18)), LevelColor(Tile(18)), 1
End If
Case 8
If Rotation = 1 Then
Temp = Tile(16):
Tile(16) = Tile(19): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(19) = Tile(23): Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
Tile(23) = Tile(20): Paint (TileX(23), TileY(23)), LevelColor(Tile(23)), 1
Tile(20) = Temp: Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Else
Temp = Tile(16):
Tile(16) = Tile(20): Paint (TileX(16), TileY(16)), LevelColor(Tile(16)), 1
Tile(20) = Tile(23): Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Tile(23) = Tile(19): Paint (TileX(23), TileY(23)), LevelColor(Tile(23)), 1
Tile(19) = Temp: Paint (TileX(19), TileY(19)), LevelColor(Tile(19)), 1
End If
Case 9
If Rotation = 1 Then
Temp = Tile(17):
Tile(17) = Tile(20): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(20) = Tile(24): Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
Tile(24) = Tile(21): Paint (TileX(24), TileY(24)), LevelColor(Tile(24)), 1
Tile(21) = Temp: Paint (TileX(21), TileY(21)), LevelColor(Tile(21)), 1
Else
Temp = Tile(17):
Tile(17) = Tile(21): Paint (TileX(17), TileY(17)), LevelColor(Tile(17)), 1
Tile(21) = Tile(24): Paint (TileX(21), TileY(21)), LevelColor(Tile(21)), 1
Tile(24) = Tile(20): Paint (TileX(24), TileY(24)), LevelColor(Tile(24)), 1
Tile(20) = Temp: Paint (TileX(20), TileY(20)), LevelColor(Tile(20)), 1
End If
End Select
End Sub
Function CheckTiles (Card)
Dim As _Byte X, Z: X = 0
For Z = 1 To 24
If Tile(Z) = CardPattern(Card, Z) Then X = X + 1
Next
If X = 24 Then CheckTiles = 1 Else CheckTiles = 0
End Function
Function EndPuzzle
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (860, 685), Space$(250): _UPrintString (870, 713), " End this Puzzle? Y or N "
YorN: A$ = UCase$(InKey$): If A$ = "" Then GoTo YorN
If Asc(A$) = 27 And FullScreen = 0 Then FullScreen = -1: _FullScreen _SquarePixels , _Smooth Else If Asc(A$) = 27 Then FullScreen = 0: _FullScreen _Off
If A$ = "Y" Then EndPuzzle = 1: GoTo EndSub
If A$ = "N" Then EndPuzzle = 0: GoTo EndSub
GoTo YorN
EndSub: Color 0, 15: _UPrintString (870, 713), Space$(250)
End Function
Sub SetupPuzzle
For Z = 1 To 24: Tile(Z) = CardPattern(StartCard, Z): Next: Moves = 0
End Sub
Sub DisplayPuzzle
Dim As _Byte Z: Dim As Integer X
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 25): _Font font&
If Level = 1 Then _UPrintString (883, 60), "L E V E L 1: B E G I N N E R"
If Level = 2 Then _UPrintString (850, 60), "L E V E L 2: I N T E R M E D I A T E"
If Level = 3 Then _UPrintString (883, 60), "L E V E L 3: A D V A N C E D"
If Level = 4 Then _UPrintString (905, 60), "L E V E L 4: E X P E R T"
Line (795, 110)-(955, 270), 15, BF: DrawCard 875, 190, StartCard
Line (1097, 110)-(1257, 270), 15, BF: DrawCard 1177, 190, EndCard
If Moves < 10 Then X = 970 Else X = 935
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _UPrintString (X, 410), Str$(Moves)
For Z = 1 To 24: Paint (TileX(Z), TileY(Z)), LevelColor(Tile(Z)), 2: Next
End Sub
Sub PuzzleMessage
BoldFont$ = Environ$("SYSTEMROOT") + "\fonts\Calibrib.ttf"
Color 0, 15: font& = _LoadFont(BoldFont$, 25): _Font font&: _UPrintString (885, 685), "Your Puzzle has been Saved": _UPrintString (890, 713), "Press <ENTER> to Continee"
Enter2: A$ = InKey$: If A$ = "" GoTo Enter2 Else If Asc(A$) <> 13 GoTo Enter2
_UPrintString (885, 685), Space$(300): _UPrintString (890, 713), Space$(300)
End Sub
Posts: 4,155
Threads: 190
Joined: Apr 2022
Reputation:
263
" bplus, did you change the font used? "
No, it's _UPrintString that does a better job showing Windows fonts (at least) more completely than _PrintString.
But I guess it did change the alignment with your buttons. I noticed today the 40 Moves, 40 digging into the left rotation symbol on screen, better not go above 99 Moves
b = b + ...
|