示例#1
0
class main:
    rows = 8
    columns = 7
    planeloc = [[0 for x in range(columns)] for y in range(rows)]
    planeloc[0][0] = 'X'
    planeloc[0][2] = 'Y'
    planeloc[3][6] = 'Z'
    bufferA = [[0 for x in range(columns)] for y in range(rows)]
    bufferA[0][0] = 'X'
    bufferA[0][2] = 'Y'
    bufferA[3][6] = 'Z'

    bufferB = [[0 for x in range(columns)] for y in range(rows)]
    bufferC = [[0 for x in range(3)] for y in range(3)]
    bufferD = [[0 for x in range(3)] for y in range(3)]
    bufferC[0][0] = 'X'
    bufferC[0][1] = 'Y'
    bufferC[0][2] = 'Z'
    bufferD[0][0] = 'X'
    bufferD[0][1] = 'Y'
    bufferD[0][2] = 'Z'
    # print (bufferA)

    plane_X = planeX.planeX(0, 0)
    plane_Y = planeY.planeY(0, 2)
    plane_Z = planeZ.planeZ(3, 6)
    p1 = P1.P1(0, plane_X, plane_Y, plane_Z, bufferA, bufferB)
    p2 = P2.P2(0, bufferC, bufferD)
    p3 = P3.P3(bufferC, bufferD)

    for i in range(0, 20):
        print("")
        #  print("")
        #  print("")
        #  print("TIME ", i+1)
        #   print("")

        time.sleep(1)
        #Process 1 work
        p1.proc1(i, plane_X, plane_Y, plane_Z, bufferA, bufferB)

        #Process 2 Work
        if i % 2 is 0:
            p2.proc2AC(i, bufferA, bufferC)
        else:
            p2.proc2BD(i, bufferB, bufferD)

        #Process 3 Work
        if i % 2 is 0:
            p3.checkC(i, bufferC)
        else:
            p3.checkD(i, bufferD)
示例#2
0
class main:
    rows = 8
    columns = 7
    bufferA = [[0 for x in range(7)] for y in range(8)]

    # Coordinates for X Y Z randomly generated
    x_xCoor = random.randint(0, rows - 1)
    x_yCoor = random.randint(0, columns - 1)
    y_xCoor = random.randint(0, rows - 1)
    y_yCoor = random.randint(0, columns - 1)
    z_xCoor = random.randint(0, rows - 1)
    z_yCoor = random.randint(0, columns - 1)
    # generate coordinates again if same coordinates
    if ((x_xCoor == y_xCoor or x_xCoor == z_xCoor or y_xCoor == z_xCoor) and
        (x_yCoor == y_yCoor or x_yCoor == z_yCoor or y_xCoor == z_xCoor)):
        x_xCoor = random.randint(0, rows - 1)
        x_yCoor = random.randint(0, columns - 1)
        y_xCoor = random.randint(0, rows - 1)
        y_yCoor = random.randint(0, columns - 1)
        z_xCoor = random.randint(0, rows - 1)
        z_yCoor = random.randint(0, columns - 1)

    bufferA[x_xCoor][x_yCoor] = 'X'
    bufferA[y_xCoor][y_yCoor] = 'Y'
    bufferA[z_xCoor][z_yCoor] = 'Z'

    bufferB = [[0 for x in range(7)] for y in range(8)]
    bufferC = [[0 for x in range(3)] for y in range(3)]
    bufferD = [[0 for x in range(3)] for y in range(3)]
    bufferC[0][0] = 'X'
    bufferC[0][1] = 'Y'
    bufferC[0][2] = 'Z'
    bufferD[0][0] = 'X'
    bufferD[0][1] = 'Y'
    bufferD[0][2] = 'Z'
    time_interval = 1
    iterations = 20
    semA = threading.Semaphore()
    semB = threading.Semaphore()
    semC = threading.Semaphore()
    semD = threading.Semaphore()

    plane_X = planeX.planeX(x_xCoor, x_yCoor)
    plane_Y = planeY.planeY(y_xCoor, y_yCoor)
    plane_Z = planeZ.planeZ(z_xCoor, z_yCoor)

    p1 = P1.P1(0, plane_X, plane_Y, plane_Z, bufferA, bufferB, semA, semB)
    p2 = P2.P2(0, bufferC, bufferD, semA, semB, semC, semD)
    p3 = P3.P3(bufferC, bufferD, plane_X, plane_Y, plane_Z, z_xCoor, y_yCoor)

    #thread class declarations
    i = 0
    t1 = threading.Thread(target=p1.proc1,
                          args=(i, plane_X, plane_Y, plane_Z, bufferA, bufferB,
                                semA, semB, semC, semD, time_interval,
                                iterations))
    t2 = threading.Thread(target=p2.proc,
                          args=(i, bufferA, bufferB, bufferC, bufferD, semA,
                                semB, semC, semD, time_interval, iterations))
    t3 = threading.Thread(target=p3.check,
                          args=(i, bufferC, bufferD, semC, semD, plane_X,
                                plane_Y, plane_Z, semA, semB, time_interval,
                                iterations))

    t1.start()

    t2.start()

    t3.start()
