mobilebasic/tictactoe/main.bas
2021-06-17 10:43:28 +04:00

127 lines
2.8 KiB
QBasic

DIM CELLCOORDS(3,3,2) AS INTEGER
DIM CELLS(3,3,2) AS BOOLEAN
SUB DRAWCROSS(X AS INTEGER, Y AS INTEGER, SIZE AS INTEGER)
SETCOLOR 205,90,22
DRAWLINE X+10, Y+10, X+10+SIZE, Y+10+SIZE
DRAWLINE X+10+SIZE, Y+10, X+10, Y+10+SIZE
END SUB
FUNCTION ISWINNER(PLAYER AS INTEGER) AS BOOLEAN
DIM VERT, HORIZ, DIAG1, DIAG2 AS BOOLEAN
DIM VI, HI AS INTEGER
FOR VI=1 TO 3
IF NOT VERT THEN
VERT = CELLS(1,VI,PLAYER) AND CELLS(2,VI,PLAYER) AND CELLS(3,VI,PLAYER)
END IF
END FOR
FOR HI=1 TO 3
IF NOT HORIZ THEN
HORIZ = CELLS(HI,1,PLAYER) AND CELLS(HI,2,PLAYER) AND CELLS(HI,3,PLAYER)
END IF
END FOR
DIAG1 = CELLS(1,1,PLAYER) AND CELLS(2,2, PLAYER) AND CELLS(3,3,PLAYER)
DIAG2 = CELLS(1,3,PLAYER) AND CELLS(2,2,PLAYER) AND CELLS(3,1,PLAYER)
ISWINNER = (VERT OR HORIZ OR DIAG1 OR DIAG2)
END FUNCTION
FUNCTION ISFILLED() AS BOOLEAN
DIM I, J AS INTEGER
DIM FILLED AS BOOLEAN
FILLED=TRUE
FOR I=1 TO 3
FOR J=1 TO 3
IF (NOT CELLS(I, J, 1)) AND (NOT CELLS(I, J, 2)) THEN
FILLED=FALSE
END IF
END FOR
END FOR
ISFILLED=FILLED
END FUNCTION
SUB MAIN
DIM W, H, SIZE AS INTEGER
DIM I, J, K AS INTEGER
DIM COL, ROW AS INTEGER
DIM QUEUE AS BOOLEAN
DIM TCHD, TCHX, TCHY AS INTEGER
DIM GAMEOVER AS BOOLEAN
GRAPHICS
W = SCREENWIDTH()
H = SCREENHEIGHT()
SIZE = 100
FOR I=1 TO 3
FOR J=1 TO 3
CELLCOORDS(I, J, 1) = INTEGER(DOUBLE(W/2)-DOUBLE(SIZE)*1.5)+(SIZE*(I-1))
CELLCOORDS(I, J, 2) = INTEGER(DOUBLE(H/2)-DOUBLE(SIZE)*1.5)+(SIZE*(J-1))
END FOR
END FOR
WHILE NOT GAMEOVER
SETCOLOR 70, 70, 70
CLS
SETCOLOR 255, 255, 255
FOR I=1 TO 3
FOR J=1 TO 3
DRAWRECT CELLCOORDS(I, J, 1), CELLCOORDS(I, J, 2), SIZE, SIZE
END FOR
END FOR
TCHD = TOUCHDOWN()
TCHX = (TCHD / 65536) & 0x0000ffff
TCHY = TCHD & 0x0000ffff
FOR I=1 TO 3
FOR J=1 TO 3
IF TCHX > CELLCOORDS(I, J, 1)-1 AND TCHX < CELLCOORDS(I, J, 1)+SIZE AND TCHY > CELLCOORDS(I, J, 2)-1 AND TCHY < CELLCOORDS(I, J, 2)+SIZE AND (NOT CELLS(I, J, 1)) AND (NOT CELLS(I, J, 2)) THEN
IF NOT QUEUE THEN
CELLS(I, J, 1) = TRUE
ELSEIF QUEUE THEN
CELLS(I, J, 2) = TRUE
END IF
QUEUE = NOT QUEUE
END IF
END FOR
END FOR
FOR I=1 TO 3
FOR J=1 TO 3
IF CELLS(I, J, 1) THEN
DRAWCROSS CELLCOORDS(I, J, 1), CELLCOORDS(I, J, 2), SIZE-SIZE/5
ELSEIF CELLS(I, J, 2) THEN
SETCOLOR 50, 90, 170
DRAWCIRCLE (CELLCOORDS(I, J, 1)+SIZE/2), (CELLCOORDS(I, J, 2)+SIZE/2), (SIZE-(SIZE/5))/2
END IF
END FOR
END FOR
REPAINT
SLEEP 50
IF ISWINNER(1) THEN
SLEEP 100
ALERT "[X] PLAYER 1 IS WINNER", "GAME OVER", "OK","","", TRUE
GAMEOVER = TRUE
ELSEIF ISWINNER(2) THEN
SLEEP 100
ALERT "[O] PLAYER 2 IS WINNER", "GAME OVER", "OK","","", TRUE
GAMEOVER = TRUE
ELSEIF ISFILLED() THEN
SLEEP 100
ALERT "GAME OVER", "", "OK","","", TRUE
GAMEOVER=TRUE
END IF
END WHILE
END SUB