Contenu | Rechercher | Menus

Bonjour, je m'appelle Vincent, pseudo VinsS.

Ubuntero depuis Dapper et conquis par cette passionnante aventure.

Je dispose de temps libre pour contribuer aux efforts de la communauté. C'est donc avec plaisir que je rejoins l'équipe User d'Ubuntu-fr.

vins@swing.be

Bruxelles le 24/07/07

Un petit jeu en python : testcolor.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#       colortest.py
#       
#       Author Vincent Vande Vyvre <vins@swing.be>
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.


from Tkinter import *
from random import *

class Statut:
        """Etat du jeu

        renvoie l'avance du jeu, les couleurs, la solution et les points"""

        np, ne, pt, orr, orv, orb, tar, tav, tab, diff,levp, nivdif = 10, 3, 0, 0, 0, 0, 0, 0, 0, "", 100, 1
        #nombre de jeu, nombre d'essais, total des points,couleurs d'origine RVB
        #couleurs cible, couleur differente (string), niveau de jeu (increment)

class Level1:
        """Niveau de jeu 1

        évalue les couleurs aléatoires et les paramètres de jeu"""

        def new(self):
                #nouveau jeu (10>0)
                nbplay.configure(state=DISABLED)
                etat.ne = 3
                if etat.np == 10:               #si nouvelle partie
                        score.configure(text="Points : 0",fg="black")
			levbut1.configure(state=DISABLED)
			levbut2.configure(state=DISABLED)
                essai.configure(text="Essais : 3")
                etat.diff = ""
                #creation des 3 valeurs aleatoires
                rr = randrange(0, 256)
                etat.orr, etat.tar = rr, rr     #rouge  
                rv = randrange(0, 256)
                etat.orv, etat.tav = rv, rv     #vert
                rb = randrange(0, 256)
                etat.orb, etat.tab = rb, rb     #bleu
                origcolhex = self.inttohex(rr, rv, rb)

                #designation aleatoire de la couleur modifiée
                while etat.diff == "":
                        coldif, lev = (randrange(6)), etat.levp         #choix d'une des 3 couleurs                         
                        if coldif == 0:
                                if rr > lev:
                                        rr -= lev
                                        etat.diff = "-rouge"            #necessaire pour afficher la solution
                                        etat.tar = rr
                        elif coldif == 1:
                                if rr < 255-lev:
                                        rr += lev
                                        etat.diff = "+rouge"
                                        etat.tar = rr
                        elif coldif == 2:
                                if rv > lev:
                                        rv -= lev
                                        etat.diff = "-vert"
                                        etat.tav = rv
                        elif coldif == 3:
                                if rv < 255-lev:
                                        rv += lev
                                        etat.diff = "+vert"
                                        etat.tav = rv
                        elif coldif == 4:
                                if rb > lev:
                                        rb -= lev
                                        etat.diff = "-bleu"
                                        etat.tab = rb
                        else:
                                if rb < 255-lev:
                                        rb += lev
                                        etat.diff = "+bleu"
                                        etat.tab = rb
                targcolhex = self.inttohex(rr, rv, rb)                       
                etat.np -= 1
                nbp = "Jouer : "+str(etat.np)
                #affichage initial
                can1.itemconfigure(orig,fill=origcolhex)
                can1.itemconfigure(testa,fill=targcolhex)
                can1.itemconfigure(testb,fill=targcolhex)
                can1.itemconfigure(testc,fill=targcolhex)
                can1.itemconfigure(target,fill=targcolhex)
                nbplay.configure(text=nbp)
                soluce.configure(text="Solution :")

        def inttohex(self, red, green, blue):
                #conversion au format str "#RRVVBB"
                rhex = str(hex(red))
                rhex = rhex[2:]
                if len(rhex) == 1:
                        rhex = "0"+rhex
                ghex = str(hex(green))  
                ghex = ghex[2:]
                if len(ghex) == 1:
                        ghex = "0"+ghex
                bhex = str(hex(blue))
                bhex = bhex[2:]
                if len(bhex) == 1:
                        bhex = "0"+bhex
                colorhex = "#"+rhex+ghex+bhex
                return colorhex

