memory.py

Created by schraf

Created on September 22, 2022

2.12 KB

Les dessins viennent de ce site / Explications pour créer vos propres dessins

Derrière les 20 touches inférieures du clavier de la NUMWORKS ( de “0” à “)” ) se cachent des motifs (5 différents avec 2 couleurs possibles). A vous de trouver les paires !

Le programme ne fonctionne que sur votre machine, pas avec le simulateur.

Quelques explications

# toutes les touches du bas du clavier
# codes 30 à 52 sauf les valeurs 35,41 et 47
clav=[v for v in range(30,53) if v not in [35,41,47]]  
# association aléatoire avec les figures
# Au lieu de mélanger les figures+couleurs, on mélange les touches
jeu=sorted(list(clav),key=lambda x:random())
trouve=[]
score=0
tt.reset()    # efface écran
sleep(.5)

while len(trouve) < 10:
  # choix figure gauche à partir touche clavier
  t1=jeu.index(key(clav))
  tt.reset()
  # On recherche la valeur et couleur de cette touche
  v1,c1 = t1 // 4, t1 % 2
  lettre(40,20,az[v1],2,c1)    # Affichage figure
  t2=jeu.index(key(clav))     # Idem avec figure de droite
  score+=1
  v2,c2 = t2 // 4, t2 % 2
  lettre(170,20,az[v2],2,c2)
  # Si 2 touches différentes mais même motif+couleur et pas déjà trouvé
  if t1 != t2 and (v1,c1) == (v2,c2) and (v1,c1) not in trouve:
    trouve.append((v1,c1))      # Ajout de la paire trouvée
    for i,(v,c) in enumerate(trouve):    # Affichage des cartes trouvées
      lettre(10+30*i,180,az[v],.5,c)

tt.reset()      # Affichage du score
s=max(1,20-score) 
for i in range(10):
 lettre(20 + 55 * (i % 5), 60 + 60 * (i // 5), az[2],1,i<s)


import turtle
from random import randint, random
from time import sleep
from ion import *

tt=turtle

az=['@Vk?SeaIkOuT]jWl@Ti?FhJpSo@Vm?al\\yTq@W_?R^GVMQSL[U]V@h^?j`vfqklpch`e@fM?eFmFlJ@nP?vOoEkL@jR?kShUhS', 
    '@]u?\\o^W`R@cS?dVeZaY^YaX\\WWVWRZQQJYE^H`DjEkJnPhScO', 
    '@SV?SSZL_MeNmXk^id[gWcR^SXSW@lX?lXuXuX@l`?l`sfsf@ce?ceetet@Wd?WdWqWq@Ta?QaFfDh@QW?QWFWFW@SR?SRNHOF@\\L?\\L]F[E@eO?eOkIkI@Y\\?`dj^eX@\\R?\\R_V_V@WU?XUYUYU@^Q?`QaQ`P', 
    '@]K?KJIhZgdgh[jYkShJ_K@SN?SNUEXDYD[H[J@_J?_JcEeFfEgKgM@W^?W^^^^^^^\\cZdXcW^W^@TT?TUUUVT@bU?bUdUdT@Tg?RoVs[sesgide@Vs?VtUwUw@[t?[u[w[w@`s?`tauav@cr?dsdudu@fi?ginjnk', 
    '@]n?^kWZWUWPYE`EgFj\\ibhhcqar`sXuUtRtNrOpPlZp]o@`O?bObPaQ@gN?jNlNmNmNjRhSlSoTpTmWlXiY']

def key(t):
 while True:
  for (i, k) in enumerate(t):
   if keydown(k): 
    while keydown(k): continue
    return k

def move(x,y):tt.goto(x-160,110-y)

def coord(a,b,c,d,t):
 return a*(1-t)**3+3*b*t*(1-t)**2+3*c*t*t*(1-t)+d*t**3

def bezier(x,y,l,cc):
 tt.pendown()
 t=0
 for i in range(11):
  u=coord(l[0],l[2],l[4],l[6],t)
  v=coord(l[1],l[3],l[5],l[7],t)
  move(x+cc*u,y+cc*v)
  t+=.1

def f(l):return [ord(c) - 65 for c in l]  

def lettre(x,y,svg,cc,c):
 tt.pensize(int(2*cc))
 tt.hideturtle()
 tt.speed(0)
 tt.color((255,0,0) if c else (0,0,255)) 
 i = 0
 while i<len(svg):
  if svg[i]=="@":
    l=[svg[i+1],svg[i+2]]
    tt.penup()
    move(x+cc*f(l)[0],y+cc*f(l)[1])
    i+=3
  elif svg[i]=="?":i+=1
  else:  
    for j in range(6):l.append(svg[i+j])
    bezier(x,y,f(l),cc)
    l=[svg[i+4],svg[i+5]]
    i+=6

clav=[v for v in range(30,53) if v not in [35,41,47]]
jeu=sorted(list(clav),key=lambda x:random())
trouve=[]
score=0
tt.reset()
sleep(.5)

while len(trouve) < 10:
  t1=jeu.index(key(clav))
  tt.reset()
  v1,c1 = t1 // 4, t1 % 2
  lettre(40,20,az[v1],2,c1)
  t2=jeu.index(key(clav))
  score+=1
  v2,c2 = t2 // 4, t2 % 2
  lettre(170,20,az[v2],2,c2)
  if t1 != t2 and (v1,c1) == (v2,c2) and (v1,c1) not in trouve:
    trouve.append((v1,c1))
    for i,(v,c) in enumerate(trouve):
      lettre(10+30*i,180,az[v],.5,c)

tt.reset()
s=max(1,20-score)
for i in range(10):
 lettre(20 + 55 * (i % 5), 60 + 60 * (i // 5), az[2],1,i<s)