예제 #1
0
def player_game(lab_path: str) -> None:
    """
    Start a new game where the player controls Ariane. The world is loaded using the file whose path has been provided.
    :param lab_path: path of the file to parse to create the world
    :return: None
    """
    canceled_last_move = False
    world = create_world_from_file(lab_path)
    world.save_game_state()
    if world.load_save():
        print("Save has been loaded!")
    view.create_window(world)
    view.display(world)
    while True:
        # If the player has no more chance of winning, the game is stopped
        if not still_remaining_options(world):
            break
        ev = upemtk.attend_ev()
        tev = upemtk.type_ev(ev)
        if tev == 'Quitte':
            break
        if tev == 'Touche':
            key = touche(ev)
            if key == 'c':
                if not canceled_last_move:
                    world.cancel_move(view)
                    canceled_last_move = True
                    continue
            else:
                canceled_last_move = False
            if key == 's':
                world.create_save()
            direction = get_dir_from_string(key)
            if not world.move_ariane(direction):
                continue
            world.move_thesee()
            view.display(world)
            if world.game_won():
                display_result(world)
                break
            world.move_minos(view)
            if world.game_lost():
                display_result(world)
                break
            world.save_game_state()
    upemtk.ferme_fenetre()
예제 #2
0
def main():
    """ Fonction principale du programme """

    #---------- Initialisation ----------
    numeroDeMap = "Edited"  # le numéro de la map à lire (changeable)
    carte, inventaire = initialisationMap(numeroDeMap)
    carte_debut = [list(l) for l in carte]
    largeurFenetre, hauteurFenetre, largeurInventaire = generationFenetre(
        carte)
    infoMap = [
        largeurFenetre, hauteurFenetre, largeurInventaire
    ]  #Stockage des infos dans une liste pour limiter le nombre de paramètres envoyés aux fonctions
    tk.cree_fenetre(largeurFenetre, hauteurFenetre)
    #-------- Fin initialisation --------

    # -- boucle de jeu
    while True:
        affichage(largeurFenetre, hauteurFenetre, largeurInventaire,
                  inventaire, carte)

        # conditions de sortie
        if partieGagnee(carte):
            dessinerVictoire(largeurFenetre, hauteurFenetre)
            tk.attente_clic()
            break

        #Gestion des touches
        typeEvent = attenteMouvement(carte, infoMap)
        if typeEvent == "r":  #commande pour revenir à la précédante sauvegarde
            carte, inventaire = recharger()
            continue
        elif typeEvent == "s":  #commande de sauvegarde
            ecritureFichierSauvegarde(carte, inventaire)
            continue
        elif typeEvent == "b":  #commande de reset
            carte = [list(l) for l in carte_debut]
            inventaire["nbClefs"], inventaire["nbCoups"] = 0, 0
            continue
        #Touches pour quitter le jeu
        elif typeEvent == "Quitte" or typeEvent == "Escape":
            break
        carte = typeMouvement(
            typeEvent, carte, infoMap,
            inventaire)  #Modifications de la carte par rapport à la touche

    tk.ferme_fenetre()
예제 #3
0
def solver_game(lab_path: str, game_type: str, display: bool) -> None:
    """
    Start a new game where one of the solver tries to solve the game, and then demonstrate its solution if it can
    find one.
    :param lab_path: path of the file to parse to create the world.
    :param game_type: type of solver that the user wants to use (naive or minimal)
    :param display: set to True, the user will visualize all the computations steps made by the solver to find a
           solution.
    :return: None
    """
    if game_type == "naive":
        solver = NaiveSolver()
    elif game_type == "minimal":
        solver = MinimalSolver()
    else:
        return usage()
    world = create_world_from_file(lab_path)
    initial_config = world.to_configuration()
    view.create_window(world)
    view.display(world)
    if solver.solve(world, display):
        print("Solution found (", len(solver.solution), "moves) !")
        solver.display_solution()
        world.load_configuration(initial_config)
        upemtk.texte(HEIGHT // 2,
                     WIDTH // 2,
                     "CLICK TO SEE SOLUTION",
                     couleur='black',
                     ancrage='center',
                     taille=40,
                     tag="click_to_display")
        upemtk.attend_clic_gauche()
        upemtk.efface("click_to_display")
        view.display(world)
        solver.play_game(world)
        display_result(world)
    else:
        print("No solution found...")
    upemtk.ferme_fenetre()
