class Solution_32b(object):
    def __init__(self):
        self.queue = LinkedQueue()

    def print_tree(self, treeroot):
        if treeroot is None:
            return

        self.queue.add(treeroot)

        nextlevel, tobeprinted = 0, 1

        print('Print the tree structure by level.')
        while not self.queue.isEmpty():
            pnode = self.queue.peek()
            print('%d' % pnode.data_, end=' | ')
            if pnode.left_ is not None:
                self.queue.add(pnode.left_)
                nextlevel += 1
            if pnode.right_ is not None:
                self.queue.add(pnode.right_)
                nextlevel += 1
            self.queue.pop()
            tobeprinted -= 1
            if tobeprinted == 0:
                print('\n')
                tobeprinted = nextlevel
                nextlevel = 0
Example #2
0
class Memory(object):
    def __init__(self, numOfPlayers=2):
        self._numOfPlayers = numOfPlayers
        self._totalScore = 0
        self._deck = Deck()
        self._queue = LinkedQueue()
        for player in range(self._numOfPlayers):
            self._queue.add(Player('Player ' + str(player + 1)))
        self._currentPlayer = self._queue.pop()

    def getPlayerName(self):
        return self._currentPlayer.getName()

    def setPlayerName(self, name):
        """sets current player name"""
        self._currentPlayer.setName(name)

    def addPlayerScore(self, points):
        """adds points to current player"""
        if self._totalScore + points > 30:
            while self._totalScore < 30:
                self._currentPlayer.addToScore(1)
                self._totalScore += 1
        elif self._currentPlayer.getScore() + points >= 0:
            self._currentPlayer.addToScore(points)
            self._totalScore += points

    def nextPlayer(self):
        """moves to next player and puts previous player to back of queue"""
        self._queue.add(self._currentPlayer)
        self._currentPlayer = self._queue.pop()

    def checkGameOver(self):
        """checks if point add to 30"""
        if self._totalScore >= 30:
            return True
        return False

    def playerHigh(self):
        """finds player with high score"""
        for player in range(self._numOfPlayers):
            temp = self._queue.pop()
            if temp.getScore() > self._currentPlayer.getScore():
                self._queue.add(self._currentPlayer)
                self._currentPlayer = temp
            else:
                self._queue.add(temp)
        return self._currentPlayer.getName()
Example #3
0
class TicketCounterSimulation:
    # Create a simulation object.
    def __init__(self, numAgents, numMinutes, betweenTime, serviceTime):
        # Parameters supplied by the user.
        self._arriveProb = 1.0 / betweenTime
        self._serviceTime = serviceTime
        self._numMinutes = numMinutes

        # Simulation components.
        self._passengerQ = Queue()
        self._theAgents = Array(numAgents)
        for i in range(numAgents):
            self._theAgents[i] = TicketAgent(i + 1)

        # Computed during the simulation.
        self._totalWaitTime = 0
        self._numPassengers = 0

    # Run the simulation using the parameters supplied earlier.
    def run(self):
        for curTime in range(self._numMinutes + 1):
            self._handleArrive(curTime)
            self._handleBeginService(curTime)
            self._handleEndService(curTime)
        self.printResults()

    # Print the simulation results.
    def printResults(self):
        numServed = self._numPassengers - len(self._passengerQ)
        avgWait = float(self._totalWaitTime) / numServed
        print("")
        print("Number of passengers served = ", numServed)
        print("Number of passengers remaining in line = %d" %
              len(self._passengerQ))
        print("The average wait time was %4.2f minutes." % avgWait)

    # Handles simulation rule #1.
    def _handleArrive(self, curTime):
        if random.randint(0.0, 1.0) <= self._arriveProb:
            self._numPassengers += 1
            passenger = Passenger(self._numPassengers, curTime)
            self._passengerQ.add(passenger)

    # Handles simulation rule #2.
    def _handleBeginService(self, curTime):
        for agent in self._theAgents:
            if agent.isFree():
                if not self._passengerQ.isEmpty():
                    agent.startService(self._passengerQ.pop(),
                                       curTime + self._serviceTime)

    # Handles simulation rule #3.
    def _handleEndService(self, curTime):
        for agent in self._theAgents:
            if agent.isFinished(curTime):
                passenger = agent.stopService()
        self._totalWaitTime += len(self._passengerQ)
