couleur_rgb_devinette.py

Created by florian-allard

Created on April 18, 2021

3.47 KB

Petit jeu dont le but est de retrouver une couleur donnée en déplaçant 3 curseurs qui règlent les composantes Rouge, Verte et Bleue.
Une version simple (sans la partie jouable) est disponible ici.


from kandinsky import *
from ion import *
from time import sleep,monotonic
from random import randint

diff = 2
draw_string("Choix de la difficulté :",40,30,'orange')
draw_string("Elevée",130,60,'blue')
draw_string("Moyenne",125,85,'blue')
draw_string("Faible",130,110,'blue')
while keydown(KEY_EXE) or keydown(KEY_OK):True
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
  draw_string("[",100+5*(diff%2),35+25*diff,'blue')
  draw_string("]",110+10*10-5*(diff%2),35+25*diff,'blue')
  if keydown(KEY_DOWN) or keydown(KEY_UP):
    draw_string(" ",100+5*(diff%2),35+25*diff)
    draw_string(" ",110+10*10-5*(diff%2),35+25*diff)
    diff = (diff+keydown(KEY_DOWN)-keydown(KEY_UP)-1)%3+1
    while keydown(KEY_DOWN) or keydown(KEY_UP):True

x = 50
y = 50
r0 = g0 = b0 = 255
while 1:
  draw_string("Nouvelle partie",320//2+5,140,["white","black"][r0+g0+b0>384],(r0,g0,b0))
  draw_string("appuyer sur EXE",320//2+5,160,["white","black"][r0+g0+b0>384],(r0,g0,b0))
  while not (keydown(KEY_EXE) or keydown(KEY_OK)):True
  r = g = b = 145
  r0=8*diff*randint(0,255//(8*diff))
  g0=4*diff*randint(0,255//(4*diff))
  b0=8*diff*randint(0,255//(8*diff))
  fill_rect(320//2,0,320//2,222,(r0,g0,b0))
  draw_string("Retrouve la",320//2+25,30,["white","black"][r0+g0+b0>384],(r0,g0,b0))
  draw_string("couleur ! ",320//2+35,50,["white","black"][r0+g0+b0>384],(r0,g0,b0))

  fini = False
  t = monotonic()
  r1 = g1 = b1 = 144
  pos = 0
  chgt = True
  for i in range(3):
    draw_string(str([r1,g1,b1][i]),x+15,y+18*i,"white",["red","green","blue"][i])

  while not fini:
    if chgt or (r1,g1,b1) != (r,g,b):
      chgt = False
      for i in range(3):
        draw_string("< ",x-5,y+18*i,[(r1,g1,b1),["white","black"][r1+g1+b1>384]][pos == i],(r1,g1,b1))
        draw_string(" >",x+45,y+18*i,[(r1,g1,b1),["white","black"][r1+g1+b1>384]][pos == i],(r1,g1,b1))

    if (r1,g1,b1) != (r,g,b):
      r,g,b=r1,g1,b1
      draw_string("   ",x+15,y+18*pos,"white",["red","green","blue"][pos])
      draw_string(str([r,g,b][pos]),x+15+5*(3-len(str([r,g,b][pos]))),y+18*pos,"white",["red","green","blue"][pos])
      fill_rect(0,0,320//2,50,(r,g,b))
      fill_rect(0,50,x-5,110,(r,g,b))
      fill_rect(x+65,50,320//2-(x+65),110,(r,g,b))
      fill_rect(x-5,y+54,70,y+85-104,(r,g,b))
      fill_rect(x-5,y+103,70,7,(r,g,b))
      fill_rect(0,y+110,x-5-5*len(str(r)+str(g)+str(b)),222-(y+110),(r,g,b))
      fill_rect(x+65+5*len(str(r)+str(g)+str(b)),y+110,320//2-(x+65)-5*len(str(r)+str(g)+str(b)),222-(y+110),(r,g,b))
      fill_rect(x-5-5*len(str(r)+str(g)+str(b)),y+128,70+10*len(str(r)+str(g)+str(b)),222-(y+128),(r,g,b))
      draw_string("#"+"0"*(2-len(hex(r)[2:]))+hex(r)[2:]+"0"*(2-len(hex(g)[2:]))+hex(g)[2:]+"0"*(2-len(hex(b)[2:]))+hex(b)[2:],x-5,y+85)
      draw_string("rgb("+str(r)+","+str(g)+","+str(b)+")",x-5-5*len(str(r)+str(g)+str(b)),y+110)
    
    if pos==0:
      r1 = (r+8*diff*(keydown(KEY_RIGHT)-keydown(KEY_LEFT)))%(256+8*(diff==3))
    elif pos==1:
      g1 = (g+4*diff*(keydown(KEY_RIGHT)-keydown(KEY_LEFT)))%(256+8*(diff==3))
    else:
      b1 = (b+8*diff*(keydown(KEY_RIGHT)-keydown(KEY_LEFT)))%(256+8*(diff==3))
    
    if keydown(KEY_UP) or keydown(KEY_DOWN):
      pos = (pos-keydown(KEY_UP)+keydown(KEY_DOWN))%3
      chgt = True
      sleep(0.05)
    sleep(0.1)
    if (r,g,b) == (r0,g0,b0):
      draw_string("Gagné en",320//2+40,80,["white","black"][r0+g0+b0>384],(r0,g0,b0))
      draw_string(str(int(monotonic()-t))+" sec ! ",320//2+40,100,["white","black"][r0+g0+b0>384],(r0,g0,b0))
      fini = True