³ò h3Gc@s˜ddkTddkTdZdZeeƒZdZdZdZdZ dZ dZ d Z d Z eed ee ee eZeed eeZeeZeeZd Zd ZdZd ZdddddgZdddddgZdZdZd ZdZdZdZdd,d„ƒYZd„Zd „Z d!„Z!d"„Z"d#„Z#d$„Z$d%„Z%d&„Z&d'„Z'd(„Z(d)„Z)d*„Z*e*ƒd+S(-iÿÿÿÿ(t*i2ii(iixidiiiitredtbluetdarkBluetkingtrooktbishoptqueentknightsClick a piece name.sClick a board square.s-You missed! Try again to click a piece name!sYou missed! Click on the board!sClick to end programiiiit BoardSquarecBs2eZdZd„Zd„Zd„Zd„ZRS(sA highlightable board squarecCs tt|tt|tƒ}t|t|iƒt|iƒtƒƒ|_||ddjo d|_n d|_|ii |iƒ|ii |ƒdS(Niitwhitetblack( tPointttopLeftXt SQUARE_SIZEttopLeftYt RectangletgetXtgetYtrectt normalColortsetFilltdraw(tselftitjtwint cornerPoint((sChessMovesSample.pyt__init__=s  cCs|iitƒdS(s*Set this square to the 'legal move' color.N(RRtHIGHLIGHT_COLOR(R((sChessMovesSample.pyt highlightIscCs|iitƒdS(s;Set this square to indicate that the piece is placed on it.N(RRtCURRENT_POS_COLOR(R((sChessMovesSample.pytmarkCurrentColorMscCs|ii|iƒdS(s&Reset this square to its normal color.N(RRR(R((sChessMovesSample.pytclearQs(t__name__t __module__t__doc__RRR R!(((sChessMovesSample.pyR ;s   cCsXg}xKtD]C}g}x'tD]}|it|||ƒƒq W|i|ƒq W|S(screate the chessboard(t BOARD_RANGEtappendR (RtboardRtboardRowR((sChessMovesSample.pyt makeBoardZscCsµx®tD]¦}ttt|ttdttdƒt|ƒƒ}|it ƒ|i |ƒttttdt|ttdƒt|ƒƒ}|it ƒ|i |ƒqWdS(sFPut the row and column numbers at the top and left sides of the board.iN( R%tTextR R RRtSPACE_FOR_NUMBERStstrtsetSizet FONT_SIZER(RRtt((sChessMovesSample.pytplaceRowAndColNumbersgs   c Cs{g}xntttƒƒD]Z}t|t|tttttt dt |t t t dƒƒ}|i |ƒqW|S(s#Create the piece selection buttons.i(trangetlent pieceNamestButtonR R t BOARD_DIMRtSPACE_BETWEEN_BOARD_AND_BUTTONSt BUTTON_WIDTHRtBUTTON_SPACINGt BUTTON_HEIGHTR&(Rt buttonListRtb((sChessMovesSample.pyt makeButtonsus cCsuttttttttdtt t ƒt t t ƒt tƒ}|itƒ|idƒ|i|ƒ|S(s*Create the text field for the instructionsii(R*R R R5RR6R7t TEXT_WIDTHRR2R3R8R9t instructionstPIECE_SELECTION_MESAGERtNORMAL_INSTRUCTION_COLORR-R(RtinstBox((sChessMovesSample.pytmakeInstructionFields    cCsgg}x4tD],}|i||gƒ|i||gƒq W|i||gƒ|i||gƒ|S(sCReturns list of points where a rook in position (row, col) can move(R%R&tremove(trowtcoltmoveListR((sChessMovesSample.pytrookMovescCs©g}xvtD]n}|||tjo|i||||gƒn|||tjo|i||||gƒq q W|i||gƒ|i||gƒ|S(sEReturns list of points where a bishop in position (row, col) can move(R%R&RC(RDRERFR((sChessMovesSample.pyt bishopMovešs#cCst||ƒt||ƒS(sDReturns list of points where a queen in position (row, col) can move(RHRG(RDRE((sChessMovesSample.pyt queenMove¦scCs˜g}xxttd|dƒt|dtƒƒD]M}xDttd|dƒt|dtƒƒD]}|i||gƒq`Wq0W|i||gƒ|S(sCReturns list of points where a king in position (row, col) can moveiii(R1tmaxtminR5R&RC(RDRERFRR((sChessMovesSample.pytkingMoveªs**c Csºg}ddgddgddgddgddgddgddgddgg}x_|D]W}||dtjo<||dtjo'|i||d||dgƒq[q[W|S(sEReturns list of points where a knight in position (row, col) can moveiiiþÿÿÿiÿÿÿÿi(R%R&(RDRERFt knightOffsetstoff((sChessMovesSample.pyt knightMove³s$**+cCsA|||iƒx(|D] }||d|diƒqWdS(s3Mark the starting board square and the legal moves.iiN(R R(R'tstartRowtstartColt legalMoveListtsq((sChessMovesSample.pythighlightMoves¿scCs8x1tD])}x tD]}|||iƒqWqWdS(s)Reset all squares to their normal colors.N(R%R!(R'RR((sChessMovesSample.pytclearAllÆs c CsðdGtddƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtd d ƒGHd GtddƒGHd GtddƒGHd GtddƒGHdGtddƒGHdGtd d ƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtd d ƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtd d ƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtddƒGHdGtddƒGHd GtddƒGHd!Gtd d ƒGHtd"ttƒ}|id#ƒt |ƒ}t |ƒt |ƒ}t |ƒ}x¢t tdd$ƒD]Ž}|djo)|i|iƒd%t|ƒd&ƒn&|i|iƒd%t|ƒd'ƒd(}x…|d(jow|iƒ}t|ƒx+|D]#}|i|ƒo |i}qÚqÚW|d(jo"|itƒ|ittƒq°q°W|itƒ|i|d)ttƒxvton|iƒ}|iƒtt}|i ƒt!t} |t"jo | t"joþ|d*jot|| ƒ} n‡|d+jot|| ƒ} ng|d,jot|| ƒ} nG|d-jot|| ƒ} n'|d.jot|| ƒ} ng} t#||| | ƒ|itƒ|djo|itt$ƒn|itt%ƒPq^|itƒ|itt&ƒq^WqFW|iƒ|i'ƒdS(/Ns rook: 0 0 is rook: 0 3 is rook: 3 0 s rook: 4 4 is rook: 5 7 iis king: 0 0 s king: 0 3 s king: 3 0 s king: 4 4 s king: 5 7 s bishop: 0 0 s bishop: 0 3 s bishop: 3 0 s bishop: 4 4 s bishop: 5 7 s queen: 0 0 s queen: 0 3 s queen: 3 0 s queen: 4 4 s queen: 5 7 s knight: 0 0 s knight: 0 3 s knight: 3 0 s knight: 4 4 s knight: 1 1 is knight: 1 4 s knight: 5 7 tChessttaniÿÿÿÿs s tests remaining.s test remaining.ts selected RRRRR((RGRLRHRIROtGraphWint WINDOW_WIDTHt WINDOW_HEIGHTt setBackgroundR)R0R<RBR1tNUMBER_OF_TESTS_TO_RUNtsetTexttgetTextR,tgetMouseRUtclickedtlabelRtERROR_INSTRUCTION_COLORR>t PIECE_MISSEDR@tSQUARE_SELECTION_MESSAGEtTrueRRRRR R%RTR?t END_MESSAGEt BOARD_MISSEDtclose( RR'R:t instFieldttestNumtpiecet clickPointR;RDRERF((sChessMovesSample.pytmainÎsž                       N((+tgraphicsR4RR5R1R%tINSETR+R=R7R9R8R6R.RZR[R RRRR@RcR3R>R?ReRdRhRgR]R R)R0R<RBRGRHRIRLRORTRURn(((sChessMovesSample.pyssZ   "         e