Example #4
0
class Cashier(object):
    """Represents a cashier."""

    def __init__(self):
        """Maintains a queue of customers,
        number of customers served, total customer wait time,
        and a current customer being processed."""
        self._totalCustomerWaitTime = 0
        self._customersServed = 0
        self._currentCustomer = None
        self._queue = LinkedQueue()

    def addCustomer(self, c):
        """Adds an arriving customer to my line."""
        self._queue.add(c)
   
    def serveCustomers(self, currentTime):
        """Serves my cuatomers during a given unit of time."""
        if self._currentCustomer is None:
            # No customers yet
            if self._queue.isEmpty():
                return
            else:
                # Pop first waiting customer and tally results
                self._currentCustomer = self._queue.pop()
                self._totalCustomerWaitTime += \
                                            currentTime - \
                                            self._currentCustomer.arrivalTime()
                self._customersServed += 1

        # Give a unit of service
        self._currentCustomer.serve()

        # If current customer is finished, send it away   
        if self._currentCustomer.amountOfServiceNeeded() == 0:
            self._currentCustomer = None
   
    def __str__(self):
        """Returns my results: my total customers served,
        my average wait time per customer, and customers left on my queue."""
        result = "TOTALS FOR THE CASHIER\n" + \
                 "Number of customers served:        " + \
                 str(self._customersServed) + "\n"
        if self._customersServed != 0:
            aveWaitTime = self._totalCustomerWaitTime /\
                          self._customersServed
            result += "Number of customers left in queue: " + \
                      str(len(self._queue)) + "\n" + \
                      "Average time customers spend\n" + \
                      "waiting to be served:              " + \
                      "%5.2f" % aveWaitTime
        return result
Example #5
0
class Cashier(object):
    """Represents a cashier."""
    def __init__(self, number):
        """Maintains a cashier number, a queue of customers,
        number of customers served, total customer wait time,
        and a current customer being processed."""
        self._number = number
        self._totalCustomerWaitTime = 0
        self._customersServed = 0
        self._currentCustomer = None
        self._queue = LinkedQueue()

    def getLineLength(self):
        """Returns the number of customers in the line."""
        return len(self._queue)

    def addCustomer(self, c):
        """Adds an arriving customer to my line."""
        self._queue.add(c)

    def serveCustomers(self, currentTime):
        """Serves my cuatomers during a given unit of time."""
        if self._currentCustomer is None:
            # No customers yet
            if self._queue.isEmpty():
                return
            else:
                # Pop first waiting customer and tally results
                self._currentCustomer = self._queue.pop()
                self._totalCustomerWaitTime += \
                                            currentTime - \
                                            self._currentCustomer.arrivalTime()
                self._customersServed += 1

        # Give a unit of service
        self._currentCustomer.serve()

        # If current customer is finished, send it away
        if self._currentCustomer.amountOfServiceNeeded() == 0:
            self._currentCustomer = None

    def __str__(self):
        """Returns my results: my number, my total customers served,
        my average wait time per customer, and customers left on my queue."""
        if self._customersServed != 0:
            aveWaitTime = float(self._totalCustomerWaitTime) /\
                          self._customersServed
        else:
            aveWaitTime = 0.0
        result = "%4d %8d %13.2f %8d" % (self._number, self._customersServed,
                                         aveWaitTime, len(self._queue))
        return result
def bfs(g, start):
    start.setDistance(0)
    start.setPred(None)
    vertQueue = LinkedQueue()
    vertQueue.add(start)
    while not vertQueue.isEmpty():
        currentVert = vertQueue.pop()
        for nbr in currentVert.getConnections():
            if (nbr.getColor()) == 'white':
                nbr.setColor('gray')
                nbr.setDistance(currentVert.getDistance() + 1)
                nbr.setPred(currentVert)
                vertQueue.add(nbr)
        currentVert.setColor('black')
Example #7
0
 def levelorder(self):
     """Supports a levelorder traversal on a view of self."""
     lyst = list()
     queue = LinkedQueue()
     if not self.isEmpty():
         queue.add(self.root)
     while not queue.isEmpty():
         node = queue.pop()
         lyst.append(node.data)
         if node.left != None:
             queue.add(node.left)
         if node.right != None:
             queue.add(node.right)
     return iter(lyst)
Example #8
0
    def test_pop_from_queue(self):
        name = "Jose"
        phone = "123-456-7890"

        node = Node(name, phone)
        queue = LinkedQueue()

        queue.push(node)

        self.assertEqual(len(queue), 1)

        popped = queue.pop()

        self.assertEqual(popped, node)
        self.assertEqual(len(queue), 0)
