[Tutor] Tic-Tac-Toe

Ben Ganzfried ben.ganzfried at gmail.com
Sat Feb 19 21:49:06 CET 2011


Hey,

I *think* that everything is working except my function gameWon.  I keep
getting the following error: " line 67, in gameWon
    if (cell % 3 == 0) and (self.__mycells[cell] ==  self.__mycells[cell +
1]) and (self.__mycells[cell + 1]== self.__mycells[cell + 2]):
TypeError: unsupported operand type(s) for %: 'instance' and 'int'
>>> "

My thinking was the following: I wanted to check the verticals, horizontals,
and diagonals to see if they were the same.  If so, then the game is won.
I'm not sure why I'm not actually comparing the value inside the appropriate
cells, but clearly the error means that what I'm trying to do is not what is
actually happening.  My full code is below and I would greatly appreciate
any help you can provide.

Thanks,

Ben

_____________-

#Ben Ganzfried
#2/18/11
#Tic-Tac-Toe

class Player:


    def __init__(self, name, type):
        self.__name = name
        self.__type = type

    def move(self):
        cell_index = input("%s's (%s) move: " & (self.__name, self.__type))
        cell_index = int(cell_index)
        while cell_index > 8 and cell_index < 0:
            print("Please retry...")
            cell_index = input("%s's (%s) move: " & (self.__name,
self.__type))
        return cell_index

    def getName(self):
        return self.__name

    def getType(self):
        return self.__type

class Board:

    def __init__(self):
        self.__mycells = []
        for i in range(0, 9):
            current_cell = Cell()
            self.__mycells.append(current_cell)

    def print1(self):
        counter = 0
        for cell in self.__mycells:
            cell.print1()
            counter +=1
            if counter % 3 == 0:
                print("\n----")

    def setCellToX(self, cell_number):
        cell = self.__mycells[cell_number]
        if not cell.isOccupied():
            cell.setToX()
            return True
        else:
            return False

    def setCelltoO(self, cell_number):
        cell = self.__mycells[cell_number]
        if not cell.isOccupied():
            cell.setToO()
            return True
        else:
            return False

    def isTied(self):
        for cell in self.__mycells:
            if not cell.isOccupied():
                return False
        return True

    def gameWon(self):
        for cell in self.__mycells:
            #horizontals
            if (cell % 3 == 0) and (self.__mycells[cell] ==
self.__mycells[cell + 1]) and (self.__mycells[cell + 1]==
self.__mycells[cell + 2]):
                return True
            #verticals
            elif (cell < 3) and (self._mycells[cell] == self._mycells[cell +
3]) and (self._mycells[cell] == self.__mycells[cell + 6]):
                return True
            #diagonals
            elif (cell == 0) and (self.__mycells[cell] ==
self.__mycells[cell + 4]) and (self.__mycells[cell] == self.__mycells[cell +
8]):
                return True
            elif (cell == 2) and (self.__mycells[cell] ==
self.__mycells[cell + 2]) and (self.__mycells[cell] == self.mycells[cell +
4]):
                return True
        return False


class Cell:

    def __init__(self):
        self.__value = " "

    def setToX(self):
        self.__value = "X"

    def setToO(self):
        self.__value = "O"

    def print1(self):
        print(self.__value,)
    #add a predicate (start in terms of question, not action)
    def isOccupied(self):
        return not self.__value == " "

def main():
    #initialize game
        #draw board
    #create two players
    #enter a loop-- prompt each player for a loop...stops when a player wins
or a tie
    board = Board()
    board.print1()
    pX = Player("Ben", "X")
    pO = Player("Sam", "O")
    while not board.gameWon() and not board.isTied():
        c1 = pX.move()
        success = board.setCellToX(c1)
        while not success:
            c1 = pX.move()
            success = board.setCellToX(c1)
        board.print1()
        c1 = pO.move()
        success = board.setCellToO(c1)
        while not success:
            c1 = pO.move()
            success = board.setCellToO(c1)
        board.print1()
    print("Game Over")



if __name__ == "__main__":
    main()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110219/73190230/attachment.html>


More information about the Tutor mailing list