예제 #4
0
def main():
    # Initialisation
    global in_menu, playing

    debug_mode = False
    all_input = ("a", "z", "q", "s", "w", "t", "g", "y", "h", "b", "colon",
                 "o", "l", "p", "m", "8", "5", "9", "6", "2", "Up", "Down",
                 "Left", "Right", "Return")

    selection = 0

    display.init_game()
    display.init_menu()

    while True:

        input = utk.attente_touche_jusqua(100 - 100 * debug_mode)

        # Gestion du menu
        if lvl.menu_loop:
            print("input :", input)
            menu.main_menu(input)
            timer.update_timer()

        # Gestion en jeu
        elif lvl.playing_loop:

            ##### Parti debug #####
            if input == "F1":
                debug_mode = not debug_mode
            if debug_mode:
                input = all_input[random.randint(0, len(all_input) - 1)]
            ##### Fin parti debug #####
            print("input :", input)

            if input is not None:
                if lvl.discussing:
                    lvl.discussing = False
                    display.efface_discuss()
                elif lvl.player_using_vortex != -1:
                    vortex_selection(input)
                elif lvl.player_using_spell != -1:
                    spell_target_selection(input)
                elif menu.paused == True:
                    menu.pause_menu(input)
                else:
                    player_choose(input)
                    check_steal(input)
                    if input == "Escape":
                        print("affichage du menu pause")
                        menu.activate_pause_menu()

            timer.update_timer()
            check_steal()

        refresh_display()
        display.display_frame()
        utk.mise_a_jour()

        if check_exit() or check_timer() or (lvl.playing_loop and check_guard_catch()) \
        or input == "F4" or (not lvl.menu_loop and not lvl.playing_loop):
            break

    end_game()
    utk.ferme_fenetre()
예제 #5
0
    tk.cercle(x + cstCentrage, y + cstCentrage, rayon, "red", "#ff5050", 2)
    tk.cercle(x + cstCentrage, y + cstCentrage, rayon / 1.2, "red", "#ff5050",
              2)


def dessinerVictoire(largeurFenetre, hauteurFenetre):
    tk.texte(largeurFenetre // 4,
             hauteurFenetre // 3,
             "Victory !",
             'black',
             police="Times New Roman",
             taille=60)


if __name__ == '__main__':
    """ Ce programme sert à tester les différentes fonctions de dessin """
    tk.cree_fenetre(300, 300)
    dessinerQuadrillage(300, 300, 100,
                        [['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']])
    dessinerMur(0, 0, 100)
    dessinerClef(100, 0, 100)

    dessinerCible(0, 100, 100)
    dessinerBoite(100, 100, 100)

    dessinerJoueur(0, 200, 100)
    dessinerPorte(100, 200, 100)

    tk.attente_clic()
    tk.ferme_fenetre()
예제 #6
0
 def stop(self):
     upemtk.ferme_fenetre()
예제 #7
0
def main():
    """ Fonction principale """
    #### Définition des constantes et initialisation des variables ###########

    # info sur le contenu des cellules
    matriceTerrain, matriceTuiles, mursVer, mursHor = creerMatriceTerrain()
    tuilesRestantes = [i for i in range(2, 10)]

    infoPion = dict()  # info sur la position des pion
    initPions(1, (24, 24), infoPion)
    initPions(2, (25, 25), infoPion)
    initPions(3, (25, 24), infoPion)
    initPions(4, (24, 25), infoPion)

    dicEsc = {(25, 26): (26, 25), (26, 25): (25, 26)}

    dicTuile2 = defDicTuile2()
    dicTuile7 = defDicTuile7()

    #initialisé à 0 (inactif), passe à 1 si actif
    #on utilise une liste car objet mutable (dégueux mais pratique)
    modeVortex = [0]

    #roulement entre 0 (aucun portail selectionné) et les autres portails accessibles
    vortexActif = [0]

    tuilesPosees = [0, 1]
    modeTelekinesie = [0]
    telekinesieIndexTuileActive = [0]
    telekinesiesRestantes = [2]

    dicVortex = {1: [(23, 26)], 2: [(24, 26)], 3: [(26, 23)], 4: [(25, 23)]}

    sortieActive = False
    partiePerdue = False
    partieGagnee = False
    dureeTotalePartieInitiale = 180  # En secondes
    tempsRestant = dureeTotalePartieInitiale
    modifTemps = [0]

    listeGagnants = []

    debugActif = -1  # -1 -> vdésactivé ; 1 -> activé
    vitesse = 1 / 500  # Vitesse du mode debug

    #### Ouverture de la fenêtre #############################################

    tk.cree_fenetre(1900, 1000)

    #### Demander au joueur ce qu'il faut faire ##############################
    chargerSave = UIecranTitre()

    #### Choix du nombre de joueur ###########################################
    touchesDeBase = defTouchesDeBase()

    if not chargerSave:
        nb_joueurs = UIchoixNbrJoueur()
        touchesTotales = attributionDesTouches(nb_joueurs, touchesDeBase)
        touchesPartieParJoueur = touchesTotales[0]
        touchesPartie = touchesTotales[1]

    else:

        matriceTerrain, infoPion, nb_joueurs, sortieActive, tempsRestant, touchesPartie, touchesPartieParJoueur, listeGagnants, matriceTuiles, mursVer, mursHor, tuilesPosees, dicVortex, dicEsc, telekinesiesRestantes = chargerPartie(
        )
        for tuile in tuilesPosees:
            if tuile in tuilesRestantes:
                tuilesRestantes.remove(tuile)
    pionActif = dict()
    for i in range(1, nb_joueurs + 1):
        pionActif[i] = 1

    #### Entrée dans le jeu ##################################################

    heureDebut = time()
    dureeTotalePartie = tempsRestant

    while True:  # Boucle Principale
        tempsPause = gestionEntreeClavier(
            matriceTerrain, mursVer, mursHor, infoPion, pionActif,
            sortieActive, debugActif, vitesse, listeGagnants, dicVortex,
            dicEsc, dicTuile2, dicTuile7, modeVortex, vortexActif,
            touchesPartie, touchesPartieParJoueur, nb_joueurs, touchesDeBase,
            tempsRestant, matriceTuiles, tuilesRestantes, tuilesPosees,
            telekinesieIndexTuileActive, modeTelekinesie,
            telekinesiesRestantes)
        heureDebut = heureDebut + tempsPause

        if not sortieActive:  # Si les sorties ne sont pas activées on regarde si on peut les activer
            sortieActive = pionSurObjet(matriceTuiles, matriceTerrain,
                                        infoPion)

        # Mise à jour de l'image, gestion de la victoire/défaite
        tk.efface_tout()
        partiePerdue, tempsRestant = afficherPlateau(
            matriceTerrain, mursHor, mursVer, infoPion, listeGagnants,
            pionActif, debugActif, sortieActive, heureDebut, dureeTotalePartie,
            modifTemps, vortexActif, dicVortex, touchesPartie,
            touchesPartieParJoueur, matriceTuiles, modeTelekinesie,
            tuilesPosees, telekinesieIndexTuileActive, telekinesiesRestantes)
        partieGagnee = verifVictoire(listeGagnants)
        if partieGagnee or partiePerdue:
            break

    # Affichage des messages de victoire/défaite
    finPartie(partieGagnee, partiePerdue)

    tk.attente_clic_ou_touche()
    tk.ferme_fenetre()
