예제 #1
0
def jouer_jeu(joueur1, robot):
    partie = quoridor.Quoridor((f'{joueur1}', f'{robot}'))
    partie.__str__()
    i = True
    while i:
        type_coup = input('Quel est ton type de coup?')
        if type_coup == 'D':
            position = tuple(input('Vers quelle position veux-tu aller?'))
            pos = ((int(position[1]), int(position[4])))
            partie.déplacer_jeton(1, pos)
            partie.jouer_coup(2)
            print(f'La partie est terminée: {partie.partie_terminée()}')
        elif type_coup == 'MH':
            position = tuple(input('À quelle position veux-tu placer un mur horizontal?'))
            pos = ((int(position[1]), int(position[4])))
            partie.placer_mur(1, pos, 'horizontal')
            partie.jouer_coup(2)
            print(f'La partie est terminée: {partie.partie_terminée()}')
        elif type_coup == 'MV':
            position = tuple(input('À quelle position veux-tu placer un mur vertical?'))
            pos = ((int(position[1]), int(position[4])))
            partie.placer_mur(1, pos, 'vertical')
            partie.jouer_coup(2)
            print(f'La partie est terminée: {partie.partie_terminée()}')
        partie.__str__()
예제 #2
0
def manuel(idul):
    """
    Fonction qui permet de jouer en mode manuel.
    """
    partie = api.débuter_partie(ARGUMENTS.idul.lower())
    jeu = qr.Quoridor([idul.lower(), "automate"])
    jeu.état = partie[1]
    print(jeu)
    print("La méthode de jeu manuelle n'a pas encore été implémentée.")
    def __init__(self, moves):
        self.current_analyzed_game_moves = moves
        self.moves_index = None

        moves_as_string = " ".join(moves)
        self.current_analyzed_game = quoridor.Quoridor({
            "player_1": "A",
            "player_2": "B",
            "game": moves_as_string
        })
예제 #4
0
def quoridor():
    time.sleep(1)
    q = tttp.Quoridor({
        "player_1":
        "Joos",
        "player_2":
        "Lode",
        "game":
        "n s n s n s n 6e 4d 4g e5 6c a6 b6 4b 5a 3a c3 1c 2b 1a 2d 1e 2f 1g 3h h1 sw"
    })
    board_string = q.board_as_html()
    return board_string
    def display(self, specific_moves_index=None):
        '''If specific_moves = None: load all moves
        '''
        moves_as_string = self.moves_as_string(specific_moves_index)

        self.current_analyzed_game = quoridor.Quoridor({
            "player_1": "A",
            "player_2": "B",
            "game": moves_as_string
        })
        print(self.current_analyzed_game.board_as_string())
        print(self.current_analyzed_game.execute_command("history_nice"))
예제 #6
0
    def __init__(self,
                 player_1_name=None,
                 player_2_name=None,
                 moves=None,
                 loop=False,
                 logger=None):

        # loop for automatic restart after game end.
        # name will be asked when player names None
        # for computer player: auto_1 --> 1 level deep brute force
        # for computer player: auto_2 --> 2 level deep brute force
        # for computer player: auto_3 --> 3 level deep brute force
        # moves: list or array with sequence of verbose moves as game starting point.

        self.logger = logger or logging.getLogger(__name__)

        self.player_names = [player_1_name, player_2_name]

        for i, name in enumerate(self.player_names):
            if name is None:
                name = input(
                    "---INPUT PLAYERS--- \nType auto_1, auto_2 or auto_3 for computer player (1 is easy, 3 is hard).\nName for player {} going {}. [player{}]:"
                    .format(i + 1, ["north", "south"][i],
                            i + 1)) or "player{}".format(i + 1)
                self.player_names[i] = name

        # loop is mainly used to let computers fight each other.
        self.loop = loop
        if self.loop:
            self.pause_enabled = False
        else:
            self.pause_enabled = True

        self.init_dict = {
            "player_1": self.player_names[0],
            "player_2": self.player_names[1],
            "game": moves
        }
        # self.pause()

        output_encoding = sys.stdout.encoding  # check for command line encoding. utf-8 is desired.

        self.q = quoridor.Quoridor(self.init_dict, output_encoding,
                                   self.logger)
        self.game_loop()