Example #9
0
class Cashier(object):
    def __init__(self):
        self._total_customer_wait_time = 0
        self._customers_served = 0
        self._current_customer = None
        self._queue = LinkedQueue()

    def add_customer(self, c):
        self._queue.add(c)

    def serve_customers(self, current_time):
        # 1. 当前锾客äøå­˜åœØ,
        if self._current_customer == None:
            # ē­‰å¾…队列äøŗē©ŗ, ē›“ꎄčæ”回
            if self._queue.isEmpty():
                return
            else:  # äøäøŗē©ŗ, å°†é˜Ÿå¤“é”¾å®¢ęå‡äøŗ当前锾客
                self._current_customer = self._queue.pop()
                # ē­‰å¾…ꀻꗶ闓加äøŠå½“前锾客ē­‰å¾…ēš„ꗶ闓
                self._total_customer_wait_time += \
                    current_time - \
                    self._current_customer.arrival_time()
                self._customers_served += 1

        # 2. ē»™å½“前锾客äø€äøŖå•ä½ęœåŠ”
        self._current_customer.serve()

        # å¦‚ęžœå½“å‰é”¾å®¢éœ€č¦ēš„å•ä½ęœåŠ”å·²ē»ę»”č¶³, åˆ™å°†å½“å‰é”¾å®¢čµ‹å€¼äøŗ None
        if self._current_customer.amount_of_service_needed() == 0:
            self._current_customer = None

    def __str__(self):
        """
        Returns my results: my total customers served,
        my average wait time per customer, and customers left on my queue.
        """
        result = "TOTALS FOR THE CASHIER\n" + \
                 "Number of customers served:        " + \
                 str(self._customers_served) + "\n"
        if self._customers_served != 0:
            ave_wait_time = self._total_customer_wait_time /\
                          self._customers_served
            result += "Number of customers left in queue: " + \
                      str(len(self._queue)) + "\n" + \
                      "Average time customers spend\n" + \
                      "waiting to be served:              " + \
                      "%5.2f" % ave_wait_time
        return result
Example #10
0
def breadthFirst(g, startLabel):
    """Returns a list of the vertex labels in the
    order in which the vertices were visited."""
    result = list()
    g.clearVertexMarks()
    queue = LinkedQueue()
    queue.add(g.getVertex(startLabel))
    while not queue.isEmpty():
        vertex = queue.pop()
        if not vertex.isMarked():
            vertex.setMark()
            result.append(vertex.getLabel())
            for neighbor in g.neighboringVertices(vertex.getLabel()):
                if not neighbor.isMarked():
                    queue.add(neighbor)
    return result
Example #11
0
    def levelorder(self):
        """Supports a levelorder traversal on a view of self."""
        lyst = list()

        # need a first in first out order, so use LinkedQueue
        # add self._root to get while loop started
        nodeStack = LinkedQueue([self._root])

        while nodeStack:
            currentNode = nodeStack.pop()
            lyst.append(currentNode.data)
            if currentNode.left:
                nodeStack.add(currentNode.left)
            if currentNode.right:
                nodeStack.add(currentNode.right)

        return iter(lyst)
Example #12
0
class Cashier(object):
    def __init__(self):
        """

        """
        self._totalCustomerWaitTime = 0
        self._customersServed = 0
        self._currentCustomer = None
        self._queue = LinkedQueue()

    def addCustomer(self, c):
        self._queue.add(c)

    def serveCustomers(self, currentTime):
        """

        :param currentTime:
        :type currentTime:
        :return:
        :rtype:
        """
        if self._currentCustomer is None:
            # No customers yet
            if self._queue.isEmpty():
                return
            else:
                # Pop first waiting customer and tally results
                self._currentCustomer = self._queue.pop()
                self._totalCustomerWaitTime += currentTime - self._currentCustomer.arrivalTime(
                )
                self._customersServed += 1
        # Give a unit of service
        self._currentCustomer.serve()
        # If current customer is finished, send it away
        if self._currentCustomer.amountOfServiceNeeded() == 0:
            self._currentCustomer = None

    def __str__(self):
        result = "TOTALS FOR THE CASHIER\n" + "Number of customers served: " + \
                str(self._customersServed) + "\n"
        if self._customersServed != 0:
            aveWaitTime = self._totalCustomerWaitTime / self._customersServed
            result += "Number of customers left in queue: " \
            + str(len(self._queue)) + "\n" + "Average time customers spend\n" + \
            "waiting to be served: " + "%5.2f" % aveWaitTime
        return result
