Posts: 718
Threads: 110
Joined: Apr 2022
Reputation:
28
05-28-2025, 10:24 PM
(This post was last modified: 05-28-2025, 10:26 PM by PhilOfPerth.)
(05-28-2025, 02:09 AM)Donald Foster Wrote: 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
While experimenting with your game, I found that eliminating line330(Goto ChooseRrotation) made it easier to play - clicking the circles to rotate, rotated the disc 90 degreees each time, with no need to use rotation buttons. Not sure what else is affected, but... worth a look?
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: 36
Threads: 14
Joined: Jul 2022
Reputation:
10
PhilOfPerth, the purpose of line 330 in continue the input loop back to the top of the loop. I gets input from the mouse and keyboard. I removed it and it bypassed the input question to choose the rotation.
bplus, _UPrintString did help fix the top of the characters were trimmed on top portion, flattening it. Thanks for the suggestion. Also, the left rotation arrow was being chopped into because I needed to add LTRIM and move the number over some.
Here is the updated 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&: _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&: _UPrintString (955, 370), "M O V E S": Moves = 0
' Display Buttons
DrawButtons
GameLoop:
' Display Move
If Moves < 10 Then X = 995 Else X = 960
Color LevelColor(Level), 15: font& = _LoadFont(BoldFont$, 120): _Font font&: _UPrintString (X, 410), LTrim$(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: 718
Threads: 110
Joined: Apr 2022
Reputation:
28
(05-29-2025, 10:36 PM)Donald Foster Wrote: PhilOfPerth, the purpose of line 330 in continue the input loop back to the top of the loop. I gets input from the mouse and keyboard. I removed it and it bypassed the input question to choose the rotation.
Hi Donald.
That's what I was trying to say... it removes the need to press the rotate-directions buttons, and the need to re-select the group for each rotation. Personally, I found it easier to play with this change. 
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
+1 I think you are speaking of same issue I had playing the game and always having to reset which dial to rotate. They should toggle with mouse click when you want to change the white circle signal.
b = b + ...
|