Пример #1
0
    def play(self):
        print 'New game'
        p1, p2 = self.assignXO()
        usr = UserPlayer(p1, p2, self.size)
        ai = AIPlayer(p2, p1, self.size)

        if usr.xo == self.first():
            print 'User starts the game with \'{}\''.format(self.first())
            self.s.show()
            usr.makeMove(self.s)
        else:
            print 'AI starts the game with \'{}\''.format(self.first())

        while not self.isGameOver():
            ai.makeMove(self.s)
            if self.isGameOver():
                break
            usr.makeMove(self.s)

        if self.s.isWinning(usr.xo):
            print 'You\'ve won, impressive!'
        elif self.s.isWinning(ai.xo):
            print 'You lose, sorry...'
        else:
            print 'It\'s a draw.'
Пример #2
0
 def run_game(self, game_mode):
     # Initialize Basic State
     pygame.init()
     self.clock = pygame.time.Clock()
     # Initialize Objects
     self.display = pygame.display.set_mode((self.width, self.height))
     pygame.display.set_caption("Breakout Game")
     paddle = Paddle(self.width, self.height)
     ball = Ball(self.width, self.height)
     bricks = []
     brick_width = self.width / 10
     brick_height = self.height / 25
     for x in range(10):
         for y in range(5):
             brick_x = x * (self.width / 10)
             brick_y = y * (self.height / 25) + 20
             brick = Brick(self.width, self.height, brick_x, brick_y)
             bricks.append(brick)
     ai_player = AIPlayer()
     # Draw Objects
     self.draw_bg()
     paddle.draw_paddle(self.display)
     ball.draw_ball(self.display)
     for brick in bricks:
         brick.draw_brick(self.display)
     # Update Objects Every Tick
     while ball.alive:
         # Handle events
         for event in pygame.event.get():
             if event.type == QUIT:
                 pygame.quit()
                 sys.exit()
         # Handle Object Movements
         if game_mode < 2:
             move = ai_player.generate_move(ball, paddle, bricks, game_mode)
             if move == 1:
                 paddle.move_left()
             elif move == 2:
                 paddle.move_right()
         elif game_mode == 2:
             keys = pygame.key.get_pressed()
             if keys[K_LEFT]:
                 paddle.move_left()
             if keys[K_RIGHT]:
                 paddle.move_right()
         bricks = ball.move_ball(paddle, bricks)
         # Redraw
         self.draw_bg()
         paddle.draw_paddle(self.display)
         ball.draw_ball(self.display)
         for brick in bricks:
             brick.draw_brick(self.display)
         # Update Display
         pygame.display.update()
         self.clock.tick(self.fps)
Пример #3
0
def main():

    model = buildModel()

    if 'play' in sys.argv:
        players = [
            AIPlayer(color=chess.BLACK, model=model),
            HumanPlayer(chess.WHITE)
        ]
    elif 'debug' in sys.argv:
        players = [HumanPlayer(chess.BLACK), HumanPlayer(chess.WHITE)]
    elif 'train' in sys.argv or 'watch' in sys.argv:
        players = [
            AIPlayer(color=chess.BLACK, model=model),
            AIPlayer(color=chess.WHITE, model=model)
        ]
    else:
        print("No command")
        quit(1)

    game = Game(*players)

    def onBtn(n):
        p = players[game.turn]
        if isinstance(p, HumanPlayer):
            p.moveOrder(game, n)

    def updateGame():
        running = game.run()
        if not running:
            print("Game ended", game.result(claim_draw=True))
            game.reset()
            updateGame.count += 1

        if win: win.update(game.toArrays()[0])

        if updateGame.count >= SAVE_INTERVAL:
            saveModel(model)
            updateGame.count = 0

    updateGame.count = 0

    win = None
    try:
        if 'train' in sys.argv:
            while (True):
                updateGame()
        else:
            win = Window(onButton=onBtn)
            win.loop(cb=updateGame)
    except KeyboardInterrupt:
        pass
    finally:
        saveModel(model)
Пример #4
0
class EnemyPlayer(Player):
    name = "Enemy Player"
    shortcut = "EP"
    register = True
    size_ratio = 0.5
    cls_texture = textures.player2_up

    def setup(self):
        self.textures = textures.player2
        self.images = game_objects.player2

    def start(self):
        self.move_duration = 0.35
        self.ai = AIPlayer(self)
        self.on_every_move()

    def on_move_finish(self):
        pass

    def on_every_move(self):
        destination = self.ai.get_move()
        if destination is None:
            self.aitimer = Timer(0.1, self.on_every_move)
            self.aitimer.start()
            return
        self.move(destination)

    def freeze(self):
        self.frozen = True
        self.aitimer.cancel()
Пример #5
0
class EnemyPlayer(Player):
    name = "Enemy Player"
    shortcut = "EP"
    register = True
    size_ratio = 0.5
    cls_texture = textures.player2_up

    def setup(self):
        self.textures = textures.player2
        self.images = game_objects.player2

    def start(self):
        self.move_duration = 0.35
        self.ai = AIPlayer(self)
        self.on_every_move()

    def on_move_finish(self):
        pass

    def on_every_move(self):
        destination = self.ai.get_move()
        if destination is None:
            self.aitimer = Timer(0.1, self.on_every_move)
            self.aitimer.start()
            return
        self.move(destination)

    def freeze(self):
        self.frozen = True
        self.aitimer.cancel()
