コード例 #1
0
ファイル: affichage.py プロジェクト: Aluminium95/PyMastermind
def generer_score():
	
	for i in range (1,6):
		seth (0)
		
		
		up ()
		forward (40)
		color ("red")
		begin_fill ()
		polygone (6,20)
		end_fill ()
		up ()
		forward (3)
		left (90)
		forward (5)
		color ("black")
		texte (str (i))
		yield
	
	# TODO: utilisation de scores.py
	for i in range(0,5):
		down()
		score = persistance.get_propriete ("scores", str (i) + ":score")
		texte (score)
		up ()
		yield

	for i in range(0,5):
		down ()
		nom = persistance.get_propriete ("scores", str (i) + ":nom")
		texte (nom)
		up ()
		yield
コード例 #2
0
ファイル: affichage.py プロジェクト: Aluminium95/PyMastermind
def win (score):
	""" Affiche l'écran de victoire (fond choisi)
		
		@bg : str
		@return : None 
	"""
	raz () # Ou pas ?

	th = persistance.get_propriete ("backgrounds", "theme:courant")
	y = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":y:plateau"))
	x = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":x:plateau"))
	
	path = "Images/Theme" + th + "/gagne.gif"
	bgpic(path)
	
	aller_a (-125, -70) # On centre la réponse
	
	color ("white")
	begin_fill ()
	rectangle (250,110)
	end_fill ()
	
	aller_a (-110,0)
	color ("black")
	texte ("Votre score final","important")
	
	aller_a (-9 * len (str (score)),-50)
	color ("black")
	texte (score)
コード例 #3
0
ファイル: moteur.py プロジェクト: Aluminium95/PyMastermind
def nouvelle_partie ():
	""" Commence une nouvelle partie,
		nécessaire pour pouvoir utilser les 
		fonctions relatives à une partie ... afin 
		de bien savoir ce qui se passe 
		
		@return : None
		
		@throw : 
			persistance.CleInvalide # pour le nombre de coups
			persistance.FichierInvalide # « config »
			persistance.ValeurInvalide (fichier,clé) # nombre de coups 
	"""
	global en_cours_de_partie,historique,restant,code_secret,mode_partie
	
	en_cours_de_partie = True
	historique = [] # Initialise l'historique
	
	mode_partie = get_next_mode () # susceptible de planter 
	
	restant = persistance.get_propriete ("config", "coups:" + mode_partie)
	
	try:
		restant = int (restant)
	except ValueError:
		raise persistance.ValeurInvalide ("config", "coups:" + mode_partie)
	
	affichage.plateau () # Remet l'affichage du plateau
コード例 #4
0
ファイル: moteur.py プロジェクト: YannDesmarais/PyMastermind
def set_mode (m):
	global mode,restant
	
	if m in liste_modes:
		mode = m
		restant = persistance.get_propriete ("config","coups:"+m)
		return True
	else:
		return False
コード例 #5
0
def string_to_hexa (couleur):
	""" Retourne la valeur Hexa de la couleur
		
		@couleur : string = couleur à convertir
		
		@return : string | False
	"""
	if is_string (couleur): # vérifie que c'est une chaine valide
		return persistance.get_propriete ("couleurs",couleur)
	else:
		return False # on sait pas convertir 
コード例 #6
0
ファイル: moteur.py プロジェクト: Aluminium95/PyMastermind
def get_next_mode ():
	""" Retourne le mode de jeu de la prochaine partie
		(comme définit dans le fichier de configuration)
		
		@return : str (facile | moyen | difficile)
		
		@throw :
			persistance.CleInvalide
			persistance.FichierInvalide
	"""
	return persistance.get_propriete ("config", "niveau")
コード例 #7
0
ファイル: moteur.py プロジェクト: YannDesmarais/PyMastermind
def definir_code (tableau):
                        
	global code_secret
	if len (tableau) == int (persistance.get_propriete ("config", "nombre_cases")):
		for i in tableau:
			if couleurs.is_string (i) == False:
				return False
		code_secret = tableau
		return True
	else:
		return False
コード例 #8
0
ファイル: themes.py プロジェクト: Aluminium95/PyMastermind
def get_theme_opts (t,*args):
	l = []
	for j in args:
		if j == "@self":
			l.append (t)
		else:
			try:
				s = "theme:{0}:{1}".format (t,j)
				l.append (persistance.get_propriete ("backgrounds",s))
			except:
				pass # RàF
	return l
コード例 #9
0
ファイル: themes.py プロジェクト: Aluminium95/PyMastermind
def maximum ():
	""" Retourne le thème maximal """
	try:
		max_theme = persistance.get_propriete ("backgrounds","theme:max")
	except persistance.CleInvalide:
		pass
	except persistance.FichierInvalide:
		pass
	else:
		try:
			return int (max_theme)
		except ValueError:
			raise persistance.ValeurInvalide ("backgrounds","theme:max")
