vs GUI Updates - the latest from b+
#17
This fixes the little problem getting buttons clicked, sorry poor coding on my part in BtnClickEvent, this is more efficient:
Code: (Select All)
Option _Explicit
' Pretty good Article on Waffle:   https://nerdschalk.com/waffle-wordle-game-spinoff-how-to-play-where-to-play-gameplay-rules-strategies-and-more/
' 2022-08-05 fix poor coding in BtnClickEvent

'$include:'vs GUI.BI'
Randomize Timer
Dim Shared As String Dict(1 To 3146), TheWaffle(1 To 6)
Dim Shared As Long TopWordN, BT(1 To 21), Turn, B1Click, NSwaps, lblSwaps
_Title "GUI Waffle"
Intro

'   Set Globals from BI
Xmax = 620: Ymax = 620: GuiTitle$ = "GUI Waffle"
OpenWindow Xmax, Ymax, GuiTitle$, "arial.ttf" ' need to do this before drawing anything from NewControls"
Init ' calls ColorMyWorld to show puzzle
MainRouter ' after all controls setup

Sub BtnClickEvent (i As Long)
    If con(BT(i)).BC = C3(60) Then Beep: Exit Sub ' ignore green button clicks!
    Turn = Turn + 1
    If Turn = 1 Then
        B1Click = i ' save the place
        ActiveControl = i
        drwBtn BT(i), -1 ' high light
    ElseIf Turn = 2 Then
        If i = B1Click Then ' Cancel the first click
            drwBtn BT(i), 0 ' turn off high light
        Else
            Swap con(BT(i)).Text, con(BT(B1Click)).Text
            NSwaps = NSwaps - 1
            ColorMyWorld
        End If
        Turn = 0 'resets
        ActiveControl = 0
        B1Click = 0
    End If
End Sub

Sub LstSelectEvent (control As Long)
    control = control
End Sub

Sub PicClickEvent (i As Long, Pmx As Long, Pmy As Long)
    i = i: Pmx = Pmx: Pmy = Pmy
End Sub

Sub PicFrameUpdate (i As Long)
    i = i
End Sub

Sub Intro
    Screen _NewImage(600, 400, 32) ' leave room for Editor window next to this QB64 app
    _ScreenMove 200, 200
    Color _RGB32(200, 200, 200), _RGB32(0, 0, 0) ' not too bright white on black for normal print
    '      123456789012345678901234567890123456789012345678901234567890123456789012345
    Locate 6, 1
    Print "                          The Syrup on Waffle:"
    Print
    Print "      6 5-Letter Words have been laid out: 3 across and 3 down in a"
    Print "        Waffle pattern. Their letters have been swapped around and"
    Print "        your job is to get them back in order in 15 swaps or less."
    Print
    Print "            Clues: Green background letters are in right spot,"
    Print "              Yellow backgrounds are in right row or column"
    Print "         (be careful, could be either word at an intersections),"
    Print "            White backgrounds are totally out of their words."
    Print
    Print
    Print "               ... zzz   Press a key to continue  ...zzz"
    LoadDictionary
    Sleep
End Sub

Sub Init ' create controls and variables to start first game
    Dim As Long i, y, x
    i = 1
    For y = 0 To 4
        For x = 0 To 4
            If (x = 1 Or x = 3) And (y = 1 Or y = 3) Then
                ' skip
            Else
                BT(i) = NewControl(1, x * 120 + 20, y * 120 + 20, 100, 100, 45, 0, 0, "")
                i = i + 1
            End If
        Next
    Next
    lblSwaps = NewControl(4, 381, 381, 98, 98, 40, 0, 0, "")
    ResetGame
End Sub

Sub ResetGame ' reset Controls and Variables for new game
    Dim As Long i
    NSwaps = 15
    Turn = 0
    B1Click = 0
    MakeWaffle
    For i = 1 To 5
        con(BT(i)).Text = Mid$(TheWaffle(1), i, 1)
    Next
    For i = 9 To 13
        con(BT(i)).Text = Mid$(TheWaffle(2), i - 8, 1)
    Next
    For i = 17 To 21
        con(BT(i)).Text = Mid$(TheWaffle(3), i - 16, 1)
    Next
    con(BT(6)).Text = Mid$(TheWaffle(4), 2, 1)
    con(BT(14)).Text = Mid$(TheWaffle(4), 4, 1)

    con(BT(7)).Text = Mid$(TheWaffle(5), 2, 1)
    con(BT(15)).Text = Mid$(TheWaffle(5), 4, 1)

    con(BT(8)).Text = Mid$(TheWaffle(6), 2, 1)
    con(BT(16)).Text = Mid$(TheWaffle(6), 4, 1)
    Dim scramble(1 To 21) As Long
    For i = 1 To 21
        scramble(i) = i
    Next
    For i = 21 To 2 Step -1
        Swap scramble(i), scramble(Int(Rnd * i) + 1)
    Next
    For i = 1 To 8
        Swap con(BT(scramble(i))).Text, con(BT(scramble(i + 8))).Text
    Next
    ColorMyWorld
