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()