示例#3
0
    def run(self):
        """
        @summary: The main function of this app, the driver for the whole game
        
        """
        #setup our stat counters
        stat1 = {}
        stat2 = {}
        stats = [stat1, stat2]

        #load bot 1
        ticks = time.time()
        p1 = P1()
        elapsed = time.time() - ticks
        stats[0]['Bot Loading Time'] = elapsed
        stats[0]['Number of Wins'] = 0
        stats[0]['Game Fails'] = 0
        stats[0]['Number of Draws'] = 0
        stats[0]['Player'] = p1
        stats[0]['Average Move Time'] = None
        stats[0]['Best Move Time'] = None
        stats[0]['Worst Move Time'] = None

        #load bot 2
        ticks = time.time()
        p2 = P2()
        elapsed = time.time() - ticks
        stats[1]['Bot Loading Time'] = elapsed
        stats[1]['Number of Wins'] = 0
        stats[1]['Game Fails'] = 0
        stats[1]['Number of Draws'] = 0
        stats[1]['Player'] = p2
        stats[1]['Average Move Time'] = None
        stats[1]['Best Move Time'] = None
        stats[1]['Worst Move Time'] = None

        #main runs start here
        thisRound = 1
        timeToRunInWarnings = 0

        totalGameTime = time.time()
        for i in range(self.numberOfGames):
            #check that the whole process isn't taking too long
            if time.time() - totalGameTime > self.startWarnings:
                if timeToRunInWarnings == 0:
                    timeToRunInWarnings = i
                if i % timeToRunInWarnings == 0:
                    secs = int((self.numberOfGames - i) / float(
                        (timeToRunInWarnings / float(self.startWarnings))))
                    hours, minutes, seconds = self.convertTime(secs)
                    print "Taking a while.... %i games have been calculated so far" % (
                        i)
                    if secs > self.maxGameTime:
                        ch, cm, cs = self.convertTime(self.maxGameTime -
                                                      (time.time() -
                                                       totalGameTime))
                        print "At this rate it would take a further %ih:%im:%is to finish. We will be cut off in %ih:%im:%is\n" % (
                            hours, minutes, seconds, ch, cm, cs)
                    else:
                        print "At this rate it will take a further %ih:%im:%is to finish\n" % (
                            hours, minutes, seconds)

            if time.time() - totalGameTime > self.maxGameTime:
                print "Too long, game %i is the last to be calculated\n" % (i)
                break

            #setup the board and player markers
            p1Map = thisRound
            board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

            #switch the round for the next game
            thisRound = self.switchPlayer(thisRound)

            #setup this games variables
            running = True
            winner = 0
            failed = False

            #randomly place the first piece
            board[randint(0, 2)][randint(0, 2)] = p1Map

            #switch player
            p1Map = self.switchPlayer(p1Map)

            while (running):
                #if there are no more moves, crash out
                if self.boardFull(board):
                    running = False
                else:
                    #time the players move
                    ticks = time.time()
                    move = stats[p1Map - 1]['Player'].move(board)
                    elapsed = time.time() - ticks

                    #save the players timings
                    if not stats[p1Map - 1]['Average Move Time']:
                        stats[p1Map - 1]['Average Move Time'] = elapsed
                    else:
                        stats[p1Map - 1]['Average Move Time'] = (
                            stats[p1Map - 1]['Average Move Time'] +
                            elapsed) / float(2)

                    #Best move Time
                    if not stats[p1Map - 1]['Best Move Time']:
                        stats[p1Map - 1]['Best Move Time'] = elapsed
                    elif stats[p1Map - 1]['Best Move Time'] > elapsed:
                        stats[p1Map - 1]['Best Move Time'] = elapsed

                    #Worst move Time
                    if not stats[p1Map - 1]['Worst Move Time']:
                        stats[p1Map - 1]['Worst Move Time'] = elapsed
                    elif stats[p1Map - 1]['Worst Move Time'] < elapsed:
                        stats[p1Map - 1]['Worst Move Time'] = elapsed

                    #see if the player took too long
                    if elapsed > self.gameFailThreshold:
                        stats[p1Map - 1]['Game Fails'] += 1
                        stats[self.switchPlayer(p1Map) -
                              1]['Number of Wins'] += 1
                        running = False
                        failed = True

                    #check the move and if its valid, enter it into the board, otherwise chalk up a fail to the player
                    if self.validateMove(move, board):
                        board[move[1]][move[0]] = p1Map
                    else:
                        #game over player forfeits
                        stats[p1Map - 1]['Game Fails'] += 1
                        running = False

                    #check for winner
                    winner = self.findWinner(board)
                    if not winner == 0:
                        #someone won!
                        running = False

                    #switch player for next move
                    p1Map = self.switchPlayer(p1Map)

            #game over, add up stats
            if not winner == 0:
                stats[winner - 1]['Number of Wins'] += 1
            elif failed:
                failed = False
            else:
                for stat in stats:
                    stat['Number of Draws'] += 1

        #print the game results
        self.printStatsToConsole(stats)
