From a398656dcafba7ff15aec6b8e76f3d442669f3e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9?= <50486086+DarkCat09@users.noreply.github.com> Date: Thu, 17 Jun 2021 10:43:28 +0400 Subject: [PATCH] One more game! --- tictactoe/main.bas | 127 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 tictactoe/main.bas diff --git a/tictactoe/main.bas b/tictactoe/main.bas new file mode 100644 index 0000000..800eb44 --- /dev/null +++ b/tictactoe/main.bas @@ -0,0 +1,127 @@ +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