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