# Script of card "chess" of stack "array_exercises" global gBoard_currentState # completely clear off the board on clearBoard # create an empty array repeat for each character tColumn in "abcdefgh" repeat with tRow = 1 to 8 put empty into board_array[tColumn][tRow] end repeat end repeat # set current state to empty array put board_array into gBoard_currentState updateBoard end clearBoard # set up the board to the beginning state on resetGame put empty into board_beginState put "RNBQKBNR" into tPieceOrder put "abcdefgh" into tColumns repeat with x = 1 to 8 put char x of tColumns into tCol # place first row pieces put char x of tPieceOrder & "_white" into tPieceName put tPieceName into board_beginState[tCol][1] put char x of tPieceOrder & "_black" into tPieceName put tPieceName into board_beginState[tCol][8] # place pawns put "P_white" into board_beginState[tCol][2] put "P_black" into board_beginState[tCol][7] end repeat # save the beginning state in the global current state variable put board_beginState into gBoard_currentState updateBoard end resetGame # given square references in the form B2, D5, etc., # update the current board state array on makeMove pOriginSquare, pDestSquare # determine what piece is in the start square # if none, abort put gBoard_currentState[char 1 of pOriginSquare][char 2 of pOriginSquare] into tOriginPiece if tOriginPiece is empty then beep updateBoard exit makeMove end if # determine color of origin piece # determine what's in destination square # if a piece of the same color, abort # if dest square is empty, move piece there # if dest square has enemy color there, remove attacked piece from board # update destination square with moved piece # delete piece from starting square put gBoard_currentState[char 1 of pDestSquare][char 2 of pDestSquare] into tDestPiece set the itemDelimiter to "_" if item -1 of tOriginPiece = item -1 of tDestPiece then beep updateBoard exit makeMove else put tOriginPiece into gBoard_currentState[char 1 of pDestSquare][char 2 of pDestSquare] put empty into gBoard_currentState[char 1 of pOriginSquare][char 2 of pOriginSquare] end if updateBoard end makeMove # this handler updates the visual state of the board using the contents of the array on updateBoard lock screen repeat for each character tColumn in "abcdefgh" repeat with tRow = 1 to 8 put tColumn & tRow into tBtnName if there is an image gBoard_currentState[tColumn][tRow] then set the icon of btn tBtnName to the id of img gBoard_currentState[tColumn][tRow] else set the icon of btn tBtnName to 0 end if end repeat end repeat unlock screen end updateBoard