예제 #7
0
def check_task(jeu, task, automode=False):
    """vérification du async task handling de la classe QuoridorX
    Arguments:
        jeu {QuoridorX} -- Instance du jeu courant
        task {list} -- dernière task connue
    Keyword Arguments:
        automode {bool} -- Si la tache doit être obtenue du AI (default: {False})
    Returns:
        [list] -- la nouvelle task si nouvelle task. False sinon
    """
    if not automode:
        # Vérifier si une nouvelle tâche a été entrée
        if task != jeu.task:
            return jeu.task
        return False
    murs = {'horizontaux': jeu.murh, 'verticaux': jeu.murv}
    qjeu = quoridor.Quoridor(jeu.joueurs, murs)
    return autocommande(qjeu)
    def calculate_next_moves(self, level=1):
        # will not execute moves of course, as this is an analysis tool, but shows the possibilities...
        # will give the possible moves, calculated by computer

        moves_as_string = self.moves_as_string(self.moves_index)

        game_for_suggesting_moves = quoridor.Quoridor({
            "player_1": "A",
            "player_2": "B",
            "game": moves_as_string
        })

        if level == 3:
            print(
                game_for_suggesting_moves.auto_level_3(simulate=True,
                                                       verbose=False))
        else:
            print("please provide valild level.")
예제 #9
0
def listing(idul):
    '''def listing(idul)
    Description:
        une fonction qui affiche les 20 dernières parties
    Input:
        idul (str)
            le idul du joueur
    Return:
        une liste contenant les réponses du joueur
    '''
    gamelist = api.lister_parties(idul)
    print("voici la liste de vos 20 dernières parties jouées")
    # itérer sur chaque parties à afficher
    for gamenumber, game in enumerate(gamelist):
        print("partie NO.", gamenumber)
        print("game ID:", game['id'])
        jeu = quoridor.Quoridor(game['état']['joueurs'], game['état']['murs'])
        print(jeu)
예제 #10
0
def jeu_console_serveur(idul, automode=False):
    """mode de jeu permettant de jouer en mode manuel contre le serveur
    - Les commandes sont entrées via le terminal
    - L'affichage s'effectue via le terminal en art ascii
    Arguments:
        idul {str} -- L'identifiant du joueur
    """
    # débuter le jeu
    nouveaujeu = api.débuter_partie(idul)
    jeu = quoridor.Quoridor(nouveaujeu[1]['joueurs'])
    jeu.gameid = nouveaujeu[0]
    # afficher le jeu
    print(jeu)
    # boucler
    while True:
        # jouer manuellement ou demander au AI de le coup a joue
        if automode:
            coup = autocommande(jeu)
        else:
            coup = prompt_player()
        # jouer le coup
        try:
            if not verifier_validite(jeu, coup):
                print("coup invalide!")
                print(jeu)
                continue
            nouveaujeu = api.jouer_coup(jeu.gameid, coup[0],
                                        (coup[1], coup[2]))
            jeu.joueurs = nouveaujeu['joueurs']
            jeu.murh = nouveaujeu['murs']['horizontaux']
            jeu.murv = nouveaujeu['murs']['verticaux']
            print(jeu)
        except StopIteration as s:
            # prévenir le joueur que la partie est terminée
            print('\n' + '~' * 39)
            print("LA PARTIE EST TERMINÉE!")
            print("LE JOUEUR {} À GAGNÉ!".format(s))
            print('~' * 39 + '\n')
            return
예제 #11
0
def autonome(idul):
    """
    Fonction qui permet de jouer en mode automatique contre le serveur.
    """
    partie = api.débuter_partie(ARGUMENTS.idul.lower())
    idp = partie[0]
    jeu = qr.Quoridor([idul.lower(), "automate"])
    jeu.état = partie[1]
    print(jeu)
    while True:
        try:
            jeu.jouer_coup(1)
            print(jeu)
            jeu.état = api.jouer_coup(idp, jeu.type_coup, jeu.pos_coup)
            jeu.posj2 = (jeu.état['joueurs'][1]['pos'][0],
                         jeu.état['joueurs'][1]['pos'][1])
            for i in jeu.état['murs']["horizontaux"]:
                jeu.murs['horizontaux'].append(i)
            for i in jeu.état['murs']["verticaux"]:
                jeu.murs['verticaux'].append(i)
            print(jeu)
        except StopIteration as err:
            print(f"La partie est terminée, {err} est vainqueur!")
            break