class Level2:
        """Niveau de jeu 2

        évalue les couleurs aléatoires et les paramètres de jeu"""

        def new(self):
                #nouveau jeu (10>0)
                nbplay.configure(state=DISABLED)
                etat.ne = 3
                if etat.np == 10:               #si nouvelle partie
                        score.configure(text="Points : 0",fg="black")
			levbut1.configure(state=DISABLED)
			levbut2.configure(state=DISABLED)
                essai.configure(text="Essais : 3")
                etat.diff = ""
                #creation des 3 valeurs aleatoires
                rr = randrange(0, 65536)
                etat.orr, etat.tar = rr, rr     #rouge  
                rv = randrange(0, 65536)
                etat.orv, etat.tav = rv, rv     #vert
                rb = randrange(0, 65536)
                etat.orb, etat.tab = rb, rb     #bleu
                origcolhex = self.inttohex(rr, rv, rb)
                #print origcolhex

                #designation aleatoire de la couleur modifiée
                while etat.diff == "":
                        coldif, lev = (randrange(6)), etat.levp       	#choix d'une des 3 couleurs                         
                        if coldif == 0:
                                if rr > lev:
                                        rr -= lev
                                        etat.diff = "-rouge"            #necessaire pour afficher la solution
                                        etat.tar = rr
                        elif coldif == 1:
                                if rr < 65535-lev:
                                        rr += lev
                                        etat.diff = "+rouge"
                                        etat.tar = rr
                        elif coldif == 2:
                                if rv > lev:
                                        rv -= lev
                                        etat.diff = "-vert"
                                        etat.tav = rv
                        elif coldif == 3:
                                if rv < 65535-lev:
                                        rv += lev
                                        etat.diff = "+vert"
                                        etat.tav = rv
                        elif coldif == 4:
                                if rb > lev:
                                        rb -= lev
                                        etat.diff = "-bleu"
                                        etat.tab = rb
                        else:
                                if rb < 65535-lev:
                                        rb += lev
                                        etat.diff = "+bleu"
                                        etat.tab = rb
                targcolhex = self.inttohex(rr, rv, rb)                       
                etat.np -= 1
                nbp = "Jouer : "+str(etat.np)
                #print targcolhex, etat.diff
                #affichage initial
                can1.itemconfigure(orig,fill=origcolhex)
                can1.itemconfigure(testa,fill=targcolhex)
                can1.itemconfigure(testb,fill=targcolhex)
                can1.itemconfigure(testc,fill=targcolhex)
                can1.itemconfigure(target,fill=targcolhex)
                nbplay.configure(text=nbp)
                soluce.configure(text="Solution :")

        def inttohex(self, red, green, blue):
                #conversion au format str "#RRRRVVVVBBBB"
                rhex = str(hex(red))
                rhex = rhex[2:]
                while len(rhex) < 4:
                        rhex = "0"+rhex
                ghex = str(hex(green))  
                ghex = ghex[2:]
                while len(ghex) < 4:
                        ghex = "0"+ghex
                bhex = str(hex(blue))
                bhex = bhex[2:]
                while len(bhex) < 4:
                        bhex = "0"+bhex
                colorhex = "#"+rhex+ghex+bhex
                return colorhex

def new():
        if etat.nivdif == 1:
                easy.new()
        else:
                hard.new()
        
def colorise(targcolhex):
        #affichage des essais de couleur
        essai.configure(text="Essai(s) :"+str(etat.ne))
        if etat.ne == 2:
                can1.itemconfigure(testa,fill=targcolhex)
        elif etat.ne == 1:
                can1.itemconfigure(testb,fill=targcolhex)
        else :
                can1.itemconfigure(testc,fill=targcolhex)
                loosefonc()
                                                                                                                                                                                                                                                                                            
def redp1():
        #rouge+
        if etat.nivdif == 2:
                redp2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orr > 255-lev:
                                newcol = 255
                        else:
                                newcol = etat.orr + lev
                        if newcol == etat.tar:
                                winfonc()
                        else:
                                targcolhex = easy.inttohex(newcol, etat.orv, etat.orb)               
                                colorise(targcolhex)

def redp2():
        if etat.ne != 0:
                lev = etat.levp
                etat.ne -= 1
                if etat.orr > 65535-lev:
                        newcol = 65535
                else:
                        newcol = etat.orr + lev
                if newcol == etat.tar:
                        winfonc()
                else:
                        targcolhex = hard.inttohex(newcol, etat.orv, etat.orb)               
                        colorise(targcolhex)
                
def greenp1():
        #vert+
        if etat.nivdif == 2:
                greenp2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orv > 255-lev:
                                newcol = 255
                        else:
                                newcol = etat.orv + lev
                        if newcol == etat.tav:
                         winfonc()
                        else:
                                targcolhex = easy.inttohex(etat.tar, newcol, etat.tab)               
                                colorise(targcolhex)

