def get_opponents(data):
        opponents = []
        opponentLocations = data['OpponentLocations']
        for locationString in opponentLocations:
            parsedLocation = get_location_from_string(locationString)
            location = Location(parsedLocation[0], parsedLocation[1])
            opponent = Opponent(location)
            opponent.print_debug()
            opponents.append(opponent)

        return opponents
Exemple #2
0
def test_computer_make_move():
    # Test The AI find a correct empty place

    a = Table(params['x'], params['y'], params['w'], params['h'])
    a.grid = [[0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0],
              [0, 0, 2, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0],
              [0, 0, 2, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0]]
    a.get_empty_row_index(2)
    ai = Opponent()
    ai.computer_make_move(a)

    assert ai.x != 2
    assert ai.x not in a.full_columns
Exemple #3
0
Fichier : board.py Projet : wrhm/c4
    def __init__(self):
        """ Initialize board-specific variables. """

        self.board = []
        self.board_height = constants.BOARD_HEIGHT
        self.board_width = constants.BOARD_WIDTH

        self.human_piece = constants.HUMAN_PIECE
        self.computer_piece = constants.COMPUTER_PIECE
        self.open_space = constants.OPEN_SPACE
        self.pieces = constants.PIECES

        # Maybe query the user for desired opponent type
        self.AI_type = 'random'
        self.AI = Opponent(self.AI_type)

        self.players = ['Human', 'Computer']
        self.state = States.ongoing

        # who goes first. (0 is human). maybe parameterize this
        self.player_index = 0

        # Initialize the board as a grid of blank cells
        for nrow in range(self.board_height):
            self.board.append([self.open_space for i in
                               range(self.board_width)])
 def __init__(self):
     '''Iniitalize the game controller'''
     line_size = 200
     self.table = Table(0, line_size, line_size * 7, line_size * 6)
     self.circles = []
     self.winner_color = -1
     self.opponent = Opponent()
     self.winner = 0
     self.can_drop = True
     self.mouse_drag = False
     self.mouse_release = False
     self.mouse_pressed = True
     self.user_name = ""
     self.score = Score("scores.txt")
     self.txt_update_called = True
     self.game_over = False
     self.computer_turn = False
     self.winner_counter = 0
Exemple #5
0
    def load(self):
        for x in range(0, 2800, 70):
            platform = Platform(self.player, wielkosc_bloku, wielkosc_bloku,
                                -wielkosc_bloku,
                                self.player.screen_height - wielkosc_bloku - x,
                                image_ground, 0, 0 * wielkosc_bloku)
            self.set_of_platforms.add(platform)

        for p in self.wp:
            platform = Platform(self.player, *p)
            self.set_of_platforms.add(platform)

        tmp = 0
        for y in self.op:
            try:
                opponent = Opponent(y[0], self.rm[tmp][1], y[2], y[3],
                                    self.rm[tmp][0])
            except:
                self.rm.append([False, False])
                opponent = Opponent(*y)
            finally:
                tmp += 1
                self.opponents.add(opponent)

        for o in self.so:
            static_object = Static_object(*o)
            self.static_objects.add(static_object)

        for s in self.sp:
            spike = Spike(s[0], s[1], s[2])
            self.spikes.add(spike)

        for c in self.cr:
            if c[3]:
                crystal = Crystal(*c)
                self.crystals.add(crystal)