예제 #12
0
        "pos": [5, 7]
    }],
    "murs": {
        "horizontaux": [[4, 4], [2, 6], [3, 8], [5, 8], [7, 8]],
        "verticaux": [[6, 2], [4, 4], [2, 5], [7, 5], [7, 7]]
    }
}
#swag lines
print('\n' + '~' * 39)
print("BIENVENU DANS QUORIDOR!")
print('~' * 39 + '\n')
# offrir de jouer une nouvelle partie ou reprendre une partie existante
print(
    "souhaitez vous commencer une nouvelle partie ou continuer une partie existante?"
)
print("1 = nouvelle partie | 2 = partie existante")
CHOIX = int(input("choix: "))
if CHOIX == 1:
    # obtenir le nom des deux joueurs
    print("veuillez entrer le nom des joueurs:")
    JOUEUR1 = input("nom du joueur1: ")
    JOUEUR2 = input("nom du joueur2: ")
    # demarrer une nouvelle partie
    JEU = quoridor.Quoridor([JOUEUR1, JOUEUR2])
    loop([JOUEUR1, JOUEUR2], JEU)
elif CHOIX == 2:
    JEU = quoridor.Quoridor(ETAT_JEU['joueurs'], ETAT_JEU['murs'])
    loop(["joueur1", "joueur2"], JEU)
else:
    print("choix invalide!")
예제 #13
0
                JOUER = api.jouer_coup(ID_PARTIE, COUP[0], COUP[1])
                JEU.liste_joueurs = JOUER['joueurs']
                JEU.liste_murs = JOUER['murs']

                JEU.afficher()
            except StopIteration as err:
                GAGNANT = False
                print(f'Le gagnant est: {err}')
            except RuntimeError as err:
                print(err)

    # Mode automatique (commande : python main.py -a idul)
    elif COMMANDE.automatique:
        DEBUTER = api.débuter_partie(COMMANDE.idul)
        JEU = quoridor.Quoridor(DEBUTER[1]['joueurs'], DEBUTER[1]['murs'])
        ID_PARTIE = DEBUTER[0]

        print(JEU)

        GAGNANT = True
        while GAGNANT:
            try:
                COUP = JEU.jouer_coup(1)

                JOUER = api.jouer_coup(ID_PARTIE, COUP[0], COUP[1])

                JEU.liste_joueurs = JOUER['joueurs']
                JEU.liste_murs = JOUER['murs']

                print(JEU)
예제 #14
0
파일: main.py 프로젝트: sioue36/phase3
                        dest='graphique',
                        action='store_true',
                        help='Activer le mode graphique.')
    return parser.parse_args()


if __name__ == "__main__":
    ARGS = analyser_commande()
    ID_PARTIE = initialiser_partie(ARGS.idul)[0]
    GRILLE = initialiser_partie(ARGS.idul)[1]
    if ARGS.graphique:
        PARTIE = quoridorx.QuoridorX(GRILLE['joueurs'], GRILLE['murs'])
        PARTIE.automatique = ARGS.automatique
        PARTIE.id = ID_PARTIE
    else:
        PARTIE = quoridor.Quoridor(GRILLE['joueurs'], GRILLE['murs'])
    WIN = False
    while not WIN:
        PARTIE.afficher()
        if not ARGS.automatique:
            TYPE_COUP = input(
                "\nQuel type de coup voulez vous effectuer ?\n'D' pour déplacer le jeton,\
                \n'MH' pour placer un mur horizontal,\n'MV' pour placer un mur vertical.\nType: "
            )
            TYPE_COUP = TYPE_COUP.upper()
            if TYPE_COUP == '':
                TYPE_COUP = 'D'
            ISINT = False
            while not ISINT:
                try:
                    POS_X = int(input("Coordonnée en 'x'? "))
예제 #15
0
    mode_graph = analyser_commande().graphique

    ###Initialise la partie
    #Envoyer un POST pour initialer la partie
    ID, partie_initial = initialiser_partie(idul)

    ##Crée l'objet de jeu avec la classe demandée
    #Si le mode graphique est actif, utiliser la classe quoridorx
    if mode_graph:
        partie = quoridorx.QuoridorX(partie_initial['joueurs'],
                                     partie_initial['murs'])

    #Si le mode graphique est inactif, utiliser la classe Quoridor

    else:
        partie = quoridor.Quoridor(partie_initial['joueurs'], None)

    #Afficher le damier selon la classe
    if mode_graph:
        partie.afficher()
    else:
        print(partie)

    ###Exécuter ce code tant qu'il n'y a pas de gagnant
    while not partie.partie_terminée():
        ##Le joueur 1 choisi son coup selon le mode spécifié
        #Si le mode automatique est activé, choisir automatique le coup
        if mode_auto:
            (type_coup, position) = partie.jouer_coup(1)

        #Si le mode manuel est activé, l'utilisateur choisi le coup à jouer