End Sub

Sub ColorMyWorld ' after swaps redraw board with color codes, check for win or loss
    Dim As Long c(1 To 21), i, hits, p ' hits by green count
    Dim soln$(1 To 6)

    ' make a copy of the solution
    For i = 1 To 6
        soln$(i) = TheWaffle(i) ' copy TheWaffle (soln) and blank out letters colored
    Next
    For i = 1 To 21 ' set Green buttons
        If c(i) <> 3 Then ' all 21 cases?
            Select Case i
                Case 1
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(1), 1, 1) Then c(i) = 3: Mid$(soln$(1), 1, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(4), 1, 1) Then c(i) = 3: Mid$(soln$(4), 1, 1) = " "
                Case 2
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(1), 2, 1) Then c(i) = 3: Mid$(soln$(1), 2, 1) = " "
                Case 3
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(1), 3, 1) Then c(i) = 3: Mid$(soln$(1), 3, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(5), 1, 1) Then c(i) = 3: Mid$(soln$(5), 1, 1) = " "
                Case 4
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(1), 4, 1) Then c(i) = 3: Mid$(soln$(1), 4, 1) = " "
                Case 5
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(1), 5, 1) Then c(i) = 3: Mid$(soln$(1), 5, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(6), 1, 1) Then c(i) = 3: Mid$(soln$(6), 1, 1) = " "

                Case 6
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(4), 2, 1) Then c(i) = 3: Mid$(soln$(4), 2, 1) = " "
                Case 7
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(5), 2, 1) Then c(i) = 3: Mid$(soln$(5), 2, 1) = " "
                Case 8
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(6), 2, 1) Then c(i) = 3: Mid$(soln$(6), 2, 1) = " "

                Case 9
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(2), 1, 1) Then c(i) = 3: Mid$(soln$(2), 1, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(4), 3, 1) Then c(i) = 3: Mid$(soln$(4), 3, 1) = " "
                Case 10
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(2), 2, 1) Then c(i) = 3: Mid$(soln$(2), 2, 1) = " "
                Case 11
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(2), 3, 1) Then c(i) = 3: Mid$(soln$(2), 3, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(5), 3, 1) Then c(i) = 3: Mid$(soln$(5), 3, 1) = " "
                Case 12
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(2), 4, 1) Then c(i) = 3: Mid$(soln$(2), 4, 1) = " "
                Case 13
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(2), 5, 1) Then c(i) = 3: Mid$(soln$(2), 5, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(6), 3, 1) Then c(i) = 3: Mid$(soln$(6), 3, 1) = " "

                Case 14
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(4), 4, 1) Then c(i) = 3: Mid$(soln$(4), 4, 1) = " "
                Case 15
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(5), 4, 1) Then c(i) = 3: Mid$(soln$(5), 4, 1) = " "
                Case 16
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(6), 4, 1) Then c(i) = 3: Mid$(soln$(6), 4, 1) = " "

                Case 17
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(3), 1, 1) Then c(i) = 3: Mid$(soln$(3), 1, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(4), 5, 1) Then c(i) = 3: Mid$(soln$(4), 5, 1) = " "
                Case 18
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(3), 2, 1) Then c(i) = 3: Mid$(soln$(3), 2, 1) = " "
                Case 19
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(3), 3, 1) Then c(i) = 3: Mid$(soln$(3), 3, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(5), 5, 1) Then c(i) = 3: Mid$(soln$(5), 5, 1) = " "
                Case 20
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(3), 4, 1) Then c(i) = 3: Mid$(soln$(3), 4, 1) = " "
                Case 21
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(3), 5, 1) Then c(i) = 3: Mid$(soln$(3), 5, 1) = " "
                    If _Trim$(con(BT(i)).Text) = Mid$(soln$(6), 5, 1) Then c(i) = 3: Mid$(soln$(6), 5, 1) = " "
            End Select
        End If
    Next

    ' That was for Green now for yellow
    For i = 1 To 21
        If c(i) <> 3 Then ' all 21 cases?
            Select Case i
                Case 1
                    p = InStr(soln$(1), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 1) = " "
                    p = InStr(soln$(4), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(4), p, 1) = " "
                Case 2
                    p = InStr(soln$(1), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 1) = " "
                Case 3
                    p = InStr(soln$(1), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 1) = " "
                    p = InStr(soln$(5), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(5), p, 1) = " "
                Case 4
                    p = InStr(soln$(1), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 1) = " "
                Case 5
                    p = InStr(soln$(1), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 1) = " "
                    p = InStr(soln$(6), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(6), p, 1) = " "

                Case 6
                    p = InStr(soln$(4), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(4), p, 1) = " "
                Case 7
                    p = InStr(soln$(5), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(5), p, 1) = " "
                Case 8
                    p = InStr(soln$(6), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(6), p, 1) = " "

                Case 9
                    p = InStr(soln$(2), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(2), p, 1) = " "
                    p = InStr(soln$(4), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(4), p, 1) = " "
                Case 10
                    p = InStr(soln$(2), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(2), p, 1) = " "
                Case 11
                    p = InStr(soln$(2), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(2), p, 1) = " "
                    p = InStr(soln$(5), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(5), p, 1) = " "
                Case 12
                    p = InStr(soln$(2), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(2), p, 1) = " "
                Case 13
                    p = InStr(soln$(2), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(2), p, 1) = " "
                    p = InStr(soln$(6), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(6), p, 1) = " "

                Case 14
                    p = InStr(soln$(4), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(4), p, 1) = " "
                Case 15
                    p = InStr(soln$(5), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(5), p, 1) = " "
                Case 16
                    p = InStr(soln$(6), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(6), p, 1) = " "

                Case 17
                    p = InStr(soln$(3), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(3), p, 1) = " "
                    p = InStr(soln$(4), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(4), p, 1) = " "
                Case 18
                    p = InStr(soln$(3), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(3), p, 1) = " "
                Case 19
                    p = InStr(soln$(3), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(1), p, 3) = " "
                    p = InStr(soln$(5), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(5), p, 1) = " "
                Case 20
                    p = InStr(soln$(3), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(3), p, 1) = " "
                Case 21
                    p = InStr(soln$(3), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(3), p, 1) = " "
                    p = InStr(soln$(6), _Trim$(con(BT(i)).Text))
                    If p > 0 Then c(i) = 2: Mid$(soln$(6), p, 1) = " "
            End Select
        End If
    Next
    con(lblSwaps).Text = TS$(NSwaps)
    drwLbl lblSwaps
    For i = 1 To 21 'update buttons
        If c(i) = 3 Then
            con(BT(i)).FC = C3(999): con(BT(i)).BC = C3(60): hits = hits + 1
        ElseIf c(i) = 2 Then
            con(BT(i)).FC = C3(0): con(BT(i)).BC = C3(990) ' yellow backs row or column or both
        Else
            con(BT(i)).FC = C3(0): con(BT(i)).BC = C3(999) ' complete miss row and column
        End If
        drwBtn BT(i), 0
    Next

    If hits = 21 Then
        mBox "Congratulations!", "You ate the Waffle."
        ResetGame ' of course you want to play again!
    End If
    If NSwaps <= 0 Then
        mBox "So sorry", "You've used your 15 Swaps, the puzzle was:" + Chr$(10)+_
        "   3 Across:"+ chr$(10) + TheWaffle(1) + chr$(10)  +TheWaffle(2) + chr$(10)+_
        TheWaffle(3) + chr$(10)+"   3 Down:" + chr$(10) + TheWaffle(4) + chr$(10)+_
        TheWaffle(5) + chr$(10) + TheWaffle(6)
        ResetGame ' of course you want to play again!
    End If

