def undoMove(): # read and build fpc fSqr_status = globVar.m_f_ps f_clr = globVar.m_f_p_color f_type = globVar.m_f_p_type f_label = globVar.m_f_p_label f_row = globVar.m_f_row f_col = globVar.m_f_col fpc = pieceConstructor(f_clr, f_type) fpc.label = f_label fpc.row = f_row fpc.col = f_col # read and build tpc tSqr_status = globVar.m_t_ps t_clr = globVar.m_t_p_color t_type = globVar.m_t_p_type t_label = globVar.m_t_p_label t_row = globVar.m_t_row t_col = globVar.m_t_col tpc = pieceConstructor(t_clr, t_type) tpc.label = t_label tpc.row = t_row tpc.col = t_col if fpc.type == "pawn": fpc.firstMove = globVar.m_fm # update the board board.uGrid(fpc) board.uGrid(tpc) updatePieces(fpc) board.Grid(fpc.row, fpc.col).pieceStatus = fSqr_status board.Grid(tpc.row, tpc.col).pieceStatus = tSqr_status # reset des board.Grid(fpc.row, fpc.col).des = False board.Grid(tpc.row, tpc.col).des = False if not globVar.removed: board.Grid(tpc.row, tpc.col).pieceStatus = False board.Grid(tpc.row, tpc.col).piece.color = "none" un_deletePiece(fpc) globVar.removed = False board.Grid(fpc.row, fpc.col).piece.selected = True
def read_firstPawns(save): p_array = save.readline().split(',') k = 0 n = globVar.firstPawnsNum for i in range(n): color = p_array[k] k += 1 selected = p_array[k] if selected == "True": sl = True else: sl = False k += 1 type = p_array[k] k += 1 label = int(p_array[k]) k += 1 row = int(p_array[k]) k += 1 col = int(p_array[k]) k += 1 fm = p_array[k] if fm == "True": firstMove = True else: firstMove = False k += 1 pc = pieces.Pawn(color, type) pc.selected = sl pc.label = label pc.row = row pc.col = col pc.firstMove = firstMove globVar.firstPawns.append(pc) board.Grid(row, col).piece.firstMove = firstMove index = findIndex(label, color) if color == "W" and index != None: globVar.w_pieces[index].firstMove = True elif color == "b" and index != None: globVar.b_pieces[index].firstMove = True
def recordMove(fromSqr, toSqr): # record fromSqr globVar.m_f_ps = fromSqr.pieceStatus globVar.m_f_p_color = fromSqr.piece.color globVar.m_f_p_type = fromSqr.piece.type globVar.m_f_p_label = fromSqr.piece.label globVar.m_f_row = fromSqr.row globVar.m_f_col = fromSqr.col # record toSqr globVar.m_t_ps = toSqr.pieceStatus globVar.m_t_p_color = toSqr.piece.color globVar.m_t_p_type = toSqr.piece.type globVar.m_t_p_label = toSqr.piece.label globVar.m_t_row = toSqr.row globVar.m_t_col = toSqr.col if fromSqr.piece.type == "pawn": globVar.m_fm = fromSqr.piece.firstMove board.Grid(fromSqr.row, fromSqr.col).piece.firstMove = False
def human_turn(): runagain = True while runagain: utils.clearAllOptions() fromSqr = select() fpc = copy.deepcopy(fromSqr.piece) availMoves = fromSqr.piece.scan() globVar.r_avail = copy.deepcopy(availMoves) globVar.r_avail_Num = len(globVar.r_avail) # remove invalid moves availMoves = utils.mark_invalid_moves(availMoves, fromSqr.piece) runagain = not utils.hasMoves(availMoves) if runagain: board.Grid(fromSqr.row, fromSqr.col).piece.selected = False am = fromSqr.piece.scan() utils.resetAvailMoves(am) Canvas.chooseAvailableMessage() Canvas.drawBoard() utils.un_resetAvailMoves(availMoves) choice = choose(availMoves) utils.record_user_move(fpc, availMoves, choice) pc = utils.move(fromSqr, availMoves, choice) # Check for check utils.check_king() # revert back if still in check if ((globVar.w_check and globVar.player == "W") or (globVar.b_check and globVar.player == "b")): Canvas.getouttacheckMessage() utils.undo_user_move() # utils.undoMove() human_turn() utils.check_pawn(pc)
def scan(self): availMoves = [] optionCounter = 1 pieceFound = False # scan 2 up 1 left rowCount = self.row - 2 colCount = self.col - 1 if self.row > 1 and self.col > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 2 up 1 right rowCount = self.row - 2 colCount = self.col + 1 if self.row > 1 and self.col < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 1 up 2 right rowCount = self.row - 1 colCount = self.col + 2 if self.row > 0 and self.col < 6: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 1 down 2 right rowCount = self.row + 1 colCount = self.col + 2 if self.row < 7 and self.col < 6: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 2 down 1 right rowCount = self.row + 2 colCount = self.col + 1 if self.row < 6 and self.col < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 2 down 1 left rowCount = self.row + 2 colCount = self.col - 1 if self.row < 6 and self.col > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 1 down 2 left rowCount = self.row + 1 colCount = self.col - 2 if self.row < 7 and self.col > 1: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan 1 up 2 left rowCount = self.row - 1 colCount = self.col - 2 if self.row > 0 and self.col > 1: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True return availMoves
def scan(self): availMoves = [] optionCounter = 1 pieceFound = False running = True rowCount = self.row colCount = self.col # scan above while rowCount - 1 > -1 and running: rowCount -= 1 if (board.Grid(rowCount, self.col).piece.color != self.color): board.Grid(rowCount, self.col).des = True board.Grid(rowCount, self.col).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, self.col)) if board.Grid(rowCount, self.col).pieceStatus: pieceFound = True else: rowCount = 0 running = False if pieceFound: rowCount = 0 running = False # scan below rowCount = self.row running = True pieceFound = False while rowCount + 1 < 8 and running: rowCount += 1 if (board.Grid(rowCount, self.col).piece.color != self.color): board.Grid(rowCount, self.col).des = True board.Grid(rowCount, self.col).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, self.col)) if board.Grid(rowCount, self.col).pieceStatus: pieceFound = True else: rowCount = 7 running = False if pieceFound: rowCount = 7 running = False # scan right running = True pieceFound = False while colCount + 1 < 8 and running: colCount += 1 if (board.Grid(self.row, colCount).piece.color != self.color): board.Grid(self.row, colCount).des = True board.Grid(self.row, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(self.row, colCount)) if board.Grid(self.row, colCount).pieceStatus: pieceFound = True else: colCount = 7 running = False if pieceFound: colCount = 7 running = False # scan left colCount = self.col running = True pieceFound = False while colCount - 1 > -1 and running: colCount -= 1 if (board.Grid(self.row, colCount).piece.color != self.color): board.Grid(self.row, colCount).des = True board.Grid(self.row, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(self.row, colCount)) if board.Grid(self.row, colCount).pieceStatus: pieceFound = True else: colCount = 0 running = False if pieceFound: colCount = 0 running = False return availMoves
def clearAllOptions(): for i in range(8): for j in range(8): board.Grid(i, j).option = 0 board.Grid(i, j).des = False
def writeBoard(save): for i in range(8): for j in range(8): save.write(str(board.Grid(i, j).pieceStatus)) save.write(",") save.write(str(board.Grid(i, j).color)) save.write(",") save.write(str(board.Grid(i, j).row)) save.write(",") save.write(str(board.Grid(i, j).col)) save.write(",") save.write(str(board.Grid(i, j).des)) save.write(",") save.write(str(board.Grid(i, j).option)) save.write(",") save.write(str(board.Grid(i, j).piece.type)) save.write(",") save.write(str(board.Grid(i, j).piece.color)) save.write(",") save.write(str(board.Grid(i, j).piece.selected)) save.write(",") save.write(str(board.Grid(i, j).piece.label)) save.write(",") save.write(str(board.Grid(i, j).piece.row)) save.write(",") save.write(str(board.Grid(i, j).piece.col)) save.write(",")
def readBoard(save): board.populate() k = 0 sqrArray = save.readline().split(',') for i in range(8): for j in range(8): ps = sqrArray[k] if ps == "True": pieceStatus = True else: pieceStatus = False k += 1 board.Grid(i, j).color = sqrArray[k] k += 1 board.Grid(i, j).row = int(sqrArray[k]) k += 1 board.Grid(i, j).col = int(sqrArray[k]) k += 1 board.Grid(i, j).des = False k += 1 board.Grid(i, j).option = int(sqrArray[k]) k += 1 type = sqrArray[k] k += 1 color = sqrArray[k] k += 1 selected = False k += 1 label = int(sqrArray[k]) k += 1 row = int(sqrArray[k]) k += 1 col = int(sqrArray[k]) k += 1 pc = pieceConstructor(color, type) board.Grid(i, j).piece = pc board.Grid(i, j).piece.selected = selected board.Grid(i, j).piece.label = label board.Grid(i, j).piece.row = row board.Grid(i, j).piece.col = col board.Grid(i, j).pieceStatus = pieceStatus
def scan(self): availMoves = [] optionCounter = 1 pieceFound = False # scan up and left rowCount = self.row - 1 colCount = self.col - 1 if self.row > 0 and self.col > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan up pieceFound = False rowCount = self.row - 1 colCount = self.col if self.row > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan up and right pieceFound = False rowCount = self.row - 1 colCount = self.col + 1 if self.row > 0 and self.col < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan right pieceFound = False rowCount = self.row colCount = self.col + 1 if self.col < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True ################################ # scan down and right pieceFound = False rowCount = self.row + 1 colCount = self.col + 1 if self.row < 7 and self.col < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan down pieceFound = False rowCount = self.row + 1 colCount = self.col if self.row < 7: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan down and left pieceFound = False rowCount = self.row + 1 colCount = self.col - 1 if self.row < 7 and self.col > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # scan left pieceFound = False rowCount = self.row colCount = self.col - 1 if self.col > 0: if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True # check availMoves and remove the ones that put user in check # if ((self.color == "W" and globVar.w_check) or # (self.color == "b" and globVar.b_check) and # not globVar.scanning): # availMoves = utils.remove_invalid_moves(availMoves, self) return availMoves
def scan(self): # rook code availMoves = [] optionCounter = 1 pieceFound = False running = True rowCount = self.row colCount = self.col # scan above while rowCount - 1 > -1 and running: rowCount -= 1 if (board.Grid(rowCount, self.col).piece.color != self.color): board.Grid(rowCount, self.col).des = True board.Grid(rowCount, self.col).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, self.col)) if board.Grid(rowCount, self.col).pieceStatus: pieceFound = True else: rowCount = 0 running = False if pieceFound: rowCount = 0 running = False # scan below rowCount = self.row running = True pieceFound = False while rowCount + 1 < 8 and running: rowCount += 1 if (board.Grid(rowCount, self.col).piece.color != self.color): board.Grid(rowCount, self.col).des = True board.Grid(rowCount, self.col).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, self.col)) if board.Grid(rowCount, self.col).pieceStatus: pieceFound = True else: rowCount = 7 running = False if pieceFound: rowCount = 7 running = False # scan right running = True pieceFound = False while colCount + 1 < 8 and running: colCount += 1 if (board.Grid(self.row, colCount).piece.color != self.color): board.Grid(self.row, colCount).des = True board.Grid(self.row, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(self.row, colCount)) if board.Grid(self.row, colCount).pieceStatus: pieceFound = True else: colCount = 7 running = False if pieceFound: colCount = 7 running = False # scan left colCount = self.col running = True pieceFound = False while colCount - 1 > -1 and running: colCount -= 1 if (board.Grid(self.row, colCount).piece.color != self.color): board.Grid(self.row, colCount).des = True board.Grid(self.row, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(self.row, colCount)) if board.Grid(self.row, colCount).pieceStatus: pieceFound = True else: colCount = 0 running = False if pieceFound: colCount = 0 running = False ##################################### # bishop code pieceFound = False running = True edgeFound = False # reset rowCount and colCount rowCount = self.row colCount = self.col # scan up if self.row > 0: if self.col > 0: # scan up and left while (rowCount - 1 > -1 or colCount - 1 > -1) and running and not edgeFound: rowCount -= 1 colCount -= 1 if colCount == -1 or rowCount == -1: edgeFound = True elif (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True else: rowCount = 0 colCount = 0 running = False if pieceFound: rowCount = 0 colCount = 0 running = False # reset rowCount and colCount rowCount = self.row colCount = self.col edgeFound = False running = True pieceFound = False if self.col < 7: # scan up and right while (rowCount - 1 > -1 or colCount + 1 < 8) and running and not edgeFound: rowCount -= 1 colCount += 1 if colCount == 7 or rowCount == 0: edgeFound = True if (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True else: rowCount = 0 colCount = 7 running = False if pieceFound: rowCount = 0 colCount = 7 running = False #scan down if self.row < 7: # reset rowCount and colCount rowCount = self.row colCount = self.col edgeFound = False running = True pieceFound = False # scan down and left if self.col > 0: while (rowCount + 1 < 8 or colCount - 1 > -1) and running and not edgeFound: rowCount += 1 colCount -= 1 if colCount == -1 or rowCount == 8: edgeFound = True elif (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True else: rowCount = 7 colCount = 0 running = False if pieceFound: rowCount = 7 colCount = 0 running = False # reset rowCount and colCount rowCount = self.row colCount = self.col edgeFound = False running = True pieceFound = False # scan down and right if self.col < 7: while (rowCount + 1 < 8 or colCount + 1 < 8) and running and not edgeFound: rowCount += 1 colCount += 1 if colCount == 8 or rowCount == 8: edgeFound = True elif (board.Grid(rowCount, colCount).piece.color != self.color): board.Grid(rowCount, colCount).des = True board.Grid(rowCount, colCount).option = optionCounter optionCounter += 1 availMoves.append(board.Grid(rowCount, colCount)) if board.Grid(rowCount, colCount).pieceStatus: pieceFound = True else: rowCount = 7 colCount = 7 running = False if pieceFound: rowCount = 7 colCount = 7 running = False return availMoves
import board window = board.Grid(30, 20, 30, 2, 10, 10, 200) window.loop()
def scan(self): # Determine direction if self.color == "W": dn = -1 else: dn = 1 availMoves = [] optionCounter = 1 blocked = True doubleBlocked = True if ((self.row > 0 and self.color == "W") or (self.row < 7 and self.color == "b")): blocked = board.Grid((self.row + (1 * dn)), self.col).pieceStatus if ((self.row > 1 and self.color == "W") or (self.row < 6 and self.color == "b")): doubleBlocked = board.Grid((self.row + (2 * dn)), self.col).pieceStatus # Scan directly ahead if (not blocked): availMoves.append(board.Grid((self.row + (1 * dn)), self.col)) board.Grid((self.row + (1 * dn)), self.col).des = True board.Grid((self.row + (1 * dn)), self.col).option = optionCounter optionCounter += 1 # Scan two spaces ahead if (self.firstMove and not blocked and not doubleBlocked): availMoves.append(board.Grid((self.row + (2 * dn)), self.col)) board.Grid((self.row + (2 * dn)), self.col).des = True board.Grid((self.row + (2 * dn)), self.col).option = optionCounter optionCounter += 1 # Check for diagonal enemies # left if self.col > 0 and (self.row + (1 * dn)) >= 0 and (self.row + (1 * dn)) <= 7: diagColor = board.Grid((self.row + (1 * dn)), (self.col - 1)).piece.color if (diagColor != self.color and diagColor != "none"): availMoves.append( board.Grid((self.row + (1 * dn)), (self.col - 1))) board.Grid((self.row + (1 * dn)), (self.col - 1)).des = True board.Grid((self.row + (1 * dn)), (self.col - 1)).option = optionCounter optionCounter += 1 # right if self.col < 7 and (self.row + (1 * dn)) >= 0 and (self.row + (1 * dn)) <= 7: diagColor = board.Grid((self.row + (1 * dn)), (self.col + 1)).piece.color if (diagColor != self.color and diagColor != "none"): availMoves.append( board.Grid((self.row + (1 * dn)), (self.col + 1))) board.Grid((self.row + (1 * dn)), (self.col + 1)).des = True board.Grid((self.row + (1 * dn)), (self.col + 1)).option = optionCounter optionCounter += 1 return availMoves