Exemple #6
0
 def __init__(self):
     #game window
     pygame.init()
     self.size = self.width, self.height = (640, 480)
     self.screen = pygame.display.set_mode(self.size)
     self.black = (0,0,0)
     
     #game scores
     self.score_p1 = 0
     self.score_p2 = 0
     
     #paddle
     self.paddle = Paddle()
     #player2 paddle
     self.opponent = Opponent()
     #ball
     self.ball = Ball()
     pygame.key.set_repeat(10,5)
     
     #opponent presses space
     self.space_host = False
     self.space_client = False
     self.direction = None
    def __init__(self):
        global manager
        spyral.Scene.__init__(self, SIZE)
        self.hero = Hero(self)
        self.hero.pos = (WIDTH-180, HEIGHT - 395)
        self.hero.scale_x = .80;
        self.hero.scale_y = .80;
        # Create Opponent Sprite
        self.opponent = Opponent(self);

        self.correct = False
        self.fireball1 = Fireball(self,1)
        self.fireball2 = Fireball(self,2)
        self.background = model.resources[model.currentOpponent + "bg"]
        self.layers = ["bottom", "text"]

        ## Adds widgets to screen
        class RegisterForm(spyral.Form):
            #Buttons
            selectButton = spyral.widgets.Button("Select Card")
            backButton   = spyral.widgets.Button("Back")
            answerButton = spyral.widgets.Button("Submit")

            easyButton   = spyral.widgets.Button("Easy")
            mediumButton = spyral.widgets.Button("Medium")
            hardButton   = spyral.widgets.Button("Hard")
            #Fields
            answerField  = spyral.widgets.TextInput(50, "")

        self.form = RegisterForm(self)
        # Setting positions
        self.form.selectButton.pos = (WIDTH/2-70, HEIGHT/2)
        self.form.backButton.pos   = (10, 10)
        self.form.answerButton.pos = (WIDTH/2+150, HEIGHT/2)
        self.form.answerField.pos  = (WIDTH/2+70, HEIGHT/2)

        self.form.easyButton.pos = (WIDTH/3, HEIGHT/2)
        self.form.mediumButton.pos = (WIDTH/2, HEIGHT/2)
        self.form.hardButton.pos = (WIDTH*2/3, HEIGHT/2)
        # Setting visible
        self.form.answerButton.visible = False
        self.form.answerField.visible  = False
        self.form.easyButton.visible = False
        self.form.mediumButton.visible = False
        self.form.hardButton.visible = False
        
        self.deck = {}
        self.opponentcards = {}
        # Initalize Hero cards
        for card_guts in model.deck:
            card_guts = model.deck[card_guts]
            self.deck[card_guts[0]] = (Card(self, card_guts[0], card_guts[1], card_guts[2]))
        # Initialize Opponent cards
        for card_guts in self.opponent.deck:
            card_guts = self.opponent.deck[card_guts]
            self.opponentcards[card_guts[0]] = (Card(self, card_guts[0], card_guts[1], card_guts[2]))

        self.showOppHealth = [0, 0, 0]
        self.showHealth = [0, 0, 0]
        count = 0
        for card in self.deck:
            self.showHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf", "HP: "+str(self.deck[card].health), 25))
        count = 0
        for card in self.opponentcards:
            self.showOppHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf", "HP: "+str(self.opponentcards[card].health), 25))
        
        self.drawAllCards()

        spyral.event.register("system.quit", spyral.director.quit)
        spyral.event.register("form.RegisterForm.selectButton.changed", self.startBattle)
        spyral.event.register("form.RegisterForm.backButton.changed", self.backClicked)
        spyral.event.register("form.RegisterForm.answerButton.changed", self.submitAnswer)
        spyral.event.register("form.RegisterForm.easyButton.changed", self.initEasy)
        spyral.event.register("form.RegisterForm.mediumButton.changed", self.initMedium)
        spyral.event.register("form.RegisterForm.hardButton.changed", self.initHard)