End Sub

Sub MakeWaffle
    Erase TheWaffle 'clear whatever
    Dim As Long i, j, r, flag, saveR
    startOver:
    For i = 1 To 3
        rewaff:
        TheWaffle(i) = Dict$(Int(Rnd * TopWordN) + 1)
        For j = 1 To i - 1
            If TheWaffle(i) = TheWaffle(j) Then GoTo rewaff
        Next
    Next
    For i = 1 To 3
        r = Int(Rnd * TopWordN) + 1
        saveR = r
        Select Case i
            Case 1
                rewaff2:
                TheWaffle(4) = Dict$(r)
                flag = 0
                If Mid$(TheWaffle(4), 1, 1) = Mid$(TheWaffle(1), 1, 1) Then
                    If Mid$(TheWaffle(4), 3, 1) = Mid$(TheWaffle(2), 1, 1) Then
                        If Mid$(TheWaffle(4), 5, 1) = Mid$(TheWaffle(3), 1, 1) Then
                            flag = -1
                        End If
                    End If
                End If
                If flag = 0 Then
                    r = r + 1
                    If r > TopWordN Then r = 1
                    If r = saveR Then GoTo startOver ' damn it!
                    GoTo rewaff2
                End If
            Case 2
                rewaff3:
                TheWaffle(5) = Dict$(r)
                flag = 0
                If Mid$(TheWaffle(5), 1, 1) = Mid$(TheWaffle(1), 3, 1) Then
                    If Mid$(TheWaffle(5), 3, 1) = Mid$(TheWaffle(2), 3, 1) Then
                        If Mid$(TheWaffle(5), 5, 1) = Mid$(TheWaffle(3), 3, 1) Then
                            flag = -1
                        End If
                    End If
                End If
                If flag = 0 Then
                    r = r + 1
                    If r > TopWordN Then r = 1
                    If r = saveR Then GoTo startOver ' damn it!
                    GoTo rewaff3
                End If
            Case 3
                rewaff4:
                TheWaffle(6) = Dict$(r)
                flag = 0
                If Mid$(TheWaffle(6), 1, 1) = Mid$(TheWaffle(1), 5, 1) Then
                    If Mid$(TheWaffle(6), 3, 1) = Mid$(TheWaffle(2), 5, 1) Then
                        If Mid$(TheWaffle(6), 5, 1) = Mid$(TheWaffle(3), 5, 1) Then
                            flag = -1
                        End If
                    End If
                End If
                If flag = 0 Then
                    r = r + 1
                    If r > TopWordN Then r = 1
                    If r = saveR Then GoTo startOver ' damn it!
                    GoTo rewaff4
                End If
        End Select
    Next