示例#4
0
    def run(self):
        menu = 0
        running = True
        screen = self.screen
        hvbOpponent = None
        opponents = {}
        p1 = P1()
        p2 = P2()
        opponents[p1.name] = p1
        opponents[p2.name] = p2
        scores = [0, 0]
        # QUIT           none
        # ACTIVEEVENT      gain, state
        # KEYDOWN           unicode, key, mod
        # KEYUP           key, mod
        # MOUSEMOTION      pos, rel, buttons
        # MOUSEBUTTONUP    pos, button
        # MOUSEBUTTONDOWN  pos, button
        # JOYAXISMOTION    joy, axis, value
        # JOYBALLMOTION    joy, ball, rel
        # JOYHATMOTION     joy, hat, value
        # JOYBUTTONUP      joy, button
        # JOYBUTTONDOWN    joy, button
        # VIDEORESIZE      size, w, h
        # VIDEOEXPOSE      none
        # USEREVENT        code

        while running:
            menuActive = True
            if menu == 0:
                #draw the main menu
                screen.fill((0, 0, 0))
                rects = {}
                rects['heading'] = pygame.Rect(120, 120, 560, 140)
                rects['hvh'] = pygame.Rect(120, 280, 560, 120)
                rects['hvb'] = pygame.Rect(120, 420, 560, 120)
                rects['bvb'] = pygame.Rect(120, 560, 560, 120)
                rects['quit'] = pygame.Rect(500, 720, 280, 60)

                screen.fill((0, 0, 255), (100, 100, 600, 600))
                screen.fill((127, 127, 127), rects['heading'])
                screen.fill((127, 127, 127), rects['hvh'])
                screen.fill((127, 127, 127), rects['hvb'])
                screen.fill((127, 127, 127), rects['bvb'])
                screen.fill((0, 0, 255),
                            (rects['quit'][0] - 3, rects['quit'][1] - 3,
                             rects['quit'][2] + 6, rects['quit'][3] + 6))
                screen.fill((127, 127, 127), rects['quit'])

                self.write(rects['quit'], 'quit', (200, 200, 200), 75)
                self.write(rects['heading'], "Game Mode", (255, 255, 0), 100)
                self.write(rects['hvh'], "Human Vs Human", (255, 0, 0), 65)
                self.write(rects['hvb'], "Human Vs Bot", (255, 0, 0), 65)
                self.write(rects['bvb'], "Bot Vs Bot", (255, 0, 0), 65)

                pygame.display.flip()

                selected = False
                while menuActive:
                    #assess mouse clicks n shit
                    for event in pygame.event.get():
                        if event.type == pygame.QUIT:
                            running = False
                            menu = 0
                            menuActive = False

                        #capture mouse clicks
                        if event.type == pygame.MOUSEBUTTONDOWN:
                            for key in rects.keys():
                                if rects[key].collidepoint(event.pos):
                                    selected = key

                        #capture key strokes
                        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                            running = False
                            menuActive = False
                            menu = 0

                    #logic for menu from the button clicks
                    if selected:
                        if not selected == "heading":
                            menuActive = False
                            if selected == "hvh":
                                menu = 1
                            if selected == "hvb":
                                menu = 2
                            if selected == "bvb":
                                menu = 4
                            if selected == "quit":
                                menu = 0
                                running = False
                                menuActive = False

            menuActive = True
            if menu == 1:
                scores = [0, 0]
                #draw the human vs human menu and play accordingly
                #draw the main screen
                board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                screen.fill((0, 0, 0))
                rects = {}
                rects['1'] = pygame.Rect(103, 501, 196, 196)
                rects['2'] = pygame.Rect(302, 501, 196, 196)
                rects['3'] = pygame.Rect(501, 501, 196, 196)
                rects['4'] = pygame.Rect(103, 302, 196, 196)
                rects['5'] = pygame.Rect(302, 302, 196, 196)
                rects['6'] = pygame.Rect(501, 302, 196, 196)
                rects['7'] = pygame.Rect(103, 103, 196, 196)
                rects['8'] = pygame.Rect(302, 103, 196, 196)
                rects['9'] = pygame.Rect(501, 103, 196, 196)
                rects['quit'] = pygame.Rect(500, 720, 280, 60)

                screen.fill((0, 0, 255), (100, 100, 600, 600))
                for key in rects.keys():
                    if key == "quit":
                        screen.fill((0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 75)
                    else:
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 100)

                #draw the player names
                self.drawPlayers(0)
                self.drawScores(scores)

                pygame.display.flip()
                player = 1
                self.drawPlayers(player)
                winner = 0
                selected = False
                while menuActive:
                    #assess mouse clicks n shit
                    for event in pygame.event.get():

                        #quit events
                        if event.type == pygame.QUIT or (
                                event.type == pygame.KEYDOWN
                                and event.key == pygame.K_ESCAPE):
                            running = False
                            menu = 0
                            menuActive = False

                        #capture mouse clicks
                        if event.type == pygame.MOUSEBUTTONDOWN:
                            for key in rects.keys():
                                if rects[key].collidepoint(event.pos):
                                    selected = key

                        #capture key strokes
                        if event.type == pygame.KEYDOWN:
                            validKeys = '123456789'
                            if event.unicode in validKeys:
                                selected = event.unicode

                    #logic for menu from the button clicks
                    if selected:
                        if selected == "quit":
                            menuActive = False
                            menu = 0
                        else:
                            pos = self.convertIndexToPos(int(selected))
                            #print pos,selected,rects[selected]
                            if self.validateMove(pos, board):
                                board[pos[1]][pos[0]] = player
                                self.drawMove(selected, player, rects)
                                pygame.display.update(rects[selected])
                                if self.findWinner(board):
                                    winner = player
                                else:
                                    player = self.switchPlayer(player)
                                    if not self.boardFull(board):
                                        self.drawPlayers(player)
                            selected = False

                    if (not winner == 0) or self.boardFull(board):
                        if not winner == 0:
                            self.drawPlayers(winner + 2)
                            scores[winner - 1] += 1
                            self.drawScores(scores)
                        else:
                            #draw
                            self.drawPlayers(5)
                            winner = 1

                        #reset game
                        player = winner
                        screen.fill((0, 0, 255), (100, 100, 600, 600))
                        for key in rects.keys():
                            if key == "quit":
                                screen.fill(
                                    (0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           75)
                            else:
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           100)
                        pygame.display.flip()
                        winner = 0
                        board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                        self.drawPlayers(player)
                        selected = False

            menuActive = True
            if menu == 2:
                #draw the choose bot for human to play against menu
                #define the rects
                rects = {}
                cursor = 420
                for key in opponents.keys():
                    rects[key] = pygame.Rect(120, cursor, 560, 120)
                    cursor += 140

                #draw the elements
                screen.fill((0, 0, 0))
                self.write((100, 100, 600, 150), "Choose Your",
                           (255, 255, 255), 80)
                self.write((100, 250, 600, 150), "Opponent", (255, 255, 255),
                           80)
                screen.fill((0, 0, 255), (100, 400, 600, 300))
                for key in rects.keys():
                    screen.fill((120, 120, 120), rects[key])
                    self.write(rects[key], key, (255, 255, 255), 45)
                pygame.display.flip()
                selected = False
                #process user input
                while menuActive:
                    for event in pygame.event.get():

                        #quit events
                        if event.type == pygame.QUIT or (
                                event.type == pygame.KEYDOWN
                                and event.key == pygame.K_ESCAPE):
                            running = False
                            menu = 0
                            menuActive = False

                        #capture mouse clicks
                        if event.type == pygame.MOUSEBUTTONDOWN:
                            for key in rects.keys():
                                if rects[key].collidepoint(event.pos):
                                    selected = key

                    #logic for menu from the button clicks
                    if selected:
                        hvbOpponent = opponents[selected]
                        menuActive = False
                        menu = 3

            menuActive = True
            if menu == 3:
                scores = [0, 0]
                #draw the bot vs human play
                #draw the main screen
                board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                screen.fill((0, 0, 0))
                rects = {}
                rects['1'] = pygame.Rect(103, 501, 196, 196)
                rects['2'] = pygame.Rect(302, 501, 196, 196)
                rects['3'] = pygame.Rect(501, 501, 196, 196)
                rects['4'] = pygame.Rect(103, 302, 196, 196)
                rects['5'] = pygame.Rect(302, 302, 196, 196)
                rects['6'] = pygame.Rect(501, 302, 196, 196)
                rects['7'] = pygame.Rect(103, 103, 196, 196)
                rects['8'] = pygame.Rect(302, 103, 196, 196)
                rects['9'] = pygame.Rect(501, 103, 196, 196)
                rects['quit'] = pygame.Rect(500, 720, 280, 60)

                screen.fill((0, 0, 255), (100, 100, 600, 600))
                for key in rects.keys():
                    if key == "quit":
                        screen.fill((0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 75)
                    else:
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 100)

                #draw the player names
                self.drawPlayers(0, hvbOpponent.name)
                self.drawScores(scores)

                pygame.display.flip()
                player = 1
                self.drawPlayers(player, hvbOpponent.name)
                winner = 0
                selected = False

                while menuActive:
                    #assess mouse clicks n shit
                    for event in pygame.event.get():

                        #quit events
                        if event.type == pygame.QUIT or (
                                event.type == pygame.KEYDOWN
                                and event.key == pygame.K_ESCAPE):
                            running = False
                            menu = 0
                            menuActive = False

                        if player == 1:
                            #capture mouse clicks
                            if event.type == pygame.MOUSEBUTTONDOWN:
                                for key in rects.keys():
                                    if rects[key].collidepoint(event.pos):
                                        selected = key

                            #capture key strokes
                            if event.type == pygame.KEYDOWN:
                                validKeys = '123456789'
                                if event.unicode in validKeys:
                                    selected = event.unicode

                    #logic for menu from the button clicks
                    if player == 2:
                        selected = str(
                            self.pos2Selected(hvbOpponent.move(board)))
                    if selected:
                        if selected == "quit":
                            menuActive = False
                            menu = 0
                        else:
                            pos = self.convertIndexToPos(int(selected))
                            #print pos,selected,rects[selected]
                            if self.validateMove(pos, board):
                                board[pos[1]][pos[0]] = player
                                self.drawMove(selected, player, rects)
                                pygame.display.update(rects[selected])
                                if self.findWinner(board):
                                    winner = player
                                else:
                                    player = self.switchPlayer(player)
                                    if not self.boardFull(board):
                                        self.drawPlayers(
                                            player, hvbOpponent.name)
                            selected = False

                    if (not winner == 0) or self.boardFull(board):
                        if not winner == 0:
                            self.drawPlayers(winner + 2, hvbOpponent.name)
                            scores[winner - 1] += 1
                            self.drawScores(scores)
                        else:
                            #draw
                            self.drawPlayers(5, hvbOpponent.name)
                            winner = 1

                        #reset game
                        player = winner
                        screen.fill((0, 0, 255), (100, 100, 600, 600))
                        for key in rects.keys():
                            if key == "quit":
                                screen.fill(
                                    (0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           75)
                            else:
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           100)
                        pygame.display.flip()
                        winner = 0
                        board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                        self.drawPlayers(player, hvbOpponent.name)
                        selected = False

            menuActive = True
            if menu == 4:
                scores = [0, 0]
                #draw the bot vs bot game
                #draw the main screen
                board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                screen.fill((0, 0, 0))
                rects = {}
                rects['1'] = pygame.Rect(103, 501, 196, 196)
                rects['2'] = pygame.Rect(302, 501, 196, 196)
                rects['3'] = pygame.Rect(501, 501, 196, 196)
                rects['4'] = pygame.Rect(103, 302, 196, 196)
                rects['5'] = pygame.Rect(302, 302, 196, 196)
                rects['6'] = pygame.Rect(501, 302, 196, 196)
                rects['7'] = pygame.Rect(103, 103, 196, 196)
                rects['8'] = pygame.Rect(302, 103, 196, 196)
                rects['9'] = pygame.Rect(501, 103, 196, 196)
                rects['quit'] = pygame.Rect(500, 720, 280, 60)

                screen.fill((0, 0, 255), (100, 100, 600, 600))
                for key in rects.keys():
                    if key == "quit":
                        screen.fill((0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 75)
                    else:
                        screen.fill((127, 127, 127), rects[key])
                        self.write(rects[key], key, (200, 200, 200), 100)

                #draw the player names
                opponentNames = []
                for key in opponents.keys():
                    opponentNames.append(key)
                #self.drawPlayers(0,hvbOpponent.name)
                self.drawBots(0, opponentNames)
                self.drawScores(scores)

                pygame.display.flip()
                player = 1
                self.drawBots(player, opponentNames, 1)
                winner = 0
                selected = False
                move = 0

                while menuActive:
                    #assess mouse clicks n shit
                    for event in pygame.event.get():

                        #quit events
                        if event.type == pygame.QUIT or (
                                event.type == pygame.KEYDOWN
                                and event.key == pygame.K_ESCAPE):
                            running = False
                            menu = 0
                            menuActive = False

                        #capture mouse clicks
                        if event.type == pygame.MOUSEBUTTONDOWN:
                            if rects['quit'].collidepoint(event.pos):
                                selected = 'quit'

                    #logic for menu from the button clicks
                    if selected == "quit":
                        menuActive = False
                        menu = 0

                    if move == 0:
                        selected = str(randint(1, 9))
                    else:
                        selected = str(
                            self.pos2Selected(
                                opponents[opponentNames[player -
                                                        1]].move(board)))
                    move += 1
                    pos = self.convertIndexToPos(int(selected))
                    if self.validateMove(pos, board):
                        board[pos[1]][pos[0]] = player
                        self.drawMove(selected, player, rects)
                        pygame.display.update(rects[selected])
                        if self.findWinner(board):
                            winner = player
                        else:
                            player = self.switchPlayer(player)
                            if not self.boardFull(board):
                                self.drawBots(player, opponentNames, 1)
                    selected = False

                    if (not winner == 0) or self.boardFull(board):
                        if not winner == 0:
                            self.drawBots(winner + 2, opponentNames, 500)
                            scores[winner - 1] += 1
                            self.drawScores(scores)
                        else:
                            #draw
                            self.drawBots(5, opponentNames, 500)
                            winner = 1

                        #reset game
                        player = winner
                        screen.fill((0, 0, 255), (100, 100, 600, 600))
                        for key in rects.keys():
                            if key == "quit":
                                screen.fill(
                                    (0, 0, 255),
                                    (rects[key][0] - 3, rects[key][1] - 3,
                                     rects[key][2] + 6, rects[key][3] + 6))
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           75)
                            else:
                                screen.fill((127, 127, 127), rects[key])
                                self.write(rects[key], key, (200, 200, 200),
                                           100)
                        pygame.display.flip()
                        winner = 0
                        board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
                        move = 0
                        self.drawBots(player, opponentNames, 1)
                        selected = False
