Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > df29c83ca401d91ec9c00bfcf7fea4ea > files > 192

shedskin-0.8-2mdv2010.2.i586.rpm

import random
import peg
import colour

""" copyright Sean McCarthy, license GPL v2 or later """

class Code:
    """Class representing a collection of pegs"""

    #__defaultCodeSize = 4
    #__pegList = []

    def __init__(self, __pegList=None):
    #    self.__pegList = __pegList
        self.__defaultCodeSize = 4
        self.__pegList = __pegList

    def setPegs(self, __pegList):
        self.__pegList = __pegList

    def setRandomCode(self, codeSize=-1):
        if codeSize == -1:
            codeSize = self.__defaultCodeSize
        random.seed()
        self.__pegList = []
        for i in range(codeSize):
            x = peg.Peg(random.randint(0,colour.Colours.numberOfColours-1))
            self.__pegList.append(x)

    def getPegs(self):
        return self.__pegList

    def equals(self,code):
        c1 = code.getPegs();
        for i in range(4):
            if (not c1[i].equals(self.__pegList[i])):
                return False
        return True

    def compare(self,code):
        resultPegs = []
        secretUsed = [] 
        guessUsed = []
        count = 0
        codeLength = len(self.__pegList)
        for i in range(codeLength):
            secretUsed.append(False)
            guessUsed.append(False)

        """
           Black pegs first: correct colour in correct position

        """
        for i in range(codeLength):
            if (self.__pegList[i].equals(code.getPegs()[i])):
                secretUsed[i] = True
                guessUsed[i] = True
                resultPegs.append(peg.Peg(colour.Colours.black))
                count += 1

        """
           White pegs: trickier

           White pegs are for pegs of the correct colour, but in the wrong
           place. Each peg should only be evaluated once, hence the "used"
           lists.

           Condition below is a shortcut- if there were 3 blacks pegs
           then the remaining peg can't be a correct colour (think about it)

        """
        if (count < codeLength-1):
            for i in range(codeLength):
                if (guessUsed[i]):
                    continue
                for j in range(codeLength):
                    if (i != j and not secretUsed[j] \
                    and not guessUsed[i] \
                    and self.__pegList[j].equals(code.getPegs()[i])):
                        resultPegs.append(peg.Peg(colour.Colours.white))
                        secretUsed[j] = True
                        guessUsed[i] = True

        return Code(resultPegs)