_TITLE "The Brain Game From Australia by Donald L. Foster Jr. 2018"

SCREEN _NEWIMAGE(1020, 735, 256)

_PALETTECOLOR 1, _RGB32(200, 200, 200) ' Lt Grey
_PALETTECOLOR 2, _RGB32(180, 180, 180) ' Med Grey
_PALETTECOLOR 3, _RGB32(255, 100, 0) '   Orange
_PALETTECOLOR 4, _RGB32(0, 200, 50) '    Green
_PALETTECOLOR 5, _RGB32(0, 50, 255) '    Blue

DIM Player AS INTEGER
DIM Opponent AS INTEGER

DIM V AS INTEGER
DIM W AS INTEGER
DIM X AS INTEGER
DIM Y AS INTEGER
DIM Z AS INTEGER

DIM PlayerColor(2) AS INTEGER
DIM PlayerPieces(2) AS INTEGER

DIM X(2) AS INTEGER

DIM BoardX(13, 13) AS INTEGER
DIM BoardY(13, 13) AS INTEGER

DIM StorageX(2, 26) AS INTEGER
DIM StorageY(2, 26) AS INTEGER

DIM BoardPlayer(13, 13) AS INTEGER
DIM BoardSquare(13, 13) AS INTEGER
DIM WinningSquare(13, 13) AS INTEGER

DIM C(2) AS STRING
DIM Cursor AS STRING

Player = 1: Opponent = 2
PlayerColor(1) = 15: PlayerColor(2) = 0
PlayerPieces(1) = 1: PlayerPieces(2) = 1

C$(1) = "C15": C$(2) = "C0"
Cursor$ = "C0BU25RL26D50R50U50L51D51R52U52L52"

' Setup Grey Board Squares
FOR Z = 2 TO 11 STEP 3: FOR Y = 2 TO 11 STEP 3: BoardSquare(Z, Y) = 1: BoardSquare(Z, Y + 1) = 1: BoardSquare(Z + 1, Y) = 1: BoardSquare(Z + 1, Y + 1) = 1: NEXT: NEXT

CLS , 5
COLOR 15, 5: LOCATE 2, 96: PRINT "The Brain Game from Australia";


' Daw Board
LINE (10, 10)-(725, 725), 2, BF: LINE (16, 16)-(719, 719), 3, BF: LINE (20, 20)-(715, 715), 15, BF
X = 56
FOR Z = 1 TO 13
    W = 56
    FOR Y = 1 TO 13
        IF BoardSquare(Z, Y) = 1 THEN LINE (W - 25, X - 25)-(W + 25, X + 25), 1, BF
        IF (Z + Y) / 2 = FIX((Z + Y) / 2) THEN V = 3 ELSE V = 4
        CIRCLE (W, X), 24, V: PAINT (W, X), V
        BoardX(Z, Y) = W: BoardY(Z, Y) = X
        W = W + 52
    NEXT
    X = X + 52
NEXT

' Setup Storage Pieces
X = 145: X(1) = 1: X(2) = 1
FOR Z = 1 TO 13
    W = 780
    FOR Y = 1 TO 4
        IF Y < 3 THEN V = 1 ELSE V = 2
        CIRCLE (W, X), 20, PlayerColor(V): PAINT (W, X), PlayerColor(V)
        StorageX(V, X(V)) = W: StorageY(V, X(V)) = X
        W = W + 60: X(V) = X(V) + 1
    NEXT
    X = X + 44
NEXT

StartGame:
' Display Player Indicator
CIRCLE (872, 65), 21, PlayerColor(Player): PAINT (872, 65), PlayerColor(Player)
LOCATE 7, 106: PRINT "Player:"; Player;

LOCATE 45, 94: IF PlayerPieces(Player) = 27 THEN PRINT "     Choose a Piece to Move.      "; ELSE PRINT " Choose Location to Place Piece.  ";

GetMouseInput1:
WHILE (_MOUSEINPUT)
    FOR Z = 1 TO 13
        FOR Y = 1 TO 13
            IF _MOUSEX > BoardX(Z, Y) - 26 AND _MOUSEX < BoardX(Z, Y) + 26 AND _MOUSEY > BoardY(Z, Y) - 26 AND _MOUSEY < BoardY(Z, Y) + 26 AND _MOUSEBUTTON(1) = -1 THEN
                IF (BoardPlayer(Z, Y) = 0 AND PlayerPieces(Player) < 27) OR (BoardPlayer(Z, Y) = Player AND PlayerPieces(Player) = 27) THEN
                    Row1 = Z: Column1 = Y: GOSUB ButtonRelease: GOTO EndMouseInput1
                END IF
            END IF
        NEXT
    NEXT
WEND
GOTO GetMouseInput1

EndMouseInput1:
IF PlayerPieces(Player) < 27 THEN
    Pieces = PlayerPieces(Player)
    BoardPlayer(Row1, Column1) = Player
    CIRCLE (BoardX(Row1, Column1), BoardY(Row1, Column1)), 20, PlayerColor(Player): PAINT (BoardX(Row1, Column1), BoardY(Row1, Column1)), PlayerColor(Player)
    LINE (StorageX(Player, Pieces) - 21, StorageY(Player, Pieces) - 21)-(StorageX(Player, Pieces) + 21, StorageY(Player, Pieces) + 21), 5, BF
    PlayerPieces(Player) = PlayerPieces(Player) + 1
    GOTO EndTurn
END IF

' Place Cursor Around Select Piece
PSET (BoardX(Row1, Column1), BoardY(Row1, Column1)), PlayerColor(Player): DRAW C$(Player) + Cursor$