def greenp2():
        if etat.ne != 0:
                lev = etat.levp
                etat.ne -= 1
                if etat.orv > 65535-lev:
                        newcol = 65535
                else:
                        newcol = etat.orv + lev
                if newcol == etat.tav:
                        winfonc()
                else:
                        targcolhex = hard.inttohex(etat.orr, newcol, etat.orb)               
                        colorise(targcolhex)

def bluep1():
        #bleu+
        if etat.nivdif == 2:
                bluep2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orb > 255-lev:
                         newcol = 255
                        else:
                                newcol = etat.orb + lev
                        if newcol == etat.tab:
                                winfonc()
                        else:
                                targcolhex = easy.inttohex(etat.tar, etat.tav, newcol)               
                                colorise(targcolhex)

def bluep2():
        if etat.ne != 0:
                lev = etat.levp
                etat.ne -= 1
                if etat.orb > 65535-lev:
                        newcol = 65535
                else:
                        newcol = etat.orb + lev
                if newcol == etat.tab:
                        winfonc()
                else:
                        targcolhex = hard.inttohex(etat.orr, etat.orv, newcol)               
                        colorise(targcolhex)

def redm1():
        #rouge-
        if etat.nivdif == 2:
                redm2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orr > lev-1:
                                newcol = etat.orr - lev
                        else:
                                newcol = 0
                        if newcol == etat.tar:
                                winfonc()
                        else:
                                targcolhex = easy.inttohex(newcol, etat.tav, etat.tab)               
                                colorise(targcolhex)

def redm2():
        if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orr > lev-1:
                                newcol = etat.orr - lev
                        else:
                                newcol = 0
                        if newcol == etat.tar:
                                winfonc()
                        else:
                                targcolhex = hard.inttohex(newcol, etat.tav, etat.tab)               
                                colorise(targcolhex)

def greenm1():
        #vert-
        if etat.nivdif == 2:
                greenm2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orv > lev-1:
                                newcol = etat.orv - lev
                        else:
                                newcol = 0
                        if newcol == etat.tav:
                                winfonc()
                        else:
                                targcolhex = easy.inttohex(etat.tar, newcol, etat.tab)               
                                colorise(targcolhex)

def greenm2():
        if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orv > lev-1:
                                newcol = etat.orv - lev
                        else:
                                newcol = 0
                        if newcol == etat.tav:
                                winfonc()
                        else:
                                targcolhex = hard.inttohex(etat.tav, newcol, etat.tab)               
                                colorise(targcolhex)

def bluem1():
        #bleu-
        if etat.nivdif == 2:
                bluem2()
        else :
                if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orb > lev-1:
                                newcol = etat.orb - lev
                        else:
                                newcol = 0
                        if newcol == etat.tab:
                                winfonc()
                        else:
                                targcolhex = easy.inttohex(etat.tar, etat.tav, newcol)               
                                colorise(targcolhex)

def bluem2():
        if etat.ne != 0:
                        lev = etat.levp
                        etat.ne -= 1
                        if etat.orb > lev-1:
                                newcol = etat.orb - lev
                        else:
                                newcol = 0
                        if newcol == etat.tab:
                                winfonc()
                        else:
                                targcolhex = hard.inttohex(etat.tar, etat.tav, newcol)               
                                colorise(targcolhex)

def winfonc():
        #bonne reponse
        essai.configure(text = "Essai : 0")
        if etat.ne == 2:
                etat.pt += 3
        elif etat.ne == 1:
                etat.pt += 2
        else:
                etat.pt += 1
        etat.ne = 0
        soluce.configure(text=etat.diff+" Exact !")
        score.configure(text="Points : "+str(etat.pt))
        nbplay.configure(state=ACTIVE)
        if etat.np == 0:
                score.configure(text="Total :"+str(etat.pt),fg="blue")
                etat.np, etat.pt, etat.ne = 10, 0, 3
                nbplay.configure(text="Jouer : 10")
		levbut1.configure(state=NORMAL)
		levbut2.configure(state=NORMAL)

def loosefonc():
        #3 mauvaises reponses
        essai.configure(text = "Essai : 0")
        soluce.configure(text="Solution : "+etat.diff)
        nbplay.configure(state=ACTIVE)
        if etat.np == 0:
                score.configure(text="Total :"+str(etat.pt),fg="blue")
                etat.np, etat.pt, etat.ne = 10, 0, 3
                nbplay.configure(text="Jouer : 10")
		levbut1.configure(state=NORMAL)
		levbut2.configure(state=NORMAL)

