Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Twizzle Logic Puzzle Game
#11
(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.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#12
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
Reply
#13
(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.  Smile
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#14
+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 + ...
Reply




Users browsing this thread: 1 Guest(s)