1# -*- coding: UTF-8 -*- 2 3 4NAME = "PyChess" 5 6# Player types 7LOCAL, ARTIFICIAL, REMOTE = range(3) 8 9# Engine strengths 10EASY, INTERMEDIATE, EXPERT = range(3) 11 12# Tools 13TOOL_NONE, TOOL_CHESSDB, TOOL_SCOUTFISH = range(3) 14 15# Player colors 16WHITE, BLACK = range(2) 17 18# Game states 19WAITING_TO_START, PAUSED, RUNNING, DRAW, WHITEWON, BLACKWON, KILLED, \ 20 ADJOURNED, ABORTED, UNKNOWN_STATE, ICC_ABORTED, CANCELLED = range(12) 21reprResult = ["*", "*", "*", "1/2-1/2", "1-0", "0-1", "*", "*", "*", "*", "*", "*"] 22 23UNDOABLE_STATES = (DRAW, WHITEWON, BLACKWON) 24UNFINISHED_STATES = (WAITING_TO_START, PAUSED, RUNNING, UNKNOWN_STATE) 25 26# Chess variants 27NORMALCHESS, CORNERCHESS, SHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, \ 28 ASYMMETRICRANDOMCHESS, UPSIDEDOWNCHESS, PAWNSPUSHEDCHESS, PAWNSPASSEDCHESS, \ 29 THEBANCHESS, PAWNODDSCHESS, KNIGHTODDSCHESS, ROOKODDSCHESS, QUEENODDSCHESS, \ 30 BLINDFOLDCHESS, HIDDENPAWNSCHESS, HIDDENPIECESCHESS, ALLWHITECHESS, \ 31 ATOMICCHESS, BUGHOUSECHESS, CRAZYHOUSECHESS, LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, \ 32 WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, KINGOFTHEHILLCHESS, THREECHECKCHESS, HORDECHESS, \ 33 RACINGKINGSCHESS, ASEANCHESS, MAKRUKCHESS, SITTUYINCHESS, CAMBODIANCHESS, AIWOKCHESS, \ 34 EUROSHOGICHESS, SETUPCHESS, PLACEMENTCHESS = range(38) 35 36ASEAN_VARIANTS = (ASEANCHESS, MAKRUKCHESS, CAMBODIANCHESS, AIWOKCHESS, 37 SITTUYINCHESS) 38DROP_VARIANTS = (BUGHOUSECHESS, CRAZYHOUSECHESS, EUROSHOGICHESS, SITTUYINCHESS, 39 SETUPCHESS, PLACEMENTCHESS) 40UNSUPPORTED = (BUGHOUSECHESS, AIWOKCHESS, EUROSHOGICHESS, SETUPCHESS) 41 42# Chess variant groups 43VARIANTS_BLINDFOLD, VARIANTS_ODDS, VARIANTS_SHUFFLE, VARIANTS_OTHER, \ 44 VARIANTS_OTHER_NONSTANDARD, VARIANTS_ASEAN = range(6) 45 46# Action errors 47ACTION_ERROR_NOT_OUT_OF_TIME, \ 48 ACTION_ERROR_CLOCK_NOT_STARTED, ACTION_ERROR_SWITCH_UNDERWAY, \ 49 ACTION_ERROR_CLOCK_NOT_PAUSED, ACTION_ERROR_TOO_LARGE_UNDO, \ 50 ACTION_ERROR_NONE_TO_ACCEPT, ACTION_ERROR_NONE_TO_WITHDRAW, \ 51 ACTION_ERROR_NONE_TO_DECLINE, = range(8) 52 53# Game state reasons 54ABORTED_ADJUDICATION, ABORTED_AGREEMENT, ABORTED_COURTESY, ABORTED_EARLY, \ 55 ABORTED_SERVER_SHUTDOWN, ADJOURNED_COURTESY, ABORTED_DISCONNECTION, \ 56 ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION, ADJOURNED_SERVER_SHUTDOWN, \ 57 ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, \ 58 ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK, \ 59 DRAW_50MOVES, DRAW_ADJUDICATION, DRAW_AGREE, DRAW_CALLFLAG, DRAW_INSUFFICIENT, \ 60 DRAW_EQUALMATERIAL, DRAW_LENGTH, DRAW_REPETITION, DRAW_STALEMATE, DRAW_KINGSINEIGHTROW, \ 61 DRAW_BLACKINSUFFICIENTANDWHITETIME, DRAW_WHITEINSUFFICIENTANDBLACKTIME, \ 62 WON_ADJUDICATION, WON_CALLFLAG, WON_DISCONNECTION, WON_MATE, WON_RESIGN, \ 63 WON_LESSMATERIAL, WON_NOMATERIAL, WON_KINGEXPLODE, WON_KINGINCENTER, \ 64 WON_THREECHECK, WON_KINGINEIGHTROW, WON_WIPEOUT, PRACTICE_GOAL_REACHED, \ 65 WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, DISCONNECTED, UNKNOWN_REASON = range(43) 66 67ABORTED_REASONS = (ABORTED_ADJUDICATION, ABORTED_AGREEMENT, ABORTED_COURTESY, 68 ABORTED_EARLY, ABORTED_SERVER_SHUTDOWN, ABORTED_DISCONNECTION) 69 70ADJOURNED_REASONS = (ADJOURNED_COURTESY, ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION, 71 ADJOURNED_SERVER_SHUTDOWN, ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, 72 ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK) 73 74UNDOABLE_REASONS = (DRAW_50MOVES, DRAW_INSUFFICIENT, DRAW_EQUALMATERIAL, 75 DRAW_REPETITION, DRAW_STALEMATE, DRAW_AGREE, DRAW_CALLFLAG, 76 DRAW_KINGSINEIGHTROW, DRAW_BLACKINSUFFICIENTANDWHITETIME, 77 DRAW_WHITEINSUFFICIENTANDBLACKTIME, 78 WON_MATE, WON_NOMATERIAL, WON_CALLFLAG, WON_RESIGN, 79 WON_LESSMATERIAL, WON_KINGEXPLODE, WON_KINGINCENTER, WON_THREECHECK, 80 WON_KINGINEIGHTROW, WON_WIPEOUT) 81 82ADJUDICATION_REASONS = (DRAW_ADJUDICATION, WON_ADJUDICATION) 83 84DEATH_REASONS = (WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, DISCONNECTED) 85 86CALLFLAG_REASONS = (DRAW_CALLFLAG, WON_CALLFLAG) 87 88# Player actions 89RESIGNATION = "resignation" 90FLAG_CALL = "flag call" 91DRAW_OFFER = "draw offer" 92ABORT_OFFER = "abort offer" 93ADJOURN_OFFER = "adjourn offer" 94PAUSE_OFFER = "pause offer" 95RESUME_OFFER = "resume offer" 96SWITCH_OFFER = "switch offer" 97TAKEBACK_OFFER = "takeback offer" 98MATCH_OFFER = "match offer" 99HURRY_ACTION = "hurry action" 100CHAT_ACTION = "chat action" 101 102ACTIONS = (RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, 103 PAUSE_OFFER, RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, 104 MATCH_OFFER, HURRY_ACTION, CHAT_ACTION) 105OFFERS = (DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, PAUSE_OFFER, 106 RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, MATCH_OFFER) 107INGAME_ACTIONS = (RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, 108 ADJOURN_OFFER, PAUSE_OFFER, SWITCH_OFFER, HURRY_ACTION) 109 110# A few nice to have boards 111FEN_EMPTY = "4k3/8/8/8/8/8/8/4K3 w - - 0 1" 112FEN_START = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" 113 114# Search values 115 116hashfALPHA, hashfBETA, hashfEXACT, hashfBAD = range(4) 117 118# Engine modes 119NORMAL, ANALYZING, INVERSE_ANALYZING = range(3) 120 121# Piece types 122 123# BPAWN is a pawn that moves in the opposite direction 124EMPTY, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, BPAWN, \ 125 ASEAN_WBISHOP, ASEAN_BBISHOP, ASEAN_QUEEN = range(11) 126 127# Is sliding piece 128sliders = [False, False, False, True, True, True, False, False, False, False, 129 False] 130 131# Piece signs 132reprSign = ["", "P", "N", "B", "R", "Q", "K"] 133reprSignMakruk = ["", "P", "N", "S", "R", "M", "K"] 134reprSignSittuyin = ["", "P", "N", "S", "R", "F", "K"] 135chr2Sign = {"k": KING, 136 "q": QUEEN, 137 "r": ROOK, 138 "b": BISHOP, 139 "n": KNIGHT, 140 "p": PAWN, 141 "m": QUEEN, 142 "s": BISHOP, 143 "f": QUEEN} 144chrU2Sign = {"K": KING, 145 "Q": QUEEN, 146 "R": ROOK, 147 "B": BISHOP, 148 "N": KNIGHT, 149 "P": PAWN, 150 "M": QUEEN, 151 "S": BISHOP, 152 "F": QUEEN} 153 154# Move values 155NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, \ 156 KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, \ 157 QUEEN_PROMOTION, KING_PROMOTION, NULL_MOVE, DROP = range(11) 158PROMOTIONS = (KING_PROMOTION, QUEEN_PROMOTION, ROOK_PROMOTION, 159 BISHOP_PROMOTION, KNIGHT_PROMOTION) 160 161# Algebraic notation types: Short, Long, Figure and Simpe 162SAN, LAN, FAN, AN = range(4) 163# Castling notation types: e.g., O-O, e1g1, e1h1 164CASTLE_SAN, CASTLE_KK, CASTLE_KR = range(3) 165 166FAN_PIECES = [ 167 ["", "♙", "♘", "♗", "♖", "♕", "♔", ""], 168 ["", "♟", "♞", "♝", "♜", "♛", "♚", ""] 169] 170 171# Castling values 172W_OO, W_OOO, B_OO, B_OOO = [2**i for i in range(4)] 173CAS_FLAGS = ((W_OOO, W_OO), (B_OOO, B_OO)) 174W_CASTLED, B_CASTLED = [2**i for i in range(2)] 175 176NB_OF_CASES = 64 177 178# Cords types 179A1, B1, C1, D1, E1, F1, G1, H1,\ 180 A2, B2, C2, D2, E2, F2, G2, H2,\ 181 A3, B3, C3, D3, E3, F3, G3, H3,\ 182 A4, B4, C4, D4, E4, F4, G4, H4,\ 183 A5, B5, C5, D5, E5, F5, G5, H5,\ 184 A6, B6, C6, D6, E6, F6, G6, H6,\ 185 A7, B7, C7, D7, E7, F7, G7, H7,\ 186 A8, B8, C8, D8, E8, F8, G8, H8 = range(64) 187 188reprCord = [ 189 "a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", 190 "a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2", 191 "a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3", 192 "a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4", 193 "a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5", 194 "a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6", 195 "a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7", 196 "a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8" 197] 198 199reprFile = ["a", "b", "c", "d", "e", "f", "g", "h"] 200reprRank = ["1", "2", "3", "4", "5", "6", "7", "8"] 201 202# dictionary for giving the cord linked to the flattened index of a coordinate 203cordDic = {} 204for cord, name in enumerate(reprCord): 205 cordDic[name] = cord 206 207# User interface 208 209# pagination in database game list 210FIRST_PAGE = 0 211PREV_PAGE = -1 212NEXT_PAGE = 1 213 214# Hint modes 215OPENING, ENDGAME, HINT, SPY = ["opening", "endgame", "hint", "spy"] 216 217# Sound settings 218SOUND_MUTE, SOUND_BEEP, SOUND_SELECT, SOUND_URI = range(4) 219COUNT_OF_SOUNDS = 13 220 221# Brush types. Send piece object for Piece brush 222CLEAR, ENPAS = range(2) 223 224# Main menu items 225GAME_MENU_ITEMS = ("save_game1", "save_game_as1", "share_game", 226 "export_position1", "analyze_game1", "properties1", 227 "close1") 228ACTION_MENU_ITEMS = ("abort", "adjourn", "draw", "pause1", "resume1", "undo1", 229 "call_flag", "resign", "ask_to_move") 230VIEW_MENU_ITEMS = ("rotate_board1", "show_sidepanels", "hint_mode", "spy_mode") 231EDIT_MENU_ITEMS = ("copy_pgn", "copy_fen", ) 232MENU_ITEMS = GAME_MENU_ITEMS + ACTION_MENU_ITEMS + VIEW_MENU_ITEMS + EDIT_MENU_ITEMS 233 234# Column name 235COLUMN_ROW_RESET = "column_row_reset" 236 237# Gtk icon name 238GTK_ICON_VIEW_REFRESH = "view-refresh" 239 240# Learn categories 241LECTURE, LESSON, PUZZLE, ENDGAME = range(4) 242