class FaceoffScreen(spyral.Scene):
    def __init__(self):
        global manager
        spyral.Scene.__init__(self, SIZE)
        self.hero = Hero(self)
        self.hero.pos = (WIDTH-180, HEIGHT - 395)
        self.hero.scale_x = .80;
        self.hero.scale_y = .80;
        # Create Opponent Sprite
        self.opponent = Opponent(self);

        self.correct = False
        self.fireball1 = Fireball(self,1)
        self.fireball2 = Fireball(self,2)
        self.background = model.resources[model.currentOpponent + "bg"]
        self.layers = ["bottom", "text"]

        ## Adds widgets to screen
        class RegisterForm(spyral.Form):
            #Buttons
            selectButton = spyral.widgets.Button("Select Card")
            backButton   = spyral.widgets.Button("Back")
            answerButton = spyral.widgets.Button("Submit")

            easyButton   = spyral.widgets.Button("Easy")
            mediumButton = spyral.widgets.Button("Medium")
            hardButton   = spyral.widgets.Button("Hard")
            #Fields
            answerField  = spyral.widgets.TextInput(50, "")

        self.form = RegisterForm(self)
        # Setting positions
        self.form.selectButton.pos = (WIDTH/2-70, HEIGHT/2)
        self.form.backButton.pos   = (10, 10)
        self.form.answerButton.pos = (WIDTH/2+150, HEIGHT/2)
        self.form.answerField.pos  = (WIDTH/2+70, HEIGHT/2)

        self.form.easyButton.pos = (WIDTH/3, HEIGHT/2)
        self.form.mediumButton.pos = (WIDTH/2, HEIGHT/2)
        self.form.hardButton.pos = (WIDTH*2/3, HEIGHT/2)
        # Setting visible
        self.form.answerButton.visible = False
        self.form.answerField.visible  = False
        self.form.easyButton.visible = False
        self.form.mediumButton.visible = False
        self.form.hardButton.visible = False
        
        self.deck = {}
        self.opponentcards = {}
        # Initalize Hero cards
        for card_guts in model.deck:
            card_guts = model.deck[card_guts]
            self.deck[card_guts[0]] = (Card(self, card_guts[0], card_guts[1], card_guts[2]))
        # Initialize Opponent cards
        for card_guts in self.opponent.deck:
            card_guts = self.opponent.deck[card_guts]
            self.opponentcards[card_guts[0]] = (Card(self, card_guts[0], card_guts[1], card_guts[2]))

        self.showOppHealth = [0, 0, 0]
        self.showHealth = [0, 0, 0]
        count = 0
        for card in self.deck:
            self.showHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf", "HP: "+str(self.deck[card].health), 25))
        count = 0
        for card in self.opponentcards:
            self.showOppHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf", "HP: "+str(self.opponentcards[card].health), 25))
        
        self.drawAllCards()

        spyral.event.register("system.quit", spyral.director.quit)
        spyral.event.register("form.RegisterForm.selectButton.changed", self.startBattle)
        spyral.event.register("form.RegisterForm.backButton.changed", self.backClicked)
        spyral.event.register("form.RegisterForm.answerButton.changed", self.submitAnswer)
        spyral.event.register("form.RegisterForm.easyButton.changed", self.initEasy)
        spyral.event.register("form.RegisterForm.mediumButton.changed", self.initMedium)
        spyral.event.register("form.RegisterForm.hardButton.changed", self.initHard)

    def initEasy(self, event):
        if (event.value == "down"):
            self.initQ("easy")

    def initMedium(self, event):
        if (event.value == "down"):
            self.initQ("medium")

    def initHard(self, event):
        if (event.value == "down"):
            self.initQ("hard")

    def initQ(self, diff):
        self.form.easyButton.visible = False
        self.form.mediumButton.visible = False
        self.form.hardButton.visible = False

        self.deck[self.selectedSubject].initQuestion(diff)
        ##Screen testcase##
#        while(self.deck[self.selectedSubject].q.randomOpKey != "-"):
#            self.deck[self.selectedSubject].initQuestion(diff)
        ##endtestcase##
        if self.selectedSubject == "Multiplication":
            spyral.director.push(division.sinkingScreen(self.deck[self.selectedSubject].q, diff))
        elif self.selectedSubject == "Subtraction":
            spyral.director.push(subtraction.mainScene(self.deck[self.selectedSubject].q, diff))
        elif self.selectedSubject == "Division":
            spyral.director.push(mult.mainScreen(self.deck[self.selectedSubject].q, diff))
        elif self.selectedSubject == "Integer":
            spyral.director.push(integer.mainScreen(self.deck[self.selectedSubject].q, diff))
        self.showQuestion = drawFont(self.scene, "Extras/Comic_Book.ttf", self.deck[self.selectedSubject].question, 25)
        if self.selectedSubject == "Statistics" or self.selectedSubject == "Geometry":
            self.showQuestion.pos = (20, HEIGHT/2 - 20)
            self.form.answerField.pos = (WIDTH/2 - 50, HEIGHT/2 + 20)
            self.form.answerButton.pos = (WIDTH/2 + 50, HEIGHT/2 + 20)
        else:
            self.showQuestion.pos = (WIDTH/2 - 150, HEIGHT/2)
            self.form.answerButton.pos = (WIDTH/2+150, HEIGHT/2)
            self.form.answerField.pos  = (WIDTH/2+70, HEIGHT/2)
        self.form.answerField.visible  = True
        self.form.answerButton.visible = True