LOCATE 45, 94: PRINT " Choose a Location to Move to. ";

GetMouseInput2:
WHILE (_MOUSEINPUT)
    FOR Z = 1 TO 13
        FOR Y = 1 TO 13
            IF _MOUSEX > BoardX(Z, Y) - 26 AND _MOUSEX < BoardX(Z, Y) + 26 AND _MOUSEY > BoardY(Z, Y) - 26 AND _MOUSEY < BoardY(Z, Y) + 26 AND _MOUSEBUTTON(1) = -1 THEN
                IF BoardPlayer(Z, Y) = 0 THEN Row2 = Z: Column2 = Y: GOSUB ButtonRelease: GOTO EndMouseInput2
            END IF
        NEXT
    NEXT
WEND
GOTO GetMouseInput2

EndMouseInput2:
BoardPlayer(Row1, Column1) = 0: BoardPlayer(Row2, Column2) = Player
LINE (BoardX(Row1, Column1) - 26, BoardY(Row1, Column1) - 26)-(BoardX(Row1, Column1) + 26, BoardY(Row1, Column1) + 26), 15, BF
IF BoardSquare(Row1, Column1) = 1 THEN LINE (BoardX(Row1, Column1) - 25, BoardY(Row1, Column1) - 25)-(BoardX(Row1, Column1) + 25, BoardY(Row1, Column1) + 25), 1, BF
IF (Row1 + Column1) / 2 = FIX((Row1 + Column1) / 2) THEN V = 3 ELSE V = 4
CIRCLE (BoardX(Row1, Column1), BoardY(Row1, Column1)), 24, V: PAINT (BoardX(Row1, Column1), BoardY(Row1, Column1)), V
CIRCLE (BoardX(Row2, Column2), BoardY(Row2, Column2)), 20, PlayerColor(Player): PAINT (BoardX(Row2, Column2), BoardY(Row2, Column2)), PlayerColor(Player)

EndTurn:
' Set WinningSquares to Zero
FOR Z = 1 TO 13: FOR Y = 1 TO 13: WinningSquare(Z, Y) = 0: NEXT: NEXT

' Check for Winner
X = 0
FOR Z = 2 TO 11 STEP 3
    FOR Y = 2 TO 11 STEP 3
        IF BoardPlayer(Z, Y) = Player AND BoardPlayer(Z, Y + 1) = Player AND BoardPlayer(Z + 1, Y) = Player AND BoardPlayer(Z + 1, Y + 1) = Player THEN
            X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z, Y + 1) = 1: WinningSquare(Z + 1, Y) = 1: WinningSquare(Z + 1, Y + 1) = 1
        END IF
    NEXT
NEXT

FOR Z = 1 TO 7
    FOR Y = 1 TO 13
        IF BoardPlayer(Y, Z) = Player AND BoardPlayer(Y, Z + 2) = Player AND BoardPlayer(Y, Z + 4) = Player AND BoardPlayer(Y, Z + 6) = Player THEN
            X = 1: WinningSquare(Y, Z) = 1: WinningSquare(Y, Z + 2) = 1: WinningSquare(Y, Z + 4) = 1: WinningSquare(Y, Z + 6) = 1
        END IF
        IF BoardPlayer(Z, Y) = Player AND BoardPlayer(Z + 2, Y) = Player AND BoardPlayer(Z + 4, Y) = Player AND BoardPlayer(Z + 6, Y) = Player THEN
            X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z + 2, Y) = 1: WinningSquare(Z + 4, Y) = 1: WinningSquare(Z + 6, Y) = 1
        END IF
    NEXT
NEXT

FOR Z = 1 TO 7
    FOR Y = 1 TO 7
        IF BoardPlayer(Z, Y) = Player AND BoardPlayer(Z + 2, Y + 2) = Player AND BoardPlayer(Z + 4, Y + 4) = Player AND BoardPlayer(Z + 6, Y + 6) = Player THEN
            X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z + 2, Y + 2) = 1: WinningSquare(Z + 4, Y + 4) = 1: WinningSquare(Z + 6, Y + 6) = 1
        END IF
        IF BoardPlayer(14 - Y, Z) = Player AND BoardPlayer(12 - Y, Z + 2) = Player AND BoardPlayer(10 - Y, Z + 4) = Player AND BoardPlayer(8 - Y, Z + 6) = Player THEN
            X = 1: WinningSquare(14 - Y, Z) = 1: WinningSquare(12 - Y, Z + 2) = 1: WinningSquare(10 - Y, Z + 4) = 1: WinningSquare(8 - Y, Z + 6) = 1
        END IF
    NEXT
NEXT

IF X = 1 GOTO Winner

SWAP Player, Opponent: GOTO StartGame


ButtonRelease:
WHILE (_MOUSEINPUT)
    IF _MOUSEBUTTON(1) = 0 THEN RETURN
WEND
GOTO ButtonRelease


Winner:
FOR Z = 1 TO 13
    FOR Y = 1 TO 13
        IF WinningSquare(Z, Y) = 1 THEN PSET (BoardX(Z, Y), BoardY(Z, Y)), PlayerColor(Player): DRAW C$(Player) + Cursor$
    NEXT
NEXT

LOCATE 45, 94: PRINT " Winner!  Play Again?  ( Y / N ) ";

YorN:
A$ = UCASE$(INKEY$)
IF A$ = "" GOTO YorN
IF A$ = "Y" THEN RUN
IF A$ = "N" THEN SYSTEM
GOTO YorN