예제 #8
0
def main():
    """ Fonction principale du programme """
    global largeurFenetre, hauteurFenetre  #Limiter les paramètres des fonctions

    #---------- Initialisation ----------
    carte = initialiseCarte()
    largeurFenetre, hauteurFenetre = generationFenetreEditeur(carte)
    tk.cree_fenetre(largeurFenetre, hauteurFenetre)
    selection = (0, 0)  # pour savoir quel objet l'utilisateur a selectionné
    nouvelleSelection = (0, 0)
    message = [
        "", 0
    ]  # Un message à afficher à l'écran [0] contient le message et [1] contient un boolean d'affichage (0 ou 1)
    #-------- Fin initialisation --------

    # ---- Boucle principale du jeu
    quitter = False
    while not (quitter):

        #Affichage
        affichageEditeur(carte, selection,
                         message)  #Afficher la carte à l'écran

        #Retirer le message après un clic
        if message[1] > 0:
            message[1] = 0

        ############ Boucle de Gestion des évènements ############
        while True:  # Boucle de récupération des évènements

            ev = tk.donne_evenement()
            typeEv = tk.type_evenement(ev)
            if typeEv == "Quitte":  # Quand quelqu'un clique sur la croix pour fermer la fenêtre
                quitter = True
                break  #Sortir de la boucle d'attente
            elif typeEv == "ClicGauche":
                nouvelleSelection = gestionClicGauche(ev)
                break
            elif typeEv == "ClicDroit":
                break
            elif typeEv == "Touche":
                # ------------ gestion des touches ------------
                touche = tk.touche(ev)
                if touche == "s":
                    # On vérifie la carte, on affiche un message si nécessaire ou on la sauvegarde
                    verification = verifierCarte(carte)
                    if verification[0]:
                        ecritureCarte(carte)
                        message = ["La carte a été sauvegardée !", 1]
                    else:
                        message = verification[1]
                elif touche == "r":
                    nouvelleSelection = "vide"  # pour éviter qu'un nouveau truc se place
                    carte = initialiseCarte()
                elif touche == "Escape":  #touche pour sortir
                    quitter = True
                break
                # -------- fin de gestion des touches -------

            tk.mise_a_jour()  #mise à jour des évènements
        ############ Fin de gestion des évènements ############

        #------ Changements sur le jeu
        if nouvelleSelection not in {
                "mur", "cible", "joueur", "porte", "clef", "boite", "vide"
        }:
            i, j = nouvelleSelection  # on place l'objet sélectionné sur la case
            carte[i][j] = transformeChaineVersCaractere(selection)
        else:  # si un nouveau truc est sélectionné, on le change
            selection = nouvelleSelection
        #-------
    tk.ferme_fenetre()