コード例 #10
0
ファイル: affichage.py プロジェクト: Aluminium95/PyMastermind
def plateau ():
	""" Affiche un plateau vierge
		et définit toutes les constantes 
		pour afficher les coups sur le plateau
		
		@return : None
	"""
	global y,x

	raz ()
	
	th = persistance.get_propriete ("backgrounds","theme:courant")

	path = "Images/Theme" + th + "/fond.gif"
	bgpic (path)
	
	y = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":y:plateau"))
	x = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":x:plateau"))
	
	
	goto(x,y)

	speed (0)    
コード例 #11
0
ファイル: moteur.py プロジェクト: Aluminium95/PyMastermind
def get_nombre_couleurs_next ():
	""" Retourne le nombre de couleurs disponibles dans 
		le futur niveau de difficulté 
		
		@return : int 
		
		@throw :
			persistance.CleInvalide
			persistance.FichierInvalide
			ValueError
	"""
	cle = "couleurs:{0}".format (get_next_mode ())
	
	return int (persistance.get_propriete ("config", cle))
コード例 #12
0
ファイル: affichage.py プロジェクト: Aluminium95/PyMastermind
def loose (code):
	""" Affiche l'écran de défaite
		
		@bg : str
		@return : None
	"""
	raz () # Ou pas ?
	
	th = persistance.get_propriete ("backgrounds", "theme:courant")
	y = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":y:plateau"))
	x = int (persistance.get_propriete ("backgrounds", "theme:" + th + ":x:plateau"))
	
	path = "Images/Theme" + th + "/perdu.gif"
	bgpic(path)
	
	
			
	aller_a (-125, -70) # On centre la réponse
	
	color ("white")
	begin_fill ()
	rectangle (250,110)
	end_fill ()

	aller_a (-95, -65) # On centre la réponse

	for i in code:
		color (couleurs.couleur_to_hexa (i))
		begin_fill ()
		carre (40)
		end_fill ()
		fd(50)

	
	aller_a (-110,0)
	color ("black")
	texte ("La solution était","important")
コード例 #13
0
ファイル: couleurs.py プロジェクト: Aluminium95/PyMastermind
def abrv_to_string (abrv):
	""" Retourne la valeur String de l'abréviation
		
		@abréviation : string = abréviation à convertir
		
		@return : string 

		@throw : CouleurInvalide 
				 persistance.FichierInvalide
				 persistance.CleInvalide
	"""
	if is_abrv (abrv): # vérifie que c'est une chaine valide
		return persistance.get_propriete ("couleurs", "$" + abrv) # Les abréviations commencent par un $
	else:
		raise CouleurInvalide
コード例 #14
0
ファイル: couleurs.py プロジェクト: Aluminium95/PyMastermind
def string_to_hexa (couleur):
	""" Retourne la valeur Hexa de la couleur
		
		@couleur : string = couleur à convertir
		
		@return : string 

		@throw : CouleurInvalide 
				 persistance.FichierInvalide
				 persistance.CleInvalide
	"""
	if is_string (couleur): # vérifie que c'est une chaine valide
		return persistance.get_propriete ("couleurs",couleur)
	else:
		raise CouleurInvalide
コード例 #15
0
ファイル: scores.py プロジェクト: Aluminium95/PyMastermind
def recup_score ():
	""" Recupere la liste des 5 meilleurs scores
		
		@return : [ int ... ] = les 5 meilleurs scores 
		
		@throw : 
			persistance.CleInvalide
			persistance.FichierInvalide
	"""
      
	score = []
	i = 0
	while i < 5:
		score.append (persistance.get_propriete ("scores",str(i)+":score"))
		i = i + 1
	return score
コード例 #16
0
ファイル: scores.py プロジェクト: Aluminium95/PyMastermind
def recup_nom (): #recupere les noms des joueurs des 5 meilleurs scores
	""" Récupère les noms des joueurs des 5 meilleurs scores 
		dans le fichier de scores
		
		@return : [str ... ] = les 5 meilleurs noms
		
		@throw : 
			persistance.CleInvalide
			persistance.FichierInvalide
	"""
	nom = []
	i = 0
	while i < 5:
		nom.append (persistance.get_propriete ("scores",str(i)+":nom"))
		i = i + 1
	return nom
コード例 #17
0
ファイル: moteur.py プロジェクト: Aluminium95/PyMastermind
def get_nombre_couleurs ():
	""" Retourne le nombre de couleurs disponibles dans 
		le niveau de difficulté courant 

		@return : int 
		
		@throw :
			PasEnCoursDePartie
			persistance.CleInvalide
			persistance.FichierInvalide
			ValueError
	"""
	global mode_partie
	
	if est_en_partie () != True:
		raise PasEnCoursDePartie
	
	return int (persistance.get_propriete ("config","couleurs:" + mode_partie))