def easylev():
        if etat.np==10 and etat.ne==3:
                #print "niveau 1"
                etat.levp = 100		#une valeur + petite augmente la difficulé
                etat.nivdif = 1

def hightlev():
        if etat.np==10 and etat.ne==3:
                #print "niveau 2"
                etat.levp = 6000	#une valeur + petite augmente la difficulé
                etat.nivdif = 2

def aide ():
	try:
 		fenhelp.destroy()		#ne semble pas être fonctionnel
   	except:
             	pass
	fenhelp = Tk()
	fenhelp.title("Aide - Colortest")
 	message1 = Label(fenhelp, text='Instructions de jeu:', font='arial 16')
    	message1.pack()
	message1bis = Label(fenhelp, text="Le but du jeu consiste à recréer la couleur cible en\n partant de la couleur d'origine et en lui appliquant une\n des six modifications données par les six boutons colorés.\n\nUne seule modification, ajout ou retrait rouge, vert ou bleu\n permet d'aboutir à la couleur cible.\n\nLe niveau 2 présente deux couleurs fort proches et,\n donc, un niveau de difficulté supérieur.")
	message1bis.pack()
     	bouton_quit = Button(fenhelp, text= 'Quitter', relief= GROOVE, command=fenhelp.destroy)
   	bouton_quit.pack(side='bottom', pady=5)
        
### Initialisation de la fenêtre principale ### 
fen1 = Tk()
fen1.title("Colortest")

can1 = Canvas(fen1,bg ='white',height =260,width =430)
can1.grid(row =0,column =0,rowspan =10, columnspan =8)
can1.create_text(120,10,text="COULEUR D'ORIGINE")
can1.create_text(300,20,text="COULEUR CIBLE")
Button(fen1, text ='+',bg="red",relief=GROOVE,width=3,command =redp1).grid(row =11,column =2)
Button(fen1, text ='+',bg="green",relief=GROOVE,width=3,command =greenp1).grid(row =12,column =2)
Button(fen1, text ='+',bg="blue",relief=GROOVE,width=3,command =bluep1).grid(row =13,column =2)
Button(fen1, text ='-',bg="red",relief=GROOVE,width=3,command =redm1).grid(row =11,column =1)
Button(fen1, text ='-',bg="green",relief=GROOVE,width=3,command =greenm1).grid(row =12,column =1)
Button(fen1, text ='-',bg="blue",relief=GROOVE,width=3,command =bluem1).grid(row =13,column =1)
orig = can1.create_rectangle(20,20,220,220,fill ='white')               #couleur d'origine
testa = can1.create_rectangle(210,40,240,240,width=0,fill='white')      #couleur du premier essai
testb = can1.create_rectangle(240,40,270,240,width=0,fill='white')      #deuxieme essai
testc = can1.create_rectangle(270,40,300,240,width=0,fill='white')      #troisieme essai
target = can1.create_rectangle(300,40,410,240,width=0,fill='white')     #couleur cible
essai = Label(text ="Essai(s) :3")
essai.grid(row=11,column=3,columnspan=2,sticky=W)
score = Label(text ="Point(s) :0")
score.grid(row=12,column=3,columnspan=2,sticky=W)
soluce = Label(text ="Solution :")
soluce.grid(row=13,column=3,columnspan=2,sticky=W)
nbplay = Button(fen1, text ='Jouer : 10',relief=GROOVE,command =new)
nbplay.grid(row =11, column =0,)
butvar = IntVar()							#identification des radio-boutons
levbut1 = Radiobutton(fen1,text="Niveau 1",variable=butvar,value=0,command=easylev)
levbut2 = Radiobutton(fen1,text="niveau 2",variable=butvar,value=1,command=hightlev)
levbut1.grid(row=12,column=0)
levbut2.grid(row=13,column=0)
Button(fen1,text="Aide",relief=GROOVE,width=6,command=aide).grid(row=12,column=7)
Button(fen1, text ='Quitter',relief=GROOVE,width=6,command=quit).grid(row =13,column=7)

etat = Statut()
easy = Level1()
hard = Level2()
levbut1.invoke()							#niveau 1

fen1.mainloop()

utilisateurs/vinss.txt · Dernière modification: Le 18/02/2009, 05:33 par VinsS
Le contenu de ce wiki est sous licence : CC BY-SA v3.0