ž ¾ã¡Sc@s!ddlTddlZdaetƒadZetadZda d'Z dd„Z d d „Z d d „Z d d„Zdd„Zdd„Zdd„Zdd„ZeegZdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZeƒdS((i(u*Nii–iicCs~xwtdtƒD]f}ttd|tƒtt|tƒƒjtƒtt|tdƒt|ttƒƒjtƒqWdS(Nii(urangeu BOARDSIZEuLineuPointuPPSu WINDOWSIZEudrawuwin(ui((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyudrawGrids0udrawGridcCs%tt|tdt|tdƒS(ucoordinates of center of squarei(uPointuPPS(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu rectCentersu rectCentercCstt|tt|tƒS(u'coordinates of top left of inset X or O(uPointuPPSuINSET(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu rectUpperLeftsu rectUpperLeftcCs%tt|dtt|dtƒS(u+coordinates of bottom right of inset X or Oi(uPointuPPSuINSET(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyurectLowerRight#surectLowerRightcCs!tt|dtt|tƒS(u(coordinates of top right of inset X or Oi(uPointuPPSuINSET(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyurectUpperRight'surectUpperRightcCs!tt|tt|dtƒS(u*coordinates of bottom left of inset X or Oi(uPointuPPSuINSET(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu rectLowerLeft+su rectLowerLeftcCsTtt||ƒt||ƒƒjtƒtt||ƒt||ƒƒjtƒdS(uDraw an X in the given squareN(uLineu rectUpperLefturectLowerRightudrawuwinu rectLowerLefturectUpperRight(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyudrawX1s(udrawXcCs+tt||ƒtdtƒjtƒdS(uDraw an O in the given squareiN(uCircleu rectCenteruPPSuINSETudrawuwin(urowucol((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyudrawO6sudrawOcCs|tS(uFFind out row or colum number that corresponds to this pixel coordinate(uPPS(u pixelCoord((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu boardCoord=su boardCoordcCsðt||}t||ƒr=t|dƒt|tdƒgSt||ƒrltd|ƒttd|ƒgS||kr¨t|ƒr¨tddƒttdtdƒgS||tdkrìt|ƒrìtdtdƒt tddƒgSdS(u1Check to see if the latest move resulted in a winiiF( u squareStateucheckRowu rectUpperLefturectLowerRightu BOARDSIZEucheckColucheckMainDiagonalucheckOtherDiagonalurectUpperRightu rectLowerLeftuFalse(urowucoluxo((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu checkWinnerDs  $ $u checkWinnercCst|ddd|ƒS(Nii(u checkGeneral(urowuxo((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyucheckRowQsucheckRowcCstd|dd|ƒS(Nii(u checkGeneral(ucoluxo((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyucheckColSsucheckColcCstdddd|ƒS(Nii(u checkGeneral(uxo((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyucheckMainDiagonalUsucheckMainDiagonalcCstdtddd|ƒS(Niiiÿÿÿÿ(u checkGeneralu BOARDSIZE(uxo((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyucheckOtherDiagonalWsucheckOtherDiagonalcCsAx:tD]2}t|||kr%dS||7}||7}qWdS(NFT(u BOARDRANGEu squareStateuFalseuTrue(urowucolu rowIncrementu colIncrementuxoui((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu checkGeneralZs   u checkGeneralcCstdƒ}|dkr=t|ƒattƒattantdttƒadd„tDƒa t ƒd}xô|ttkretj ƒ}t |j ƒƒt |jƒƒ}}t ||tkrrt|d||ƒ|dt ||<|d}t||ƒ}|rbt|d|dƒ}|jd ƒ|jd ƒ|jd dƒ|jtƒPqbqrqrWtjd ƒtjƒdS( Nu&Enter board size (Press Enter for 3): uuTicTacToe version 6cSs#g|]}dd„tDƒ‘qS(cSsg|] }t‘qS((uEMPTY(u.0uj((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu os u#main...(u BOARDRANGE(u.0ui((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyu os umain..iiiurediii(uinputuintu BOARDSIZEurangeu BOARDRANGEuPPSu WINDOWSIZEuGraphWinuwinu squareStateudrawGridugetMouseu boardCoordugetYugetXuEMPTYudrawListu checkWinneruLineu setOutlineusetWidthumoveudrawutimeusleepuclose(uuserSizeu turnCountu clickPointurowucoluwinneruwinLine((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyumaincs4      %      umainiÿÿÿÿ(u zellegraphicsutimeu BOARDSIZEurangeu BOARDRANGEuPPSu WINDOWSIZEuINSETuNoneuwinuEMPTYudrawGridu rectCenteru rectUpperLefturectLowerRighturectUpperRightu rectLowerLeftudrawXudrawOudrawListu boardCoordu checkWinnerucheckRowucheckColucheckMainDiagonalucheckOtherDiagonalu checkGeneralumain(((uPC:\SVN\catapult\Claude-Public\Program\Session5\TicTacToe Solutions\TicTacToe6.pyus4                   %