Пример #6
0
 def start(self):
     self.move_duration = 0.35
     self.ai = AIPlayer(self)
     self.on_every_move()
Пример #7
0
	def __init__(self, name='MinMax AI (depth 4)', tag='&', color=colors['BLUE'], setup='NO_SETUP', maxDepth=4):
		AIPlayer.__init__(self, name, tag, color, setup)
		self.maxDepth = maxDepth
		random.seed()
Пример #8
0
	def __init__(self, name='Simple AI', tag='*', color=colors['MAGENTA'], setup='NO_SETUP'):
		AIPlayer.__init__(self, name, tag, color, setup)
		random.seed()
Пример #9
0
	def __init__(self, name='Easy AI', tag='!', color=colors['GREEN'], setup='NO_SETUP'):
		AIPlayer.__init__(self, name, tag, color, setup)
		random.seed()
Пример #10
0
    '''
    (/‵Д′)/~ ╧╧
    '''
    def __init__(self, players, initial_state):
        raise NotImplementedError("To be implemented ?!")
    def run(self, n_turns=200):
        for t in range(n_turns):
            p = self.state.now_player
            act = p.action(self.state)
            self.state = self.state.next_turn(p, act)

class Player:
    @property
    def name(self):
        raise NotImplementedError("To be implemented 好神")
    def h(self, state, action_taken=None):
        raise NotImplementedError("To be implemented duckingod")
    def action(self, state):
        raise NotImplementedError("To be implemented QAQ")

if __name__=='__main__':
    from ai import AIPlayer, Beam
    players = [
        AIPlayer('Alpha', Beam()),
        AIPlayer('Beta', Beam())
        ]
    initial_state = State()
    game = Game(players, initial_state)
    game.run()

Пример #11
0
if __name__ == '__main__':
    if args.game == 'ttt':
        #model = TicTacToeNet(pass_through_states=args.pass_through,
        #                     sideways_net=args.sideways_net)
        modeltype = TicTacToeNet
        gametype = TicTacToeGame
        humantype = HumanTicTacToePlayer
    elif args.game == 'C4':
        #model = ConnectFourNet(pass_through_states=args.pass_through,
        #                       sideways_net=args.sideways_net)
        modeltype = ConnectFourNet
        gametype = ConnectFourGame
        humantype = HumanConnectFourPlayer

    ref_model = torch.load(args.reference)
    ref_ai = AIPlayer(model=ref_model, max_states=args.max_states)

    files = os.listdir(args.dir)
    eps = []
    for fn in files:
        _, fn = fn.split('_')
        fn, _ = fn.split('.')
        eps += [int(fn)]
    eps.sort()
    winrates = []
    for ep in eps:
        model = torch.load(os.path.join(args.dir, 'model_{}.dat'.format(ep)))
        test_ai = AIPlayer(model=model, max_states=args.max_states)
        nwins = 0.
        ngames = args.sample_games
        for sample in range(ngames):
Пример #12
0
 def ai_player(self, ai_difficulty=8):
   bot = AIPlayer(ai_difficulty=ai_difficulty)
   return bot
Пример #13
0
 def start(self):
     self.players = [AIPlayer(), Player()]
     self.deal()
     print("game started")
Пример #14
0
            action = np.random.randint(0, 4)
        else:  # choose best action from Q(s,a) values
            action = np.argmax(qval)

        # Take action, observe new state S'
        score = game.play_move(state, action, randomState)
        # Observe reward
        reward = game.get_reward(state, score)
        # Get max_Q(S',a)
        newQ = model.predict(state.reshape(1, 16), batch_size=1)
        maxQ = np.max(newQ)
        y = np.zeros((1, 4))
        y[:] = qval[:]

        if score == 0:
            update = np.exp(c)
        else:
            update = score + gamma * maxQ

        y[0][action] = update  # target output
        model.fit(state.reshape(1, 16), y, batch_size=1, nb_epoch=1, verbose=0)
        if score == 0:
            status = 0

    if i % 10 == 0:
        print("Game #: %s Score: %s" % (i, c))
    epsilon -= 1 / epochs

randomState = np.random.RandomState(0)
GameHandler(size=4, player=AIPlayer(model), state=randomState)
Пример #15
0
 def start(self):
     self.move_duration = 0.35
     self.ai = AIPlayer(self)
     self.on_every_move()
Пример #16
0
if __name__ == '__main__':
    if args.game == 'ttt':
        model = TicTacToeNet(pass_through_states=args.pass_through,
                             sideways_net=args.sideways_net)
        gametype = TicTacToeGame
        humantype = HumanTicTacToePlayer
    elif args.game == 'C4' or args.game == 'c4':
        model = ConnectFourNet(pass_through_states=args.pass_through,
                               sideways_net=args.sideways_net)
        gametype = ConnectFourGame
        humantype = HumanConnectFourPlayer

    if args.load:
        model = torch.load(args.load)

    ai = AIPlayer(0, lambda x: x, model, max_states=args.max_states)

    if args.train:
        ai.train_iterations = args.nepochs
        for game_num in range(args.ngames):
            training_game = gametype()
            training_game.registerPlayer(ai)
            training_game.registerPlayer(ai)
            training_game.start(display=False)
            print('finished %d games' % (game_num+1))

            if args.save and game_num % args.save_interval == 0:
                torch.save(model, os.path.join(args.save, 'model_{}.dat'.format(game_num) ) )
    else:
        human = humantype()