Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Dernière révision Les deux révisions suivantes
utilisateurs:vinss [Le 24/07/2007, 13:33]
VinsS créée
utilisateurs:vinss [Le 26/11/2008, 06:21]
VinsS
Ligne 9: Ligne 9:
  
 Bruxelles le 24/07/07 Bruxelles le 24/07/07
 +
 +
 +Script python testcolor.py
 +
 +<​code>​
 +#! /​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()
 +</​code>​
  
  
  • utilisateurs/vinss.txt
  • Dernière modification: Le 18/02/2009, 05:33
  • par VinsS