コード例 #18
0
ファイル: themes.py プロジェクト: Aluminium95/PyMastermind
def choix_theme (nbr_theme = 1):
	""" Sélectionne un thème (modifie le fichier de configuration)
		
		@nbr_theme : int = le numéro du nouveau thème sélectionné
		
		@return : None
		
		@throw :
			persistance.CleInvalide
			persistance.FichierInvalide
			ValueEror # si jamais il y a une valeur erronée dans backgrounds -> theme:max
	"""
	if not isinstance (nbr_theme, int):
		nbr_theme = 1
	
	max_theme = persistance.get_propriete ("backgrounds","theme:max")
	
	if nbr_theme > int (max_theme):
		nbr_theme = 1
	
	persistance.set_propriete ("backgrounds","theme:courant",str (nbr_theme))
コード例 #19
0
ファイル: regles.py プロジェクト: Aluminium95/PyMastermind
def regles (mode = False):
	"""Affiche les règles ainsi que les aides du jeu. Selon le niveau sélectionné.
	(un fond y est inséré)"""
	
	if mode == False:
		mode = ""
		
		try:
			mode = moteur.get_mode ()
		except:
			mode = moteur.get_next_mode ()
		
	raz ()
	screensize(600,600,"white")
	
	if mode == "facile":
		bgpic("Images/Regles/ff.gif")
	elif mode == "moyen":
		bgpic ("Images/Regles/fn.gif")
	else:
		bgpic ("Images/Regles/fd.gif")
	
	
	up()
	goto(30,220)
	color("black")
	niveau(mode)
	
	nombre_coups = persistance.get_propriete ("config","coups:" + mode)
	
	generateur = generateur_texte (nombre_coups)
	
	goto (-133,150)
	lignes (1, 0, 30, generateur)
	
	goto(-133,20)
	main_text2()
	goto (-245,-160)
	
	couleurs_possibles ()
コード例 #20
0
ファイル: moteur.py プロジェクト: Aluminium95/PyMastermind
def definir_code (tableau): 
	""" Définit le code à trouver pour la partie !
		
		@tableau : [couleurs (français) ...] = le code à trouver

		@return : None

		@throw : TableauInvalide (msg) 
				PasEnCoursDePartie
	"""
	global code_secret
	
	if est_en_partie () != True:
		raise PasEnCoursDePartie
	
	if len (tableau) == int (persistance.get_propriete ("config", "nombre_cases")):
		for i in tableau:
			if couleurs.is_string (i) == False:
				raise TableauInvalide ("La couleur {0} est invalide".format (i))
		code_secret = tableau
	else:
		raise TableauInvalide ("Le tableau ne contient pas le bon nombre de cases")
コード例 #21
0
ファイル: ia.py プロジェクト: Aluminium95/PyMastermind
def generer_couleurs_aleatoires (c = False):
	""" Génère un code aléatoire de couleurs, complètement !
		
		@c : [couleurs (fr) ...] | False = si on a un univers prédéfini !

		@return : list of couleurs (Français)
	"""

	sortie = [] # le tableau de sortie 

	# On récupère la liste des couleurs possibles
	if c == False:
		lst = couleurs.liste_couleurs ()
	else:
		lst = c
	
	# On récupère le nombre de cases demandées
	n = persistance.get_propriete ("config","nombre_cases")

	# On définit n couleurs au hasard ... 
	for i in range (int (n)):
		sortie.append (choice (lst))
	
	return sortie