示例#5
0
class main:
    rows = 8
    columns = 7
    bufferA = [[0 for x in range(columns)] for y in range(rows)]

    #varables at bottom to randomly generate coordinates for bufferA, nonzero chance of hitting an already taken coordinate set
    bufferAXVarX = random.randint(0, rows - 1)
    bufferAXVarY = random.randint(0, columns - 1)
    bufferAYVarX = random.randint(0, rows - 1)
    bufferAYVarY = random.randint(0, columns - 1)
    bufferAZVarX = random.randint(0, rows - 1)
    bufferAZVarY = random.randint(0, columns - 1)
    if ((bufferAXVarX == bufferAYVarX or bufferAXVarX == bufferAZVarX
         or bufferAYVarX == bufferAZVarX)
            and (bufferAXVarY == bufferAYVarY or bufferAXVarY == bufferAZVarY
                 or bufferAYVarX == bufferAZVarX)):  #generate again if equal
        bufferAXVarX = random.randint(0, rows - 1)
        bufferAXVarY = random.randint(0, columns - 1)
        bufferAYVarX = random.randint(0, rows - 1)
        bufferAYVarY = random.randint(0, columns - 1)
        bufferAZVarX = random.randint(0, rows - 1)
        bufferAZVarY = random.randint(0, columns - 1)

    bufferA[bufferAXVarX][bufferAXVarY] = 'X'
    bufferA[bufferAYVarX][bufferAYVarY] = 'Y'
    bufferA[bufferAZVarX][bufferAZVarY] = 'Z'

    bufferB = [[0 for x in range(columns)] for y in range(rows)]
    bufferC = [[0 for x in range(3)] for y in range(3)]
    bufferD = [[0 for x in range(3)] for y in range(3)]
    bufferC[0][0] = 'X'
    bufferC[0][1] = 'Y'
    bufferC[0][2] = 'Z'
    bufferD[0][0] = 'X'
    bufferD[0][1] = 'Y'
    bufferD[0][2] = 'Z'
    interval = input(
        "How long of a delay between train movements in seconds? ")
    itterations = input("How many times would you like the trains to move? ")
    semA = threading.Semaphore()
    semB = threading.Semaphore()
    semC = threading.Semaphore()
    semD = threading.Semaphore()

    plane_X = planeX.planeX(0, 0)
    plane_Y = planeY.planeY(0, 2)
    plane_Z = planeZ.planeZ(3, 6)

    p1 = P1.P1(0, plane_X, plane_Y, plane_Z, bufferA, bufferB, semA, semB)
    p2 = P2.P2(0, bufferC, bufferD, semA, semB, semC, semD)
    p3 = P3.P3(bufferC, bufferD, plane_X, plane_Y, plane_Z, bufferAZVarX,
               bufferAYVarY)

    #thread class declarations
    i = 0
    t1 = threading.Thread(target=p1.proc1,
                          args=(i, plane_X, plane_Y, plane_Z, bufferA, bufferB,
                                semA, semB, semC, semD, interval, itterations))
    t2 = threading.Thread(target=p2.proc,
                          args=(i, bufferA, bufferB, bufferC, bufferD, semA,
                                semB, semC, semD, interval, itterations))
    t3 = threading.Thread(target=p3.check,
                          args=(i, bufferC, bufferD, semC, semD, plane_X,
                                plane_Y, plane_Z, semA, semB, interval,
                                itterations))

    t1.start()

    t2.start()

    t3.start()