예제 #16
0
def analyser_commande():
    '''Cette fonction permet de traiter la ligne de commande'''
    parser = argparse.ArgumentParser(description='Jeu Quoridor - phase 3')
    group = parser.add_mutually_exclusive_group()
    parser.add_argument(metavar='idul', dest='idul',
                        help='IDUL du joueur.')
    group.add_argument('-a', '--automatique', action='store_true', default=False, help='Activer le mode automatique.')
    group.add_argument('-x', '--graphique', action='store_true', default=False, help='Activer le mode graphique.')
    group.add_argument('-ax', '--graphique_automatique', action='store_true', default=False, help='Activer le mode automatique et graphique.')

    args = parser.parse_args()

    if args.automatique:
        idul = analyser_commande().idul
        dico = api.débuter_partie(idul)
        Id = dico['id']
        jeu = quoridor.Quoridor(dico)
        while quoridor.QuoridorError is False:
            jeu.jouer_coup(1)
            dico = api.jouer_coup(Id, type_de_coup, position)
        print(jeu)

    elif args.graphique:
        idul = analyser_commande().idul
        dico = api.débuter_partie(idul)
        jeu = quoridorx.QuoridorX(dico)
        Id = dico['id']
        i = True
        while i:
            coup = input("Choisir un coup (déplacement = D, mur horizontal = MH, mur vertical = MV) et presser la touche ⏎: ")
            if coup == 'D':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
            elif coup == 'MH':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
            elif coup == 'MV':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
        jeu.afficher()

    elif args.graphique_automatique:
        idul = analyser_commande().idul
        dico = api.débuter_partie(idul)
        Id = dico['id']
        jeu = quoridorx.QuoridorX(dico)
        while quoridor.QuoridorError is False:
            jeu.jouer_coup(1)
            dico = api.jouer_coup(Id, type_de_coup, position)
        jeu.afficher()

    else:
        jeu = quoridor.Quoridor(dico)
        idul = analyser_commande().idul
        dico = api.débuter_partie(idul)
        Id = dico['id']
        i = True
        while i:
            coup = input("Choisir un coup (déplacement = D, mur horizontal = MH, mur vertical = MV) et presser la touche ⏎: ")
            if coup == 'D':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
            elif coup == 'MH':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
            elif coup == 'MV':
                position = input("Préciser la position (x, y) et presser la touche ⏎: ")
                dico = api.jouer_coup(Id, coup, position)
        print(jeu)

    return args.idul
예제 #17
0
    def game_loop(self):
        # ask user for move if not provided.
        playing = True
        while playing:
            # display the board
            # self.pause()
            self.logger.info("print board (games state: {}):".format(
                self.q.get_state(), ))
            self.print_board()

            self.check_state()

            if self.q.get_state() == quoridor.GAME_STATE_PLAYING:
                start_millis = int(round(time.time() * 1000))

                # get user input move
                if "auto" in self.q.players[self.q.playerAtMoveIndex].name:
                    self.auto_turn()
                else:
                    self.human_turn()

                calc_time = int(round(time.time() * 1000)) - start_millis
                print("calc time = {} millis".format(calc_time))

                # self.print_message("___end of turn____")

            elif self.q.get_state() == quoridor.GAME_STATE_NOT_STARTED:
                pass
                # # get user input move
                # if auto in self.q.players[self.q.playerAtMoveIndex].name:
                # self.q.auto_turn(depth=1)
                # else:
                # self.human_turn()

            elif self.q.get_state() == quoridor.GAME_STATE_FINISHED:
                self.logger.info("game finished... (will restart?:{})".format(
                    self.loop, ))

                if not self.loop:
                    # self.command("moves")
                    self.command("stats")
                    self.command("save_stats")
                    command = input(
                        "game finished. Please enter u for undoing, r for restart or enter for exit"
                    ) or "exit"
                    if command in ["u", "undo"]:
                        self.q.set_state(quoridor.GAME_STATE_PLAYING)

                        # hack: we have to pretend like it was the next players' turn to play. So, the undo will properly revert.
                        self.q.playerAtMoveIndex = self.q.get_previous_player_index(
                        )

                        self.q.execute_command("undo")
                        self.q.execute_command("undo")
                    elif command in ["r", "restart"]:
                        self.q = quoridor.Quoridor(self.init_dict)
                    else:
                        exit()
                    # test = self.command(command)
                else:
                    # restart game.
                    self.command("save_stats")
                    self.q = quoridor.Quoridor(self.init_dict)
            else:
                self.logger.error("wrong game state: {}".format(
                    self.q.get_state()))

            feedback_message = self.q.get_status_message()
            if feedback_message != "":
                self.print_message(feedback_message)