;ò ÏnZGc@sSdZdZdkZdkZdZdZeeZdZdZe edƒZ e edeƒZ e e fZ dd d d d d dfZ dddddddfZdddddfZdZdefd„ƒYZdefd„ƒYZd efd!„ƒYZd"efd#„ƒYZd$efd%„ƒYZd&„Zed'jo eƒndS((snA simple Awalé game. Copyright (C) 2007 MiKael NAVARRO The count-and-capture official board game of Africa. s$MiKael Navarro Ni iiiisAsBsCsDsEsFsGsasbscsdsesfsgsbfssminimaxsmaxisnegamaxs alphabetais AwaleErrorcBstZdZRS(s Base class for Awale exceptions.(s__name__s __module__s__doc__(((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys AwaleError=s s InvalidSowncBstZdZRS(sInvalid input.(s__name__s __module__s__doc__(((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys InvalidSownBs s NoMoreMovecBstZdZRS(sNo move available.(s__name__s __module__s__doc__(((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys NoMoreMoveGs s EndOfGamecBstZdZRS(s End of game?(s__name__s __module__s__doc__(((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys EndOfGameLs sAwalecBs¹tZdZegeddgeded„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Ze ed„Zd„Zd„Zd„ZRS(sAwale board class. Usage: >>> awale = Awale() >>> awale {'board': [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], 'score': [0, 0]} >>> awale.sow_and_capture(3) >>> awale.sow_and_capture(6) >>> awale.sow_and_capture(2) >>> awale.sow_and_capture(6) >>> print awale f e d c b a North ( 0) [ 5] [ 5] [ 5] [ 5] [ 7] [ 0] [ 4] [ 4] [ 0] [ 1] [ 6] [ 6] ( 0) South A B C D E F >>> awale.sow_and_capture(1) >>> awale.best_sown(1) 10 >>> awale.sow_and_capture(10) >>> print awale f e d c b a North ( 5) [ 6] [ 0] [ 5] [ 5] [ 7] [ 0] [ 5] [ 1] [ 0] [ 0] [ 7] [ 7] ( 0) South A B C D E F iicCs1||_||_d|_||_||_dS(sÌInitialize the board game and player scores. By default BOARD_SIZE cups with INITIAL_SEEDS inside each houses; South (human) and north (computer) players begin with a score of 0. iN(sboardsselfsscoresturnsalgos algo_typesdepths algo_depth(sselfsboardsscoresalgosdepth((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys__init__ps     cCs$dt|iƒt|iƒfSdS(s5Friendly representation of Awale data: board + score.s{'board': %s, 'score': %s}N(sstrsselfsboardsscore(sself((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys__repr__€scCsd}|d7}|digi}tttd ƒD]}||ƒq5~ƒ7}|d7}|d|i t 7}|digi}t|i t dƒD]}|d|ƒqš~ƒ7}|d7}|d 7}|digi}|i td D]}|d|ƒqñ~ƒ7}|d |i t 7}|d7}|d7}|digi}ttd D]}||ƒqZ~ƒ7}|Sd S( sDisplay Awale board.ss s is s North (%2d) s s[%2d]s s (%2d) SouthN(sssjoinsappends_[1]sreverseds COMPUTER_CUPSs BOARD_SIZEscsselfsscores NORTH_PLAYERsboardsis SOUTH_PLAYERs HUMAN_CUPS(sselfscsis_[1]ss((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys__str__†s B J  C  <cCs<t}|tjo t}n|tjo t}n|SdS(sDetermine who play given index.N(sNonesplayersidxs SOUTH_CUPSs SOUTH_PLAYERs NORTH_CUPSs NORTH_PLAYER(sselfsidxsplayer((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys _who_play£s    cCs!|i|ƒ}|i|djotSntgi}t d|D]}||i|ƒqD~ƒdjo«t}|i|}d}x{|os||dt |iƒ|jon@||dt |iƒt d|jo t}Pn|d8}|d7}qŠW| otSqntSdS(s5Check if sowing seeds from given index is authorized?iiN(sselfs _who_playsidxsplayersboardsFalsesmaxsappends_[1]s PLAYER_CUPSsisstatussnb_seedsslensTrue(sselfsidxsstatussis_[1]splayersnb_seeds((s@/mnt/gmirror/ports/games/pyawale/work/pyawale-0.3.6/src/awale.pys_valid±s*C "*  cCsÈ|i|ƒ o td‚n|i|}d|i|