Example #13
0
class Solution_32(object):
    def __init__(self):
        self.queue = LinkedQueue()

    def printfromtoptobottom(self, treeroot):
        if treeroot is None:
            return None

        self.queue.add(treeroot)
        ret = []
        while not self.queue.isEmpty():
            node = self.queue.pop()
            ret.append(node.data_)
            if node.left_:
                self.queue.add(node.left_)
            if node.right_:
                self.queue.add(node.right_)
        return ret
Example #14
0
class Stack(object):
    def __init__(self):
        self.stack1 = LinkedQueue()
        self.stack2 = LinkedQueue()

    def isEmpty(self):
        if self.__len__() == 0:
            return True
        else:
            return False

    def __len__(self):
        if self.stack1.size_ == 0:
            return self.stack2.size_
        else:
            return self.stack1.size_

    def peek(self):
        if self.isEmpty():
            raise KeyError('The stack is empty.')
        elif not self.stack1.isEmpty():
            item = self.stack1.peek()
            return item
        else:
            item = self.stack2.peek()
            return item

    def push(self, item):
        if self.isEmpty() or (not self.stack1.isEmpty()
                              and self.stack2.isEmpty()):
            self.stack1.add(item)
        else:
            self.stack2.add(item)

    def pop(self):
        if self.isEmpty():
            raise KeyError('The stack is empty.')
        if not self.stack1.isEmpty():
            while self.stack1.front_.next is not None:
                self.stack2.add(self.stack1.pop())
            item = self.stack1.pop()
            return item
        else:
            while self.stack2.front_.next is not None:
                self.stack1.add(self.stack2.pop())
            item = self.stack2.pop()
            return item

    # def __iter__(self):
    #     def travser_stack_recursive(sta, templist):
    #         if sta.front_.next is not None:
    #             templist = travser_stack_recursive(sta.front_.next, templist)
    #         templist.append(sta.front_.data)
    #         return templist
    #
    #     templist = list()
    #     if self.isEmpty():
    #         raise KeyError('The stack is empty.')
    #
    #     if not self.stack1.isEmpty():
    #         travser_stack_recursive(self.stack1, templist)
    #         return iter(templist)
    #     else:
    #         travser_stack_recursive(self.stack2, templist)
    #         return iter(templist)

    def __iter__(self):
        if self.isEmpty():
            raise KeyError('The stack is empty.')
        templist = list()
        if not self.stack1.isEmpty():
            tempstack = copy.copy(self.stack1)
            while tempstack.front_.next is not None:
                templist.append(tempstack.pop())
            templist.append(tempstack.pop())
            templist.reverse()  # ******
            return iter(templist)
        else:
            tempstack = copy.copy(self.stack2)
            while tempstack.front_.next is not None:
                templist.append(tempstack.pop())
            templist.append(tempstack.pop()).reverse()
            templist.reverse()  # ******
            return iter(templist)