End Sub

Sub LoadDictionary
    Open "5l_words.txt" For Input As #1 ' W3 version allows repeated letters, allot of 5 letter 1st names in here
    While Not EOF(1)
        TopWordN = TopWordN + 1
        Input #1, Dict$(TopWordN)
    Wend
    Close #1
End Sub

'$include:'vs GUI.BM'

Replace this GUI Waffle.bas with the one from zip posted above.

I will post a revised zip package when I get Wordle fixed to probably 1 Text Box for input instead of 6 (one for each guess).

BTW the MainRouter calls those empty subs regardless the actual GUI app, that's why they are in there (in case anyone was wondering).
b = b + ...
Reply


Messages In This Thread
vs GUI Updates - the latest from b+ - by bplus - 07-27-2022, 02:42 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 03:11 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 03:28 PM
RE: vs GUI 2022-07-27 Update - by SierraKen - 07-27-2022, 03:48 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 04:04 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 08:08 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 08:26 PM
RE: vs GUI 2022-07-27 Update - by vince - 08-08-2022, 12:05 AM
RE: vs GUI 2022-07-27 Update - by bplus - 07-27-2022, 08:49 PM
RE: vs GUI 2022-07-27 Update - by bplus - 07-29-2022, 02:37 AM
RE: vs GUI 2022-07-27 Update - by bplus - 08-02-2022, 11:51 PM
RE: vs GUI 2022-07-27 Update - by bplus - 08-03-2022, 06:06 PM
RE: vs GUI 2022-07-27 Update - by bplus - 08-04-2022, 02:01 AM
RE: vs GUI 2022-07-27 Update - by bplus - 08-04-2022, 11:46 PM
RE: vs GUI Update - by bplus - 08-05-2022, 01:25 AM
RE: vs GUI Updates - the latest from b+ - by bplus - 08-05-2022, 05:48 PM
RE: vs GUI Updates - the latest from b+ - by Pete - 12-02-2022, 03:27 AM
RE: vs GUI Updates - the latest from b+ - by dbox - 12-06-2022, 05:57 PM
RE: vs GUI Updates - the latest from b+ - by Pete - 12-22-2022, 09:19 AM
RE: vs GUI Updates - the latest from b+ - by Pete - 12-22-2022, 04:56 PM



Users browsing this thread: 40 Guest(s)