################### Battle Logic #########################################
#### Deal Hero Damage to Opponent
    def dealDamage(self, damage):
        #Draw damage from hero to opponent
        #if hero is correct
        try:
            self.herocorrect.visible = False
            self.opponentcorrect.visible = False
        except:
            pass

        if self.correct:
            #tell hero he is correct
            self.herocorrect = drawFont(self.scene, "Extras/Comic_Book.ttf", "Correct!", 25)
            self.herocorrect.pos = (WIDTH-150, HEIGHT - 450)
            #show fireball/damage
            self.fireball1.pos = (WIDTH-100, HEIGHT - 100)
            self.fireball1.draw_linearly(HEIGHT - 100, 15)
            # modify numbers (damage)
            self.opponentcards[self.opponent.selectedSubject].applyDamage(damage)
        else:
            #tell hero he is wrong
            self.herocorrect = drawFont(self.scene, "Extras/Comic_Book.ttf", "Wrong", 25)
            self.herocorrect.pos = (WIDTH-150, HEIGHT - 450)
        
        #if opponent is correct
        if self.opponent.correct:
            #show opponent is correct
            self.opponentcorrect = drawFont(self.scene, "Extras/Comic_Book.ttf", "Correct!", 25)
            self.opponentcorrect.pos = (50, HEIGHT - 450)
            #show fireball/damage
            self.fireball2.draw_linearly(100, HEIGHT - 100)
            # modify numbers (damage)
            self.deck[self.selectedSubject].applyDamage(self.opponentcards[self.opponent.selectedSubject].damage)
        else:
            #show opponent is wrong 
            self.opponentcorrect = drawFont(self.scene, "Extras/Comic_Book.ttf", "Wrong", 25)
            self.opponentcorrect.pos = (50, HEIGHT - 450)
        
        print "Successfully dealt damage"
###

#### Starts the battle
    def startBattle(self, event):
        subj = self.opponent.pickCard()
        while not self.opponentcards[subj].alive:
            subj = self.opponent.pickCard()
        if (event.value == "down"):
            count = 0
            c = 0
            subjects = []
            # If no card selected, don't show anything
            try:    
                self.form.answerField.visible = False
                self.showQuestion.visible = False
                self.showDamage.visible = False

                del self.showQuestion
                del self.showDamage
            except:
                pass

            # If there is more than one card selected, don't run
            for card in self.deck:
                self.showHealth[c].visible = False
                self.deck[card].visible = False
                if self.deck[card].clicked:
                    subjects.append(self.deck[card].subject)
                    self.deck[card].visible = True
                    self.showHealth[c].visible = True
                    count += 1
                c += 1

            # If there is one card selected, start battle
            if count == 1:
                self.selectedSubject = subjects[0]
                self.deck[self.selectedSubject].visible = True

                self.form.selectButton.visible = False

                self.form.easyButton.visible   = True
                self.form.mediumButton.visible = True
                self.form.hardButton.visible   = True

                c = 0
                # Show opponent's selected card
                for card in self.opponentcards:
                    if not card == subj:
                        self.opponentcards[card].visible = False
                        self.showOppHealth[c].visible = False
                    c += 1

        # If there are no card selected, show all cards
            if count == 0:
                for card in self.deck:
                    self.deck[card].visible = True
                    self.showHealth[count].visible = True
                    count += 1

        
################### Event Handlers ############################################
#### Submit answer to system
    def submitAnswer(self, event):
        self.opponent.answerQuestion()
        if (event.value == "down"):
            # if answer is correct
            try:
                if float(self.form.answerField.value) == float(self.deck[self.selectedSubject].answer):
                    self.correct = True
                else:
                    self.correct = False
                self.dealDamage(self.deck[self.selectedSubject].damage)
                print "Opponent's answer: " + str(self.opponent.correct)
                self._reset()
            except(ValueError):
                pass

    def submitScreenAnswer(self, correct):
        self.opponent.answerQuestion()
        if correct:
            self.correct = True
        else:
            self.correct = False
        self.dealDamage(self.deck[self.selectedSubject].damage)
        self._reset()

################### Drawing Functions #########################################
#### Resets screen
    def _reset(self):
        dead = True
        for card in self.deck:
            if self.deck[card].alive:
                dead = False
        if dead:
            model.opponentDead = False
            spyral.director.replace(endGameScreen.EndGameScreen())
        dead = True
        for card in self.opponentcards:
            if self.opponentcards[card].alive:
                dead = False
        if dead:
            model.opponentDead = True
            spyral.director.replace(endGameScreen.EndGameScreen())

        # Show appropriate buttons and titles
        self.form.selectButton.visible = True
        self.form.answerButton.visible = False
        self.form.answerField.visible  = False
        self.form.easyButton.visible   = False
        self.form.mediumButton.visible = False
        self.form.hardButton.visible   = False

        self.showQuestion.visible = False

        # reset values
        self.form.answerField.value = ""
        for card in self.deck:
            self.deck[card].handle_deselect()    
        self.drawAllCards()