Example #15
0
class MemoryGUI(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("Memory")
        self.grid()

        self._gridOfPictures = ArrayGrid(5, 5)
        self._gridOfCards = ArrayGrid(5, 5)
        self._gridOfButtons = ArrayGrid(5, 5)
        """pane that will contain the buttons thourghout the program"""
        self._mainPane = Frame(self)
        self._mainPane.grid(row=0, column=0)
        """info pane will hold scores and a button to start new game"""
        self._infoPane = Frame(self)
        self._infoPane.grid(row=0, column=1)
        """create buttons for opening screen"""
        self._buttonImage2 = PhotoImage(file='CARDS/2player.gif')
        self._2PlayerButton = Button(self._mainPane,
                                     image=self._buttonImage2,
                                     command=self._button2)
        self._2PlayerButton.grid(row=0, column=0)
        self._buttonImage3 = PhotoImage(file='CARDS/3player.gif')
        self._3PlayerButton = Button(self._mainPane,
                                     image=self._buttonImage3,
                                     command=self._button3)
        self._3PlayerButton.grid(row=0, column=1)
        self._buttonImage4 = PhotoImage(file='CARDS/4player.gif')
        self._4PlayerButton = Button(self._mainPane,
                                     image=self._buttonImage4,
                                     command=self._button4)
        self._4PlayerButton.grid(row=1, column=0)
        self._buttonImage5 = PhotoImage(file='CARDS/5player.gif')
        self._5PlayerButton = Button(self._mainPane,
                                     image=self._buttonImage5,
                                     command=self._button5)
        self._5PlayerButton.grid(row=1, column=1)

    def _button2(self):
        self._mainButtons(2)

    def _button3(self):
        self._mainButtons(3)

    def _button4(self):
        self._mainButtons(4)

    def _button5(self):
        self._mainButtons(5)

    def _mainButtons(self, numOfPlayers):
        """create all the buttons"""
        self._numberOfPlayers = numOfPlayers
        self._2PlayerButton.grid_forget()
        self._3PlayerButton.grid_forget()
        self._4PlayerButton.grid_forget()
        self._5PlayerButton.grid_forget()
        self._memory = Memory(numOfPlayers)
        self._listOfPressed = []
        for x in range(5):
            for y in range(5):
                self._gridOfCards[x][y] = self._memory._deck.deal()
                self._gridOfPictures[x][y] = PhotoImage(
                    file=self._gridOfCards[x][y].getCardFileName())

        x = 0
        y = 0
        self._cardButton1 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress1)
        self._cardButton1.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton1
        y += 1
        self._cardButton2 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress2)
        self._cardButton2.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton2
        y += 1
        self._cardButton3 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress3)
        self._cardButton3.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton3
        y += 1
        self._cardButton4 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress4)
        self._cardButton4.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton4
        y += 1
        self._cardButton5 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress5)
        self._cardButton5.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton5

        y = 0
        x += 1
        self._cardButton6 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress6)
        self._cardButton6.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton6
        y += 1
        self._cardButton7 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress7)
        self._cardButton7.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton7
        y += 1
        self._cardButton8 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress8)
        self._cardButton8.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton8
        y += 1
        self._cardButton9 = Button(self._mainPane,
                                   image=self._gridOfPictures[x][y],
                                   command=self._cardButtonPress9)
        self._cardButton9.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton9
        y += 1
        self._cardButton10 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress10)
        self._cardButton10.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton10

        y = 0
        x += 1
        self._cardButton11 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress11)
        self._cardButton11.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton11
        y += 1
        self._cardButton12 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress12)
        self._cardButton12.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton12
        y += 1
        self._cardButton13 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress13)
        self._cardButton13.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton13
        y += 1
        self._cardButton14 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress14)
        self._cardButton14.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton14
        y += 1
        self._cardButton15 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress15)
        self._cardButton15.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton15

        y = 0
        x += 1
        self._cardButton16 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress16)
        self._cardButton16.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton16
        y += 1
        self._cardButton17 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress17)
        self._cardButton17.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton17
        y += 1
        self._cardButton18 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress18)
        self._cardButton18.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton18
        y += 1
        self._cardButton19 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress19)
        self._cardButton19.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton19
        y += 1
        self._cardButton20 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress20)
        self._cardButton20.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton20

        y = 0
        x += 1
        self._cardButton21 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress21)
        self._cardButton21.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton21
        y += 1
        self._cardButton22 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress22)
        self._cardButton22.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton22
        y += 1
        self._cardButton23 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress23)
        self._cardButton23.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton23
        y += 1
        self._cardButton24 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress24)
        self._cardButton24.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton24
        y += 1
        self._cardButton25 = Button(self._mainPane,
                                    image=self._gridOfPictures[x][y],
                                    command=self._cardButtonPress25)
        self._cardButton25.grid(row=x, column=y)
        self._gridOfButtons[x][y] = self._cardButton25
        """adding labels and buttons to info pane"""
        self._playerLabelQueue = LinkedQueue()
        for label in range(numOfPlayers):
            self._playerScore = Label(self._infoPane,
                                      text='Player ' + str(label + 1) + ': 0')
            self._playerScore.grid(row=label + 2, column=0)
            self._playerLabelQueue.add(self._playerScore)
        self._currentLabel = self._playerLabelQueue.pop()

        self._rulesButton = Button(self._infoPane,
                                   text='Rules',
                                   command=self._rules)
        self._rulesButton.grid(row=0, column=0)

        self._resetButton = Button(self._infoPane,
                                   text='New Game',
                                   command=self._reset)
        self._resetButton.grid(row=1, column=0)

        self._popupMsg('Player 1 turn')

    def _reset(self):
        self._mainButtons(self._numberOfPlayers)

    def _rules(self):
        messagebox.showinfo(
            "Rules",
            '1. The first player turns over 2 cards, looking for matching cards. If the two Treasures match, turn over another card to try to find an additional match, Keep going until you do not find a matching card. \n2. For each matching card uncovered, he or she is rewarded with 1 point! \n3. If a player turns up a headstone that he or she wasnt looking for, he or she looses his or her turn and must give 1 point back unless player has none. \n4. When a player finds a non-matching card, or a headstone, the cards are turned face down except for the last card that was found, which is kept face up. \n5. Play continues with the next player trying to find a match for the card that is face up. \n6. Continue until the total of all players points add up to 30.'
        )

    def _cardButtonPress1(self):
        x = 0
        y = 0
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress2(self):
        x = 0
        y = 1
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress3(self):
        x = 0
        y = 2
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress4(self):
        x = 0
        y = 3
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress5(self):
        x = 0
        y = 4
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress6(self):
        x = 1
        y = 0
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress7(self):
        x = 1
        y = 1
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress8(self):
        x = 1
        y = 2
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress9(self):
        x = 1
        y = 3
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress10(self):
        x = 1
        y = 4
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress11(self):
        x = 2
        y = 0
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress12(self):
        x = 2
        y = 1
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress13(self):
        x = 2
        y = 2
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress14(self):
        x = 2
        y = 3
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress15(self):
        x = 2
        y = 4
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress16(self):
        x = 3
        y = 0
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress17(self):
        x = 3
        y = 1
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress18(self):
        x = 3
        y = 2
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress19(self):
        x = 3
        y = 3
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress20(self):
        x = 3
        y = 4
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress21(self):
        x = 4
        y = 0
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress22(self):
        x = 4
        y = 1
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress23(self):
        x = 4
        y = 2
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress24(self):
        x = 4
        y = 3
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonPress25(self):
        x = 4
        y = 4
        if tuple([x, y]) not in self._listOfPressed:
            self._listOfPressed.append(tuple([x, y]))
            self._gridOfCards[x][y].turn()
            self._gridOfPictures[x][y] = PhotoImage(
                file=self._gridOfCards[x][y].getCardFileName())
            self._gridOfButtons[x][y].config(image=self._gridOfPictures[x][y])
            self._cardButtonMain()

    def _cardButtonMain(self):
        """checks if card is the same as last"""
        if len(self._listOfPressed) > 1:
            x, y = self._listOfPressed[-1]
            x1, y1 = self._listOfPressed[-2]
            if str(self._gridOfCards[x][y]) != str(self._gridOfCards[x1][y1]):
                if str(self._gridOfCards[x][y]) == 'Headstone':
                    """-1 point if you turned over a headstone"""
                    self._memory.addPlayerScore(-1)
                elif len(self._listOfPressed) > 2:
                    self._memory.addPlayerScore(len(self._listOfPressed) - 1)
                    if self._memory.checkGameOver():
                        self._resetButtons()
                        self._popupMsg(
                            str(self._memory.playerHigh() + ' Won', True))
                if not self._memory.checkGameOver():
                    self._resetButtons(tuple([x, y]))
                    self._currentLabel[
                        'text'] = self._memory._currentPlayer.getName(
                        ) + ': ' + str(self._memory._currentPlayer.getScore())
                    self._playerLabelQueue.add(self._currentLabel)
                    self._currentLabel = self._playerLabelQueue.pop()
                    self._memory.nextPlayer()
                    self._popupMsg(
                        str(self._memory._currentPlayer.getName() + ' Turn'))
        if self._memory.checkGameOver():
            self._mainButtons(self._numberOfPlayers)

    def _resetButtons(self, xy=tuple([5, 5])):
        """resets buttons but leaves last one pressed untuched"""
        for xandy in self._listOfPressed[::-1]:
            x1, y1 = xandy
            if xy != xandy:
                self._gridOfCards[x1][y1].turn()
                self._gridOfButtons[x1][y1].state = 'Normal'
                self._gridOfPictures[x1][y1] = PhotoImage(
                    file=self._gridOfCards[x1][y1].getCardFileName())
                self._gridOfButtons[x1][y1].config(
                    image=self._gridOfPictures[x1][y1])
                self._listOfPressed.remove(xandy)

    def _popupMsg(self, msg, done=False):
        messagebox.showinfo("Information", msg)