コード例 #22
0
def gen_fsm ():
	""" Crée la FSM ... c'est toute la fonction la plus importante """
	
	# Variables de la FSM
	fichier = ""
	st = "menu-fichier"

	
	while True:

		# Là est toute la magnificience 
		# on rend la main avec l'état actuel (comme ça les gens peuvent
		# savoir où on est) 
		# mais la prochaine exécution ... demande une action à faire
		# (et comme la boucle est infinie ... on revient toujours attendre 
		# à ce point exact de la boucle :-P.
		req = (yield st) # on sauve dans une variable 
		
		if st == "menu-fichier": # Si on est dans le menu-fichier les commandes sont 
			if req == "list":
				# On affiche la liste des fichiers 
				# disponnibles 
				iconsole.afficher (st, persistance.liste_fichiers ())
			elif req == "entrer":
				# Yop, on transite vers l'état menu-variable
				# SI ET SEULEMENT SI l'utilisateur 
				# a sélectionné un fichier !!!
				if fichier != "":
					st = "menu-variable"
				else:
					iconsole.afficher (st,"Vous n'avez pas sélectionné un fichier ...")
			elif req == "help":
				# L'aide affiche la liste des commandes possibles 
				iconsole.afficher (st, "Les commandes sont : « quit », « list », « entrer », « help » et @Fichier")
			else: # C'est un nom de fichier 
				# On suppose que si ce n'est pas une commande, 
				# c'est un nom de fichier, et on change donc 
				# le fichier sélectionné
				fichier = req
				iconsole.afficher (st,"Vous avez sélectionné " + req)
				
		else: # il n'existe que deux états, celui là est donc menu-variable
			# On a forcément définit un fichier,
			# vu que l'on ne peut être arrivé à cet état 
			# QUE par une transition !
			if req == "list":
				# On affiche simplement la liste des variables disponnibles 
				iconsole.afficher (st, persistance.liste_variables (fichier))
			elif req == "up":
				# On retourne au menu fichier ... tout con 
				st = "menu-fichier"
			elif req == "ou":
				# On dit à l'utilisateur où il se trouve, c'est à dire le fichier courant 
				iconsole.afficher (st, "Le fichier courant est : "+ fichier)
			elif req == "help":
				# On affiche la liste des commandes disponnibles 
				iconsole.afficher (st, "Les commandes sont : « quit », « ou », « list », « help », « up » et @Variable")
			else: # C'est une variable 
				# On suppose que si ce n'est pas une commande c'est une variable 
				# à modifier ... Donc on demande la nouvelle valeur 
				# et on modifie ... 
				try:
					iconsole.afficher (st, "Valeur actuelle : " + str (persistance.get_propriete (fichier,req)))
				except:
					iconsole.afficher (st, "Nouvelle variable !")
				val = iconsole.demander (st,"Nouvelle valeur")
				persistance.set_propriete (fichier,req,val)
				iconsole.afficher (st,"Bien modifié !")
コード例 #23
0
ファイル: moteur.py プロジェクト: YannDesmarais/PyMastermind
#-*- coding: utf-8 -*-

# 29/03/13
#derniere maj 3/4

import persistance
import couleurs
import affichage

code_secret = False
mode = "moyen"
restant = persistance.get_propriete ("config","coups:facile")
liste_mode = ["facile","moyen","difficile"]

def get_mode ():
	return mode

def set_mode (m):
	global mode,restant
	
	if m in liste_modes:
		mode = m
		restant = persistance.get_propriete ("config","coups:"+m)
		return True
	else:
		return False

def get_restant ():
    return restant

def double_couleur (test):
コード例 #24
0
ファイル: themes.py プロジェクト: Aluminium95/PyMastermind
def actuel ():
	""" Retourne le thème actuel """
	return persistance.get_propriete ("backgrounds", "theme:courant")
コード例 #25
0
ファイル: joueur.py プロジェクト: Aluminium95/PyMastermind
def send(rep):
    """ Envoie une requête utilisateur au Mastermind
		qui va gérer la redirection et les actions 
		nécessaires
		
		@rep : str = la requête
		
		@return : str = l'état actuel 
	"""
    if rep == "help":  # Commande indépendante de l'état courant !
        afficher_aide()
    elif rep == "regles":  # Commande indépendante de l'état courant !
        afficher("Affichage des règles sur la fenêtre graphique ...")

        set_ecran("regles", 2)
    elif rep == "clear":
        iconsole.clear()
    elif rep == "scores":  # Commande indépendante de l'état courant !
        afficher("Affichage des scores sur la fenêtre graphique ...")

        set_ecran("scores", 1)

        s, n = scores.recup_score(), scores.recup_nom()

        liste = utils.bi_map(lambda a, b: (a, b), s, n)
        afficher_liste("Scores", liste)

    elif rep == "fortune":
        try:
            maximum = persistance.get_propriete("phrases", "max")
            maximum = int(maximum)
            aleatoire = randint(0, maximum - 1)
            afficher(persistance.get_propriete("phrases", str(aleatoire)))
        except persistance.CleInvalide:
            afficher("Il est impossible de récupérer la fortune ... le fichier « phrases » doit être corrompu »")
        except persistanec.FichierInvalide:
            afficher(
                "Le fichier est introuvable ... Cela implique un problème dans le CODE SOURCE ... revenez plus tard ..."
            )
        except ValueError:
            afficher("La valeur de « max » dans « phrases » est fausse et ne représente pas un nombre valide ...")
        except:
            afficher("Une erreur inconnue est survenue ... ")

    elif rep == "couleurs":
        afficher_couleurs()

    elif get_etat() == "Humain-Joue":
        humain_joue(rep)
    elif get_etat() == "Menu":
        menu(rep)
    elif get_etat() == "Menu-Partie":
        menu_partie(rep)
    elif get_etat() == "Theme":
        theme(rep)
    elif get_etat() == "Niveau":
        niveau(rep)
    elif get_etat() == "Proposer-Code":
        proposer_code(rep)
    elif get_etat() == "Definir-Code":
        definir_code(rep)
    else:
        raise ErreurFatale

    return get_etat()