#### Draws all cards on screen
    def drawAllCards(self):
        x = WIDTH/12
        y = HEIGHT - 320
        count = 0

        ## Draw Hero's deck cards
        for card in self.deck:
            try:    
                self.showHealth[count].visible = False
#                del self.showHealth[count]
            except:
                pass
            # Init health counters
            self.showHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf","HP: "+str(self.deck[card].health), 25))
            # Draw Health counters on screen
            self.showHealth[count].layer = "text"
            self.showHealth[count].pos = (x + 70, y - 35)
            # Draw cards on screen
            self.deck[card].layer = "text"
            if self.deck[card].alive:
                self.deck[card].visible = True
            else:
                self.deck[card].visible = False
            self.deck[card].pos = (x, y)
            x = x + 320
            count += 1

        # Opponent cards
        x = WIDTH/4
        y = 15
        count = 0
        for card in self.opponentcards:
            try:    
                self.showOppHealth[count].visible = False
#                del self.showHealth[count]
            except:
                pass
            # Init health counters
            self.showOppHealth[count] = (drawFont(self.scene, "Extras/Comic_Book.ttf", "HP: "+str(self.opponentcards[card].health), 25))
            self.showOppHealth[count].layer = "text"
            self.showOppHealth[count].pos = (x + 70, y + 300)
            # Draw cards on screen
            self.opponentcards[card].layer = "text"
            if self.opponentcards[card].alive:
                self.opponentcards[card].visible = True
            else:
                self.opponentcards[card].visible = False 
            #Card placement
            self.opponentcards[card].pos = (x, y)
            x = x + 400
            count += 1
        count = 0

################### Exit ###################################################
#### Go back to controlPanelScreen
    def backClicked(self, event):
        if (event.value == "down"):
            spyral.director.pop()
