From: Svjatoslav Agejenko Date: Wed, 25 Jun 2025 20:56:43 +0000 (+0300) Subject: Better code readability X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=e6bdbda379a151e986d849ed5c1072328816f81b;p=qbasicapps.git Better code readability --- diff --git a/Games/checkers.bas b/Games/checkers.bas index de66e46..dd6499a 100755 --- a/Games/checkers.bas +++ b/Games/checkers.bas @@ -1,22 +1,42 @@ -' Game of checkers. Created by Svjatoslav Agejenko in 1998. +' Game of checkers. +' By Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 1998, Initial version +' 2025, Improved program readability ' ' Usage: ' keys: w a z s - move around ' ENTER key - pick piece on the desk and place it to new location -DECLARE SUB look () -DECLARE SUB motleb () -DECLARE SUB mang () -DECLARE SUB sisend () -DECLARE SUB asend () +DECLARE SUB CheckPossibleMoves() +DECLARE SUB HandleMovement() +DECLARE SUB GameLoop() +DECLARE SUB HandleInput() +DECLARE SUB UpdateDisplay() DEFINT A-Z -DIM SHARED nu(-100 TO 300) AS INTEGER -DIM SHARED kaik AS INTEGER -DIM SHARED looma AS INTEGER -DIM SHARED hiir(1000) -DIM SHARED ax1, ax2 + +DIM SHARED boardState(-100 TO 300) AS INTEGER +' 0 - black piece +' 1 - white piece +' 3 - Empty square that piece is allowed to move to +' 4 - Empty square that is not reachable according to the game rules +' +' Cell address calculation (row 1--10, col 1--10): +' cell address = ((row - 1) * 20) + col + + +DIM SHARED moveMade AS INTEGER +DIM SHARED hasMove AS INTEGER +DIM SHARED cursorImage(1000) +DIM SHARED cursorX, cursorY SCREEN 2 + + CLS +' Draw cursor image and store it into array for quick drawing on the screen LINE (1, 1)-(10, 1) LINE (1, 1)-(1, 5) LINE (10, 1)-(6, 2) @@ -25,315 +45,485 @@ LINE (10, 4)-(8, 5) LINE (8, 5)-(4, 3) LINE (4, 3)-(1, 5) PAINT (2, 2), 1 -GET (1, 1)-(10, 5), hiir +GET (1, 1)-(10, 5), cursorImage + CLS -FOR a = 0 TO 10 - LINE ((a * 40) + 20, 10)-((a * 40) + 20, 189), 1 -NEXT a +' Draw the checkerboard grid +FOR col = 0 TO 10 + LINE ((col * 40) + 20, 10)-((col * 40) + 20, 189), 1 +NEXT col -FOR a = 0 TO 20 - LINE (20, (a * 18) + 9)-(420, (a * 18) + 9), 1 -NEXT a +FOR row = 0 TO 20 + LINE (20, (row * 18) + 9)-(420, (row * 18) + 9), 1 +NEXT row -FOR a = 1 TO 200 - nu(a) = 4 -NEXT a +' Initialize the board state to empty squares +FOR cell = 1 TO 200 + boardState(cell) = 4 +NEXT cell ' Draw the initial checkerboard pattern. ' (alternating squares to create the checkerboard) -FOR a = 2 TO 10 STEP 2 - FOR b = 1 TO 10 STEP 2 - PAINT ((b * 40) + 5, (a * 18) + 5) - NEXT b -NEXT a - -FOR a = 1 TO 10 STEP 2 - FOR b = 2 TO 10 STEP 2 - PAINT ((b * 40) + 5, (a * 18) + 5) - NEXT b -NEXT a - -' Place the initial pieces on the board -FOR a = 2 TO 4 STEP 2 - FOR b = 1 TO 10 STEP 2 - nu(((a - 1) * 20) + b) = 1 - NEXT b -NEXT a - -FOR a = 1 TO 4 STEP 2 - FOR b = 2 TO 10 STEP 2 - nu(((a - 1) * 20) + b) = 1 - NEXT b -NEXT a - -FOR a = 8 TO 10 STEP 2 - FOR b = 1 TO 10 STEP 2 - nu(((a - 1) * 20) + b) = 0 - NEXT b -NEXT a - -FOR a = 7 TO 10 STEP 2 - FOR b = 2 TO 10 STEP 2 - nu(((a - 1) * 20) + b) = 0 - NEXT b -NEXT a - -FOR b = 2 TO 10 STEP 2 - nu(80 + b) = 3 -NEXT b - -FOR b = 1 TO 10 STEP 2 - nu(100 + b) = 3 -NEXT b - -asend -kaik = 1 -mang - -SUB asend +FOR row = 2 TO 10 STEP 2 + FOR col = 1 TO 10 STEP 2 + PAINT ((col * 40) + 5, (row * 18) + 5) + NEXT col +NEXT row + +FOR row = 1 TO 10 STEP 2 + FOR col = 2 TO 10 STEP 2 + PAINT ((col * 40) + 5, (row * 18) + 5) + NEXT col +NEXT row + +' Place the white pieces on the board +FOR row = 2 TO 4 STEP 2 + FOR col = 1 TO 10 STEP 2 + boardState(((row - 1) * 20) + col) = 1 + NEXT col +NEXT row + +FOR row = 1 TO 4 STEP 2 + FOR col = 2 TO 10 STEP 2 + boardState(((row - 1) * 20) + col) = 1 + NEXT col +NEXT row + +' Place the black pieces on the board +FOR row = 8 TO 10 STEP 2 + FOR col = 1 TO 10 STEP 2 + boardState(((row - 1) * 20) + col) = 0 + NEXT col +NEXT row + +FOR row = 7 TO 10 STEP 2 + FOR col = 2 TO 10 STEP 2 + boardState(((row - 1) * 20) + col) = 0 + NEXT col +NEXT row + +FOR col = 2 TO 10 STEP 2 + boardState(80 + col) = 3 +NEXT col + +FOR col = 1 TO 10 STEP 2 + boardState(100 + col) = 3 +NEXT col + +UpdateDisplay +moveMade = 1 +GameLoop + +SUB UpdateDisplay ' Draw the pieces on the board - FOR b = 1 TO 10 - FOR a = 1 TO 10 - v = nu(((b - 1) * 20) + a) - SELECT CASE v + FOR row = 1 TO 10 + FOR col = 1 TO 10 + pieceType = boardState(((row - 1) * 20) + col) + SELECT CASE pieceType CASE 1 - CIRCLE (a * 40, b * 18), 17, 1 - PAINT (a * 40, b * 18), 1 - CIRCLE (a * 40, b * 18), 17, 0 - CIRCLE (a * 40, b * 18), 16, 0 - LINE ((a * 40) - 16, b * 18)-((a * 40) + 16, b * 18), 0 + CIRCLE (col * 40, row * 18), 17, 1 + PAINT (col * 40, row * 18), 1 + CIRCLE (col * 40, row * 18), 17, 0 + CIRCLE (col * 40, row * 18), 16, 0 + LINE ((col * 40) - 16, row * 18)-((col * 40) + 16, row * 18), 0 CASE 0 - CIRCLE (a * 40, b * 18), 17, 0 - PAINT (a * 40, b * 18), 0 - CIRCLE (a * 40, b * 18), 17, 1 - CIRCLE (a * 40, b * 18), 15, 1 - CIRCLE (a * 40, b * 18), 3, 1 - CIRCLE (a * 40, b * 18), 7, 1 - LINE ((a * 40) - 16, b * 18)-((a * 40) + 16, b * 18), 0 + CIRCLE (col * 40, row * 18), 17, 0 + PAINT (col * 40, row * 18), 0 + CIRCLE (col * 40, row * 18), 17, 1 + CIRCLE (col * 40, row * 18), 15, 1 + CIRCLE (col * 40, row * 18), 3, 1 + CIRCLE (col * 40, row * 18), 7, 1 + LINE ((col * 40) - 16, row * 18)-((col * 40) + 16, row * 18), 0 CASE 3 - PAINT (a * 40, b * 18), 1 + PAINT (col * 40, row * 18), 1 END SELECT - NEXT a - NEXT b + NEXT col + NEXT row END SUB -SUB look - ' checks if there are any possible moves on the board - looma = 0 - FOR a = 1 TO 200 - IF nu(a) = 0 AND nu(a - 21) = 1 AND nu(a - 42) = 3 THEN looma = 1 - IF nu(a) = 0 AND nu(a - 19) = 1 AND nu(a - 38) = 3 THEN looma = 1 - IF nu(a) = 0 AND nu(a + 21) = 1 AND nu(a + 42) = 3 THEN looma = 1 - IF nu(a) = 0 AND nu(a + 19) = 1 AND nu(a + 38) = 3 THEN looma = 1 - NEXT a +SUB CheckPossibleMoves + ' Checks if there are any possible moves on the board + hasMove = 0 + FOR cell = 1 TO 200 + ' Check for possible jumps in all directions + IF boardState(cell) = 0 AND boardState(cell - 21) = 1 AND boardState(cell - 42) = 3 THEN hasMove = 1 + IF boardState(cell) = 0 AND boardState(cell - 19) = 1 AND boardState(cell - 38) = 3 THEN hasMove = 1 + IF boardState(cell) = 0 AND boardState(cell + 21) = 1 AND boardState(cell + 42) = 3 THEN hasMove = 1 + IF boardState(cell) = 0 AND boardState(cell + 19) = 1 AND boardState(cell + 38) = 3 THEN hasMove = 1 + NEXT cell END SUB -SUB mang +SUB GameLoop 4 - sisend - motleb - look - IF looma = 1 THEN SOUND 1234, 2 + HandleInput + HandleMovement + CheckPossibleMoves + IF hasMove = 1 THEN SOUND 1234, 2 GOTO 4 END SUB -SUB motleb +SUB HandleMovement 3 -' Check for possible jumps (double eating) -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 21) = 0 AND nu(a + 42) = 3 AND nu(a + 61) = 0 AND nu(a + 80) = 3 THEN nu(a) = 3: nu(a + 21) = 3: nu(a + 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a + 21) = 0 AND nu(a + 42) = 3 AND nu(a + 23) = 0 AND nu(a + 4) = 3 THEN nu(a) = 3: nu(a + 21) = 3: nu(a + 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a + 19) = 0 AND nu(a + 38) = 3 AND nu(a + 59) = 0 AND nu(a + 80) = 3 THEN nu(a) = 3: nu(a + 19) = 3: nu(a + 38) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a + 19) = 0 AND nu(a + 38) = 3 AND nu(a + 17) = 0 AND nu(a - 4) = 3 THEN nu(a) = 3: nu(a + 19) = 3: nu(a + 38) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a + 21) = 0 AND nu(a + 42) = 3 AND nu(a + 63) = 0 AND nu(a + 84) = 3 THEN nu(a) = 3: nu(a + 21) = 3: nu(a + 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a + 19) = 0 AND nu(a + 38) = 3 AND nu(a + 57) = 0 AND nu(a + 76) = 3 THEN nu(a) = 3: nu(a + 19) = 3: nu(a + 38) = 1: aiki = 1: asend: GOTO 3 - - IF nu(a) = 1 AND nu(a - 21) = 0 AND nu(a - 42) = 3 AND nu(a - 61) = 0 AND nu(a - 80) = 3 THEN nu(a) = 3: nu(a - 21) = 3: nu(a - 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a - 21) = 0 AND nu(a - 42) = 3 AND nu(a - 23) = 0 AND nu(a - 4) = 3 THEN nu(a) = 3: nu(a - 21) = 3: nu(a - 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a - 19) = 0 AND nu(a - 38) = 3 AND nu(a - 59) = 0 AND nu(a - 80) = 3 THEN nu(a) = 3: nu(a - 19) = 3: nu(a - 38) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a - 19) = 0 AND nu(a - 38) = 3 AND nu(a - 17) = 0 AND nu(a + 4) = 3 THEN nu(a) = 3: nu(a - 19) = 3: nu(a - 38) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a - 21) = 0 AND nu(a - 42) = 3 AND nu(a - 63) = 0 AND nu(a - 84) = 3 THEN nu(a) = 3: nu(a - 21) = 3: nu(a - 42) = 1: kaik = 1: asend: GOTO 3 - IF nu(a) = 1 AND nu(a - 19) = 0 AND nu(a - 38) = 3 AND nu(a - 57) = 0 AND nu(a - 76) = 3 THEN nu(a) = 3: nu(a - 19) = 3: nu(a - 38) = 1: aiki = 1: asend: GOTO 3 -NEXT a +' Check for possible jumps where a AI can eat 2 pieces at once +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 21) = 0 AND boardState(cell + 42) = 3 AND boardState(cell + 61) = 0 AND boardState(cell + 80) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 3: boardState(cell + 42) = 1 + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 0 AND boardState(cell + 42) = 3 AND boardState(cell + 23) = 0 AND boardState(cell + 4) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 3 : boardState(cell + 42) = 1 + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 0 AND boardState(cell + 38) = 3 AND boardState(cell + 59) = 0 AND boardState(cell + 80) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 3 : boardState(cell + 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 0 AND boardState(cell + 38) = 3 AND boardState(cell + 17) = 0 AND boardState(cell - 4) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 3 : boardState(cell + 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 0 AND boardState(cell + 42) = 3 AND boardState(cell + 63) = 0 AND boardState(cell + 84) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 3 : boardState(cell + 42) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 0 AND boardState(cell + 38) = 3 AND boardState(cell + 57) = 0 AND boardState(cell + 76) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 3 : boardState(cell + 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + + IF boardState(cell) = 1 AND boardState(cell - 21) = 0 AND boardState(cell - 42) = 3 AND boardState(cell - 61) = 0 AND boardState(cell - 80) = 3 THEN + boardState(cell) = 3: boardState(cell - 21) = 3 : boardState(cell - 42) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell - 21) = 0 AND boardState(cell - 42) = 3 AND boardState(cell - 23) = 0 AND boardState(cell - 4) = 3 THEN + boardState(cell) = 3: boardState(cell - 21) = 3 : boardState(cell - 42) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell - 19) = 0 AND boardState(cell - 38) = 3 AND boardState(cell - 59) = 0 AND boardState(cell - 80) = 3 THEN + boardState(cell) = 3: boardState(cell - 19) = 3 : boardState(cell - 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell - 19) = 0 AND boardState(cell - 38) = 3 AND boardState(cell - 17) = 0 AND boardState(cell + 4) = 3 THEN + boardState(cell) = 3: boardState(cell - 19) = 3 : boardState(cell - 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell - 21) = 0 AND boardState(cell - 42) = 3 AND boardState(cell - 63) = 0 AND boardState(cell - 84) = 3 THEN + boardState(cell) = 3: boardState(cell - 21) = 3 : boardState(cell - 42) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF + IF boardState(cell) = 1 AND boardState(cell - 19) = 0 AND boardState(cell - 38) = 3 AND boardState(cell - 57) = 0 AND boardState(cell - 76) = 3 THEN + boardState(cell) = 3: boardState(cell - 19) = 3 : boardState(cell - 38) = 1 + + moveMade = 1 + UpdateDisplay + GOTO 3 + END IF +NEXT cell ' Check for possible single moves (single eating) -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 21) = 0 AND nu(a + 42) = 3 THEN nu(a) = 3: nu(a + 21) = 3: nu(a + 42) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 19) = 0 AND nu(a + 38) = 3 THEN nu(a) = 3: nu(a + 19) = 3: nu(a + 38) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a - 21) = 0 AND nu(a - 42) = 3 THEN nu(a) = 3: nu(a - 21) = 3: nu(a - 42) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a - 19) = 0 AND nu(a - 38) = 3 THEN nu(a) = 3: nu(a - 19) = 3: nu(a - 38) = 1: GOTO 2 -NEXT a - -' Check for possible captures (to protect your pieces) -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 21) = 3 AND nu(a + 40) = 1 AND nu(a + 38) = 3 AND nu(a + 61) = 0 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 21) = 0 AND nu(a + 40) = 1 AND nu(a + 38) = 3 AND nu(a + 61) = 0 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 21) = 3 AND nu(a + 40) = 1 AND nu(a + 38) = 1 AND nu(a + 61) = 0 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 21) = 0 AND nu(a + 40) = 1 AND nu(a + 38) = 1 AND nu(a + 61) = 0 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - - IF nu(a - 2) = 1 AND nu(a + 19) = 3 AND nu(a) = 3 AND nu(a + 40) = 1 AND nu(a + 38) = 3 AND nu(a + 61) = 0 THEN nu(a - 2) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a - 2) = 1 AND nu(a + 19) = 3 AND nu(a) = 1 AND nu(a + 40) = 1 AND nu(a + 38) = 3 AND nu(a + 61) = 0 THEN nu(a - 2) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a - 2) = 1 AND nu(a + 19) = 3 AND nu(a) = 3 AND nu(a + 40) = 1 AND nu(a + 38) = 1 AND nu(a + 61) = 0 THEN nu(a - 2) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a - 2) = 1 AND nu(a + 19) = 3 AND nu(a) = 1 AND nu(a + 40) = 1 AND nu(a + 38) = 1 AND nu(a + 61) = 0 THEN nu(a - 2) = 3: nu(a + 19) = 1: GOTO 2 -NEXT a - -' Check for possible moves to the edge -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 2) = 4 AND nu(a + 21) = 3 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a - 2) = 4 AND nu(a + 19) = 3 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 -NEXT a +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 21) = 0 AND boardState(cell + 42) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 3 : boardState(cell + 42) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 0 AND boardState(cell + 38) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 3 : boardState(cell + 38) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell - 21) = 0 AND boardState(cell - 42) = 3 THEN + boardState(cell) = 3: boardState(cell - 21) = 3 : boardState(cell - 42) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell - 19) = 0 AND boardState(cell - 38) = 3 THEN + boardState(cell) = 3: boardState(cell - 19) = 3 : boardState(cell - 38) = 1 + + GOTO 2 + END IF +NEXT cell + +' Check for possible defensive moves (to protect own pieces) +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 21) = 3 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 3 AND boardState(cell + 61) = 0 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 21) = 0 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 3 AND boardState(cell + 61) = 0 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 21) = 3 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 1 AND boardState(cell + 61) = 0 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 21) = 0 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 1 AND boardState(cell + 61) = 0 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + + IF boardState(cell - 2) = 1 AND boardState(cell + 19) = 3 AND boardState(cell) = 3 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 3 AND boardState(cell + 61) = 0 THEN + boardState(cell - 2) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell - 2) = 1 AND boardState(cell + 19) = 3 AND boardState(cell) = 1 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 3 AND boardState(cell + 61) = 0 THEN + boardState(cell - 2) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell - 2) = 1 AND boardState(cell + 19) = 3 AND boardState(cell) = 3 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 1 AND boardState(cell + 61) = 0 THEN + boardState(cell - 2) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell - 2) = 1 AND boardState(cell + 19) = 3 AND boardState(cell) = 1 AND boardState(cell + 40) = 1 AND boardState(cell + 38) = 1 AND boardState(cell + 61) = 0 THEN + boardState(cell - 2) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF +NEXT cell + +' Check for possible moves to the board edges (to protect own pieces) +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 2) = 4 AND boardState(cell + 21) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell - 2) = 4 AND boardState(cell + 19) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF +NEXT cell ' Check for possible moves to the corner (safe moves) -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 38) = 3 AND nu(a + 40) = 3 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 21) = 3 AND nu(a + 42) = 3 AND nu(a + 40) = 3 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 38) = 3 AND boardState(cell + 40) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 3 AND boardState(cell + 42) = 3 AND boardState(cell + 40) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 + + GOTO 2 + END IF - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 38) = 1 AND nu(a + 40) = 3 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 21) = 3 AND nu(a + 42) = 1 AND nu(a + 40) = 3 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 38) = 1 AND boardState(cell + 40) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 38) = 3 AND nu(a + 40) = 1 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 21) = 3 AND nu(a + 42) = 3 AND nu(a + 40) = 1 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 3 AND boardState(cell + 42) = 1 AND boardState(cell + 40) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 - IF nu(a) = 1 AND nu(a + 19) = 3 AND nu(a + 38) = 1 AND nu(a + 40) = 1 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 21) = 3 AND nu(a + 42) = 1 AND nu(a + 40) = 1 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 -NEXT a + GOTO 2 + END IF -' Check for possible moves to the middle (useless moves) -FOR a = 1 TO 200 - IF nu(a) = 1 AND nu(a + 21) = 3 THEN nu(a) = 3: nu(a + 21) = 1: GOTO 2 - IF nu(a) = 1 AND nu(a + 19) = 3 THEN nu(a) = 3: nu(a + 19) = 1: GOTO 2 -NEXT a + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 38) = 3 AND boardState(cell + 40) = 1 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 3 AND boardState(cell + 42) = 3 AND boardState(cell + 40) = 1 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 + + GOTO 2 + END IF + + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 AND boardState(cell + 38) = 1 AND boardState(cell + 40) = 1 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 21) = 3 AND boardState(cell + 42) = 1 AND boardState(cell + 40) = 1 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 + + GOTO 2 + END IF +NEXT cell + +' Check for any remaining moves that can be made +FOR cell = 1 TO 200 + IF boardState(cell) = 1 AND boardState(cell + 21) = 3 THEN + boardState(cell) = 3: boardState(cell + 21) = 1 + + GOTO 2 + END IF + IF boardState(cell) = 1 AND boardState(cell + 19) = 3 THEN + boardState(cell) = 3: boardState(cell + 19) = 1 + + GOTO 2 + END IF +NEXT cell LOCATE 4, 5 -PRINT " S I N U V O I T" +PRINT " Y O U W O N !" END GOTO 3 2 -asend +UpdateDisplay 9 END SUB -SUB sisend - DIM asdf(1000) +SUB HandleInput + DIM tempImage(1000) - p = 1 + inputPhase = 1 5 - a = ax1 - b = ax2 + cursorX = ax1 + cursorY = ax2 7 - IF p = 1 THEN - LOCATE 1, 70 - PRINT "Kust !" + IF inputPhase = 1 THEN + LOCATE 1, 60 + PRINT "From where ?" END IF - IF p = 2 THEN - LOCATE 1, 70 - PRINT "kuhu !" + IF inputPhase = 2 THEN + LOCATE 1, 60 + PRINT "To where ? " END IF - LOCATE 2, 60 - qw = (((b \ 18) - 1) * 20) + (a \ 40) - PRINT qw + selectedCell = (((cursorY \ 18) - 1) * 20) + (cursorX \ 40) + 'LOCATE 2, 60 + 'PRINT selectedCell - GET (a, b)-(a + 10, b + 10), asdf - PUT (a, b), hiir, PSET + GET (cursorX, cursorY)-(cursorX + 10, cursorY + 10), tempImage + PUT (cursorX, cursorY), cursorImage, PSET - a$ = INPUT$(1) - PUT (a, b), asdf, PSET + key$ = INPUT$(1) + PUT (cursorX, cursorY), tempImage, PSET - IF p = 2 AND a$ = CHR$(13) THEN - a2 = qw - ax1 = a - ax2 = b + IF inputPhase = 2 AND key$ = CHR$(13) THEN + destinationCell = selectedCell + cursorX = ax1 + cursorY = ax2 GOTO 8 END IF - IF p = 1 AND a$ = CHR$(13) THEN - a1 = qw - p = 2 + IF inputPhase = 1 AND key$ = CHR$(13) THEN + sourceCell = selectedCell + inputPhase = 2 END IF - IF a$ = "q" THEN + IF key$ = "q" THEN END END IF - IF a$ = "s" THEN - a = a + 40 + IF key$ = "s" THEN + cursorX = cursorX + 40 END IF - IF a$ = "a" THEN - a = a - 40 + IF key$ = "a" THEN + cursorX = cursorX - 40 END IF - IF a$ = "w" THEN - b = b - 18 + IF key$ = "w" THEN + cursorY = cursorY - 18 END IF - IF a$ = "z" THEN - b = b + 18 + IF key$ = "z" THEN + cursorY = cursorY + 18 END IF - IF a < 1 THEN - a = 1 + IF cursorX < 1 THEN + cursorX = 1 END IF - IF b < 1 THEN - b = 1 + IF cursorY < 1 THEN + cursorY = 1 END IF GOTO 7 8 - kaik = 1 - - LOCATE 3, 60 + moveMade = 1 - PRINT a1; "-"; a2 + 'LOCATE 3, 60 + 'PRINT sourceCell; "-"; destinationCell 10 ' This section controls the movement of pieces on the board - IF a1 = a2 + 19 AND nu(a1) = 0 AND nu(a2) = 3 THEN + IF sourceCell = destinationCell + 19 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 THEN BEEP - SWAP nu(a1), nu(a2) + SWAP boardState(sourceCell), boardState(destinationCell) END IF - IF a1 = a2 + 21 AND nu(a1) = 0 AND nu(a2) = 3 THEN + IF sourceCell = destinationCell + 21 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 THEN BEEP - SWAP nu(a1), nu(a2) + SWAP boardState(sourceCell), boardState(destinationCell) END IF - zxcv = 0 + captureMade = 0 - IF a1 = a2 + 42 AND nu(a1) = 0 AND nu(a2) = 3 AND nu(a2 + 21) = 1 THEN + IF sourceCell = destinationCell + 42 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 AND boardState(destinationCell + 21) = 1 THEN BEEP - SWAP nu(a1), nu(a2) - nu(a2 + 21) = 3 - zxcv = 1 + SWAP boardState(sourceCell), boardState(destinationCell) + boardState(destinationCell + 21) = 3 + captureMade = 1 END IF - IF a1 = a2 + 38 AND nu(a1) = 0 AND nu(a2) = 3 AND nu(a2 + 19) = 1 THEN + IF sourceCell = destinationCell + 38 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 AND boardState(destinationCell + 19) = 1 THEN BEEP - SWAP nu(a1), nu(a2) - nu(a2 + 19) = 3 - zxcv = 1 + SWAP boardState(sourceCell), boardState(destinationCell) + boardState(destinationCell + 19) = 3 + captureMade = 1 END IF - IF a1 = a2 - 42 AND nu(a1) = 0 AND nu(a2) = 3 AND nu(a2 - 21) = 1 THEN + IF sourceCell = destinationCell - 42 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 AND boardState(destinationCell - 21) = 1 THEN BEEP - SWAP nu(a1), nu(a2) - nu(a2 - 21) = 3 - zxcv = 1 + SWAP boardState(sourceCell), boardState(destinationCell) + boardState(destinationCell - 21) = 3 + captureMade = 1 END IF - IF a1 = a2 - 38 AND nu(a1) = 0 AND nu(a2) = 3 AND nu(a2 - 19) = 1 THEN + IF sourceCell = destinationCell - 38 AND boardState(sourceCell) = 0 AND boardState(destinationCell) = 3 AND boardState(destinationCell - 19) = 1 THEN BEEP - SWAP nu(a1), nu(a2) - nu(a2 - 19) = 3 - zxcv = 1 + SWAP boardState(sourceCell), boardState(destinationCell) + boardState(destinationCell - 19) = 3 + captureMade = 1 END IF - asend + UpdateDisplay - IF zxcv = 1 THEN - look - IF looma = 1 THEN + IF captureMade = 1 THEN + CheckPossibleMoves + IF hasMove = 1 THEN SOUND 1234, 1 - p = 2 - a1 = a2 + inputPhase = 2 + sourceCell = destinationCell GOTO 5 END IF END IF