class GameController:
    '''Manitain the state of the game and manage
    how the game work'''
    def __init__(self):
        '''Iniitalize the game controller'''
        line_size = 200
        self.table = Table(0, line_size, line_size * 7, line_size * 6)
        self.circles = []
        self.winner_color = -1
        self.opponent = Opponent()
        self.winner = 0
        self.can_drop = True
        self.mouse_drag = False
        self.mouse_release = False
        self.mouse_pressed = True
        self.user_name = ""
        self.score = Score("scores.txt")
        self.txt_update_called = True
        self.game_over = False
        self.computer_turn = False
        self.winner_counter = 0

    def update(self):
        '''Updates game state on every frame'''
        text_size_number = 100
        size_circle = 200
        fill_number = 4
        yellow_number = 255
        counter_max = 90
        for i in self.circles:
            if i.color_2 == yellow_number:
                # It cause the yellow circle drope after a while
                if i.counter < counter_max:
                    i.counter = i.counter + 1
                    continue
            if i.x < size_circle:
                i.x = size_circle // 2
            elif i.x >= size_circle and i.x < size_circle * 2:
                i.x = size_circle + size_circle / 2
            elif i.x >= size_circle * 2 and i.x < size_circle * 3:
                i.x = size_circle * 2 + size_circle / 2
            elif i.x >= size_circle * 3 and i.x < size_circle * 4:
                i.x = size_circle * 3 + size_circle / 2
            elif i.x >= size_circle * 4 and i.x < size_circle * 5:
                i.x = size_circle * 4 + size_circle / 2
            elif i.x >= size_circle * 5 and i.x < size_circle * 6:
                i.x = size_circle * 5 + size_circle / 2
            else:
                i.x = size_circle * 6 + size_circle / 2
            i.displayMe()
            if i.y <= i.cap and self.can_drop:
                i.y = min(i.cap, i.y + i.rate)
                i.rate = i.rate + 5
        if len(self.circles) > 0:
            if self.circles[-1].color_2 == yellow_number and \
             self.circles[-1].y >= self.circles[-1].cap:
                self.mouse_pressed = True
                self.computer_turn = False
        self.table.display()
        if self.winner == 1:
            if self.winner_counter < counter_max:
                self.winner_counter = self.winner_counter + 1
                return
            if self.txt_update_called:
                self.update_txtfile()
                self.txt_update_called = False
            fill(fill_number)
            textSize(text_size_number)
            if self.winner_color == 0:
                string_text = "Red won!"
            else:
                string_text = "Yellow won!"
            text(string_text, text_size_number * 5,
                 text_size_number + text_size_number / 2)
            return
        if self.game_over is True:
            fill(fill_number)
            textSize(text_size_number)
            string_text = "Game Over!"
            text(string_text, text_size_number * 5,
                 text_size_number + text_size_number / 2)
            return
        if self.computer_turn:
            fill(fill_number * 4)
            textSize(text_size_number / 2)
            string_text = "computer's turn"
            text(string_text, text_size_number * 10,
                 text_size_number + text_size_number / 2)
        elif self.computer_turn is False:
            fill(fill_number * 4)
            textSize(text_size_number / 2)
            string_text = "your turn"
            text(string_text, text_size_number * 10,
                 text_size_number + text_size_number / 2)

    def handle_mousePressed(self):
        '''Add the circle to the game'''
        x_number = 200
        color_number = 255
        if self.mouse_pressed is False:
            return
        if mouseY > x_number:
            self.mouse_drag = False
            self.mouse_release = False
            return
        if self.winner == 0:
            column = mouseX // x_number
            if column in self.table.full_columns:
                return
            else:
                self.can_drop = False
                circle = Circle(mouseX, x_number // 2, color_number, 0, 0)
                self.circles.append(circle)
                self.mouse_drag = True
                self.mouse_release = True

    def handle_mouseDragged(self):
        '''move the circle befor it release'''
        x_number = 200
        if self.mouse_drag is False or self.mouse_pressed is False:
            return
        if self.winner == 0:
            if (mouseX > x_number * 7 or mouseX < 0 or mouseY > x_number
                    or mouseY < 0):
                self.circles[-1].seen = False
                self.mouse_release = False
                return
            else:
                self.circles[-1].seen = True
                self.mouse_release = True
            column = mouseX // x_number
            if column not in self.table.full_columns:
                self.circles[-1].x = mouseX
                self.mouse_release = True

    def handle_mouseRealeased(self):
        '''Droped the circle after mouse released'''
        x_number = 200
        if self.mouse_pressed is False:
            return
        if self.mouse_release is False:
            if self.mouse_drag is True:
                self.circles.pop()
            return
        if self.winner == 0:
            index_column = mouseX // x_number
            empty_row = self.table.get_empty_row_index(index_column)
            self.circles[-1].x = mouseX
            self.circles[-1].cap = empty_row * x_number + (x_number +
                                                           x_number // 2)
            self.table.grid[empty_row][index_column] = 1
            self.can_drop = True
            self.win(empty_row, index_column, self.circles[-1].color_2)
            if len(self.table.full_columns) == 7:
                self.game_over = True
            if self.winner == 0 and self.game_over is False:
                self.make_yellow_circle()
            self.computer_turn = True

    def make_yellow_circle(self):
        '''make yellow circle and decide when it droped'''
        color_number = 255
        x_number = 200
        self.mouse_pressed = False
        self.mouse_drag = False
        self.mouse_release = False
        self.opponent.computer_make_move(self.table)
        x = self.opponent.x
        circle = Circle(x * x_number, x_number // 2, color_number,
                        color_number, 0)
        self.circles.append(circle)
        self.circles[-1].cap = self.opponent.y * x_number + (x_number +
                                                             x_number // 2)
        self.table.grid[self.opponent.y][self.opponent.x] = 2
        self.win(self.opponent.y, self.opponent.x, self.circles[-1].color_2)

    def win(self, y_pos, x_pos, winner_color):
        '''described all the rulles for circles. If place four of circles with
        the same color in a row either horizontally, vertically, or diagonally
        that color win the game'''
        list_direction = [1] * 8
        color = self.table.grid[y_pos][x_pos]
        for i in range(1, 4):
            if (x_pos + i) >= len(self.table.grid[0]):
                list_direction[1] = 0
                list_direction[2] = 0
                list_direction[3] = 0
            if (y_pos + i) >= len(self.table.grid):
                list_direction[3] = 0
                list_direction[4] = 0
                list_direction[5] = 0
            if (x_pos - i) < 0:
                list_direction[5] = 0
                list_direction[6] = 0
                list_direction[7] = 0
            if (y_pos - i) < 0:
                list_direction[0] = 0
                list_direction[1] = 0
                list_direction[7] = 0
            if (list_direction[0] == 1):
                if (self.table.grid[y_pos - i][x_pos] != color):
                    list_direction[0] = 0
            if (list_direction[1] == 1):
                if i == 3:
                    if ((y_pos + 1) < len(self.table.grid)
                            and (x_pos - 1) >= 0):
                        if (self.table.grid[y_pos + 1][x_pos - 1] == color):
                            break
                if (self.table.grid[y_pos - i][x_pos + i] != color):
                    list_direction[1] = 0
            if (list_direction[2] == 1):
                if i == 3:
                    if ((x_pos - 1) >= 0):
                        if (self.table.grid[y_pos][x_pos - 1] == color):
                            break
                if (self.table.grid[y_pos][x_pos + i] != color):
                    list_direction[2] = 0
            if (list_direction[3] == 1):
                if i == 3:
                    if ((y_pos - 1) >= 0 and (x_pos - 1) >= 0):
                        if (self.table.grid[y_pos - 1][x_pos - 1] == color):
                            break
                if (self.table.grid[y_pos + i][x_pos + i] != color):
                    list_direction[3] = 0
            if (list_direction[4] == 1):
                if (self.table.grid[y_pos + i][x_pos] != color):
                    list_direction[4] = 0
            if (list_direction[5] == 1):
                if i == 3:
                    if ((x_pos + 1) < len(self.table.grid[0])
                            and (y_pos - 1) >= 0):
                        if (self.table.grid[y_pos - 1][x_pos + 1] == color):
                            break
                if (self.table.grid[y_pos + i][x_pos - i] != color):
                    list_direction[5] = 0
            if (list_direction[6] == 1):
                if i == 3:
                    if ((x_pos + 1) < len(self.table.grid[0])):
                        if (self.table.grid[y_pos][x_pos + 1] == color):
                            break
                if (self.table.grid[y_pos][x_pos - i] != color):
                    list_direction[6] = 0
            if (list_direction[7] == 1):
                if i == 3:
                    if ((x_pos + 1) < len(self.table.grid[0])
                            and (y_pos + 1) < len(self.table.grid)):
                        if (self.table.grid[y_pos + 1][x_pos + 1] == color):
                            break
                if (self.table.grid[y_pos - i][x_pos - i] != color):
                    list_direction[7] = 0

        for i in list_direction:
            if i == 1:
                self.winner = 1
                self.winner_color = winner_color

    def update_txtfile(self):
        # When the user win, winner's name add to the score.txt

        if self.winner == 1 and self.winner_color == 0:
            self.score.write_name(self.user_name)
Exemple #10
0
from opponent import Opponent
from player import Player, humanPlayer
from qLearner import QLearner
import environment as en
import numpy as np

opp = Opponent()
ply = QLearner()
env = en.Environment(np.random.choice(2))


def playGame(ply, opp, startingPlayer, dialog=False):
    #choose players from ['human', 'defaultOpp', 'opponent', 'qOpp', 'deepQopp']
    #ply is player 0, opp is player 1
    opp.player = 1
    reward = 0

    def _dialog(ply='Player', dialog=dialog):
        if dialog:
            if reward: print('Reward: ', reward)
            else: print(ply, 'bet: ', env.state[-1])

    if startingPlayer == 0:
        called, bet = ply.makeTurn(env)
        env.finishTurn(bet)

        _dialog()

    while True:
        # for debugging insert: print('current state :', env.state)
Exemple #11
0
def run_fight(opponent=Opponent(screen)):
    '''Main loop code for each fight. Takes an Opponent to use.'''
    window_size = (1080, 911)
    screen = pygame.display.set_mode(window_size, flags)
    screen.set_alpha(None)
    menu_button_rect = pygame.Rect(0, 0, 148, 40)
    resume_button_rect = pygame.Rect(156, 336, 766, 103)
    help_button_rect = pygame.Rect(156, 460, 766, 103)
    quit_button_rect = pygame.Rect(156, 583, 766, 103)
    menu_button_rect.right = screen.get_rect().right
    sf = calculate_scale_factor(DEFAULT_WINDOW_SIZE, DEFAULT_WINDOW_SIZE)
    menu_rects = {'menu': scale_rect(menu_button_rect, sf[0], sf[1]),
                  'resume': scale_rect(resume_button_rect, sf[0], sf[1]),
                  'help': scale_rect(help_button_rect, sf[0], sf[1]),
                  'quit': scale_rect(quit_button_rect, sf[0], sf[1])}
    paused = False
    hud.set_opponent_name(opponent.opponent_name)
    c_output.add_line('Fight initiated')
    while 1:
        # Event handling
        for event in pygame.event.get():
            if event.type is QUIT:
                pygame.quit()
                sys.exit()
            if event.type is VIDEORESIZE:
                # The game window is being resized
                window_size = event.dict['size']
                sf = calculate_scale_factor(DEFAULT_WINDOW_SIZE, window_size)
                menu_rects = {'menu': scale_rect(menu_button_rect, sf[0], sf[1]),
                              'resume': scale_rect(resume_button_rect, sf[0], sf[1]),
                              'help': scale_rect(help_button_rect, sf[0], sf[1]),
                              'quit': scale_rect(quit_button_rect, sf[0], sf[1])}
                screen = pygame.display.set_mode(window_size, flags)
            elif event.type in mouse_list:
                mouse_x, mouse_y = event.pos
                mouse_event = event
                if event.type in mouse_button_list:
                    mouse_button = event.button
                    if event.type is MOUSEBUTTONDOWN:
                        if menu_rects['menu'].collidepoint(event.pos):
                            # Toggle pause menu
                            paused = not paused
                        elif menu_rects['resume'].collidepoint(event.pos):
                            paused = False
                        elif menu_rects['help'].collidepoint(event.pos):
                            if paused:
                                help_location = os.path.join(os.getcwd(), 'help/typefight.html')
                                webbrowser.open_new(help_location)
                        elif menu_rects['quit'].collidepoint(event.pos):
                            if paused:
                                pygame.quit()
                                sys.exit()
                    else:
                        # TODO: Assume mouse button up
                        pass
                else:
                    # TODO: Handle mouse movement event
                    pass
            elif event.type is KEYDOWN:
                if not paused:
                    paused = c_entry.handle_keydown_event(event,
                                                          player,
                                                          opponent,
                                                          c_output)

        # State updating
        if not paused:
            opponent.update_state(player, c_output)

        # Draw graphics
        if not paused:
            c_entry.render()
            c_output.render()
        game_surface.blit(fight_bkg, game_surface.get_rect())
        hud_surface = hud.render(c_entry,
                                 c_output,
                                 player.health_percent,
                                 opponent)
        game_surface.blit(opponent.render(), opponent.get_rect())

        if not paused:
            player.render()
        game_surface.blit(player.left_arm_image, player.la_center_rect)
        game_surface.blit(player.right_arm_image, player.ra_center_rect)

        game_surface.blit(hud_surface, hud_surface.get_rect())
        if paused:
            game_surface.blit(pause_fg, screen.get_rect())
        if opponent.state == 'defeated':
            game_surface.blit(win_fg, screen.get_rect())
        elif player.health_percent <= 0:
            game_surface.blit(lose_fg, screen.get_rect())

        # Display all rendered graphics
        screen.blit(pygame.transform.scale(game_surface, window_size), (0,0))
        pygame.display.flip()

        # Proceed to next frame. We are aiming to run at 60 FPS
        fps_clock.tick(FPS_TARGET)
Exemple #12
0
        hud_surface = hud.render(c_entry,
                                 c_output,
                                 player.health_percent,
                                 opponent)
        game_surface.blit(opponent.render(), opponent.get_rect())

        if not paused:
            player.render()
        game_surface.blit(player.left_arm_image, player.la_center_rect)
        game_surface.blit(player.right_arm_image, player.ra_center_rect)

        game_surface.blit(hud_surface, hud_surface.get_rect())
        if paused:
            game_surface.blit(pause_fg, screen.get_rect())
        if opponent.state == 'defeated':
            game_surface.blit(win_fg, screen.get_rect())
        elif player.health_percent <= 0:
            game_surface.blit(lose_fg, screen.get_rect())

        # Display all rendered graphics
        screen.blit(pygame.transform.scale(game_surface, window_size), (0,0))
        pygame.display.flip()

        # Proceed to next frame. We are aiming to run at 60 FPS
        fps_clock.tick(FPS_TARGET)

#*****************
# Main game code *
#*****************
run_fight(Opponent(screen))