jeumemoire.py

Created by florian-allard

Created on July 30, 2024

14 KB


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

Palette={'APN':("w",(204,204,204),(51,102,102),(153,153,255)), 'Bat':("w",(153,153,153),"k",(51,51,51)), 'Champi':("w",(204,153,153),(255,153,102),(102,102,102)), 'Cube3D':("w",(153,153,204),(51,102,255),"k"), 'Fleur':("w",(102,102,102),(204,153,153),(204,102,102)), 'Gameboy':("w","k",(153,153,153),(102,153,255)), 'Herisson':("w",(153,153,153),(51,51,51),"k"), 'Horloge':("w",(82,84,82),(148,149,148),"k"), 'Manette':("w","b",(0,153,153)), 'Oeuf':("w","k",(156,0,255),(0,254,255)), 'Sacoche':("w",(153,153,153),(0,51,0),(102,102,102)), 'Telescope':("w",(153,153,204),(102,102,153),(153,153,255)), 'Tulipe':("w",(204,153,153),(204,102,102),(102,102,102)), 'Bat2':("w",(153,153,153),"k","r"), 'Bus':("w",(153,153,153),"k",(255,153,0)), 'Coeur':("w",(246,185,197),(230,133,139),(230,105,115)), 'Feuille':("w",(204,204,153),(51,102,51),(102,153,102)), 'Fusee':("w",(153,153,204),(102,102,102),(153,153,255)), 'Happy':("w",(102,102,51),(153,153,51),(255,204,0)), 'Hibou':("w",(51,51,51),(153,153,153),"k"), 'Loupe':("w",(153,153,153),(102,102,102),"k"), 'Parapluie':("w",(204,153,153),(153,102,102),(204,102,51)), 'Sad':("w",(129,130,91),(109,55,52),(247,235,0)), 'Truelle':("w","k",(153,51,0),(153,153,153))}

Image={'APN': '###############################################$MML#######%H8=#####83)##%3###$MC,##$C###$DC<##$G###=MMK###MMMGL883###(88KG87##8####;HML8Bb`888;MC=M`#BMMMKHML:4b6X88;G8722ZW_##;G##?_#@?##;G##_W#2/##;G##_W#20##;G##_W#2/##;G##?_#@?##;G##22Z__##;H88:6b6X88;MMMM`#BMMMKH888Bb`888;G####8####;L888888888K=MMMMMMMMMG############################################', 'Bat': "######################################################################7#7#####)K#\\$O#M3##><#]MO$JG##O13\\8_)S[#$C&PO#\\^#,#&S#=I%=G#2#&R######&^#&QG#####=^###[#####O####-3###)C####*K###N3#####.##&C#####?)P$]43####;&a9b&S####;#$L#&S####;0#K)&S####'2#_)$3#####2##)#######2##)#########_$#########_##########_##########_######################################", 'Champi': "###########################################################=MG#######)H(=3######L#2TK#####%C#`S-#####-##BS%C####,BS*3$C####K`W###K####GW_#2S;####CbW#@_+####C*3#@_+####K###2SK####-H##(=C####$MMMML#######'#3########?#W#######7_#_7######MW#AK#####$MW#=H3####)LS#;M3###)MNS$KMM3##%L&3)G%M3###G&#%3#,#########################################################", 'Cube3D': '####$L#########=9G#######)H$=3#####$L3#(L#####=:W#B9G###)H#2:S$=3#$LB3#_#*XL#)7#`2:T_#93)`#&W#B#$a3)6W`2:T_B)3)323#_#*S)3)3/`2:T_S)3)3/&W#B#S)3)3/&2:V#S)3)`/&#_&#Ta3)6_&#_&#b)3)326#_&*S)3)3/b#_&_S)3)3/&W_B#S)3)`/&2bV#Ta3)6_&#_&#b)3)326#_&*S)3)3/b#_&_S)3)3/&W_B#S)3)7/&2bV#S93$L?&#_&#XL##)P&#_&$]3###=:#_&9G####$N3_*L######)H`=3#######=aG########$L#####', 'Fleur': '####$9#########$83########$E7########$C+########$C%C#######,#%3#######(##3#######7.#3####%9%;1%3####H8<3O$3###$;#H3[(8;-7(##(3_HM887I#+$>bW##CG9#1#a#Q###G,;.E[M.b_#7#H%bT8F]M#;#$C.DE5S#%3#%;&D%5]#,C##9.D<6X89###,8S9.L8;###,9a#R%3####9#2bb#;###%3#aP&C;###$C.[(%S;###$CQ#H%S;###$C#%8%S7###$C#H<##G###$3+K$C#(###%3G#%;#,C###9;##HMHC###H3##$8=####(########', 'Gameboy': "#$8888888###,MMMMMMLC##,######$C##,2bbbbbTC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,/#####TC##,2bbbbbTC##,######$C##,######$C##,#2S###$C##,#/S##b$C##,&_b##V$C##,&#&##b$C##,&_b###$C##,#/S&_#$C##,#2S&/#$C##,###&_#$C##,######$C##,######$C##,##3'$#$C##,#$37(#$C##,#$#3'#$C##,######(###,MMMMMM7###$8888883##", 'Herisson': "###########################################################$M8K#######%bab3#####)bbbbD#####Bbbbb^3###(RbbbbbC###RbbbbbbW##%bbbbbbbW##*bbbbbbbW##)bbbbbbbS##BbbbbbJbC#$bbbbbb58G#%bbbbbbC,=3%bbbbb`#(%C%bbbbbW##)3.bbbbbC##<#.bbbba##$G#(bbb]7#$)##$b\\K##')<##$a3G##;&`##$a$bMMK%a###9%b3#,%a###)NbC#)Na#########################################################", 'Horloge': "##########################7RW#######R[-B[#####&W###B#####2##7#&[####W$37(#A###&3##K##*###2&C###.&S##O%[###Q#[##W#C#K#+#?##S3##7##'/#%SS##7##/0#&3###7###*#&C###7###.#&D;##_##H.#&D;#$_##H.#&C##.3###.#&3##Q####*#$S3#K###'0##S3#####'/##W#C###[#?##O%[###Q#[##+&C###.&S######K##*####W$37(#A####R%#7#&[####&W###B######RYMB[#######BbW##########################", 'Manette': '##############################################################################(88888883##888888887#$3#######(#(3#######(3(#######K$37#K#####K#77#K#######77-MC###K#K77-MC###K#K77#K#######77#K#M%K#K#77#######K#77#########77###887###77##(8883##77##8##$7##77#$7###8##7(#$3###(#$3(3(3###(3(3$88####$88##87#####87#############################################', 'Oeuf': '################################################$8#########9M7#######$=MH#######(MMH3######9MLB7######=L:b7#####$88bX8#####$Bb`9L#####(bb8ML3####*`8=MH3####(8MMM:3####)MMMLB7####9MMM:b7####=MM8bX7####9L8B`9G####88bb8MG####:bbX=MG####:bX9MM7####(89MML3####(MMMM83####$MMMH@3####$=M8BX######88Bb7######(BbX3#######887#####################################', 'Sacoche': '################################################(83#######$MML#######&S#2#######&S#2####$MMVMMN1ML#%X83887(8A#%3#######)#%3#######)#%3#######)#%3#######)#&S#######2#$NbbbbbbbL##2aQRbaabW#$#$JS#%9#$#%3$MS#%M#)#%3#8##$8#)#%3#######)#%3#######)#%3#######)#%3#######)#%3#######)#%3#######)#&MMMMMMMMN##888888887#############################################', 'Telescope': '##################$7#########)M3########,%R#######$L$JS#####$ML$C_####$MG)#G_###$MG#)#;?###%G##%3;?##$=###%C,_##-M3##$C-S23L%C###G)#bYK$D`#(K-#W`;#RbXM=L#_?,$_#a3$3#_0M>Vb2####029JV:*####22#&:&:####*_#&Vb2#####3#$S_0########`$_#######$Rb\\#######%59)#######))953######,-9DC######;=9GG######GI9;;#####$EE9-,#####%959)9#####$M$L%L######7#7#7##############', 'Tulipe': "#####<#########$M3########)4G######&`<#<BS####&b_#2bS####&#B#`#S####&#&VS#S####&##b#######&##@##S####&##/##S####&3#/#$S####&S#/#&S####$S#/#&3#####_#/#2######'#/#_#######W/&S#######bbb#####$7#$b3#(###%MG#/#)M###%4=3/$L4###%3$G/)3$###$C#</<#%####G#)@G#)####;#%QC#,####,#$M3#;####)3#M#$G####$K#<#-3#####=7<(L######$MMM3#######$<3#########/##########/#####", 'Bat2': '####################################(3########9ML#######)MMG#######=MMC######$MMM3######)MMM3######=MMM3$######)MM3(###3##$MMG=H3$G###MMLQM#$L###=MMM]#%M###=MMML#)M3##=MMML4MMC##%MMMMMMMG###MMMMMMMG###=MMMMMMG###=MMMMMMK###=MMMMMMK###MMMMMMMK###9MMMMH=K###$ML#(#$G###$HG####7###$#########################################################################', 'Bus': '########################################################################################$MMMMMMML##%#%#%#%3$C#%#%#%#$3#7#%#%#%#$3#+#%#%#%#$3#+#%#%#%3%3#+#%MMMMMM3#+#%bbbbbbL8;#%bbbbbbX8;#%bbbbbbbb[#%`:`88B`:=#%Y=`88:\\<I#%[%Bbbb;)<#%K%MMMMG%K##-9####,<###$K####%G##########################################################################################', 'Coeur': '###############################################################################$RG#9L#####.b`$RMC####Rbb:baG###$bbbNbaK###$bbbbbbP###$bbbbbbP###$bbbbbbL###$bbbbbbL####Rbbbbb[####BbbbbbW####.bbbbbC####*bbbbb3####%bbbb`######Rbbb[######>bbbC######)bba#######$Rb[########.bC########$\\##########3############################################################', 'Feuille': '################################################$O#########1\\#########Qa########&QMS#######2bPO#######>^XL#######QbZa3#####&JaaA3#####*`QN^C#####2^^RRG#####-Aaaa_#####-ZIN^[#####2PbRPK#####2^AQZO#####)Aa^^W#####$RLQNS######=ZJ]3######&US_########%C##########O##########[##########[##########-##########1##########%C#####################################', 'Fusee': '#######)MM3######)M88K#####$M<##;#####)G)##;#####<#%3#;####$G#$G#;####)3##<#;##$b\\#(#)3;##2XK$b_$LK##_$G&S2#)G#&S%32#&#$C#2#)#2#&3%C#_#<#2#&3)3&`#K#*32#-#$baC#&b`#<###)G##BS$G###-<####)3##$L)3###<###=M4G##%G###L$G<##=S###=#<)3)HS###MC)4GM$S##$GK$G=G&S##)3-#<M#&3##)#%C-J#2###,##K-&#_###,##-<&6S###;##-K&b####;#$LG&_####K$=C#$S####LMH########MG#########', 'Happy': '####################################$888#######88887#####$8=MH8#####(9bba83####8Rbbb\\7###$9bbbba8###(>bbbbbH3##(B]NbMRX3##8RH9a8>\\7##8bH9a8>`7##9b]NbMRa7##9bbbbbba7##9bbbbbba7##9bbbbbba7##9bbbbbba7##9bbbbbba7##8b9bba:`7##8R8Rb\\:\\7##(BH8L8>X3##(>`888bH3##$9bL8Na8####8Rbbb\\7####(9bba83####$8=MH8######88887######$888#####################################', 'Hibou': '#$C#####,###&S#####2###&W#H8;#B###&B:`8b:Z###&EA##%Y.###&C#####.###&JC###.>###&D`7#8`.###&CBBNZW.###.E[$`#Q&C##.$5;_I(&C##.&FW7B.&C##.&4[_P*&C##.$S%a#0&C##.#@J:<W&C##.#*b&b3&C##b##&b##&_##b[##_##R_##]BC###.YO##[$W###@#O##[#P##$[#O##7#.C#.C#7##?#$6&(##W##O#%S#1##[##1#%[#Q#%S##(##[7O#$3##.C#7#7#.C##$S#?#W#0####W#O#[#?####RCQ%[.[####$`@LX`######Hbb`;###', 'Loupe': '##############$7########$RbG#######Bbbb3#####%bL9b[#####.`##*a#####BC##$b3####b####BC###$`####*W###%[####&[###&[####%_###*W<###%_###*WQ###$`###*WR###%_###&[B3##%[###%_2\\##*[###$`*bW#.W####b4R[#BC####BW)G$b3####.`##>b3####%b]=bbW#####>bba:`#####$RaG$b3######3##BW#########*`#########$b3#########BW#########*W#########$3##################################', 'Parapluie': '################;#########(L3#######*bbb3#####$`##$`#####23###*S####W#####?###&3#####*###0######$S##?#######W##W#######?#$S#######0#&3#######*#&BW*`$b3BZ#*WB`*b4bWB3*#&S#_#2#&3*#$S#?#*#$3$##3#K#$##3#####K##########K##########K##########K##########K##########K##########K##########K##########K##########K##########K-#########<<#########-K###############', 'Sad': '###########################7########$=MH#######MMMMK#####(M:b9L3####=Jbbb=G###$MbbbbaL###$NbbbbbL###-Rbbbbb]C##-BbbbbbYC##=bbbbbbaG##<bXbb`B`G##Lb]Rb]R`K##Nb]Rb]RbK#$NbXbb`BbL#$NbbbbbbbL##NbbbbbbbK##Lbbbbbb`K##<bbYMBb`G##=bbMMNbaG##-BaL`MbYC##-R`BbXb=C##$NbbbbbL###$MbbbbYL####=Jbbb=G####(M:b9L3#####MMMMK######$=MH#########7###########################', 'Truelle': '####$8#########(L3########)M3########YM?########YM?########YM?########YM?########YM?########YM?########YM?########(83########0`S########$$#########$$#########$$#########$$#########$$#######X88$88?####Z#0$S&?####(#$$#$3####$S$$#0#####&3$8#*######7#_#7######*##&3######0##$S######$3#(########?#W########X8?########($3########$$#########&:##########7#####'}

Images=sorted(Image.keys())

def IMG(carte,x,y):
    for j in range(32):
        for i in range(0,32//3+1):
            clr=ord(Image[carte][(32//3+1)*j+i])-35
            clrs=((clr//(4**2))%4,(clr//4)%4,clr%4)
            for k in range(3):
                if 3*i+k<32:
                    set_pixel(x+3*i+k,y+j,Palette[carte][clrs[k]])

def cadre(x,y,clr):
    for k in (0,1):
        fill_rect(x-1,y-1+33*k,34,1,clr)
        fill_rect(x-1+33*k,y-1,1,34,clr)

record=999999

#début du jeu
IMG("Tulipe",10,10)
IMG("Fleur",278,10)
IMG("Telescope",10,180)
IMG("Fusee",278,180)
draw_string("Jeu de mémoire",90,20,"purple")
draw_string("Choix du mode",95,60,"b")
draw_string("lettres       images",60,85,"b")
mode=1
chg=1
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
    if chg:
        for k in (0,1):
            draw_string("[]"[k],40+100*k+140*mode-10*k*mode,85,"w")
        mode=1-mode
        for k in (0,1):
            draw_string("[]"[k],40+100*k+140*mode-10*k*mode,85,"r")
    sleep(0.2)
    chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
while keydown(KEY_EXE) or keydown(KEY_OK):1

draw_string("Choix de la difficulté",50,130,"b")
draw_string("facile        moyen",65,155,"b")
diff=1
chg=1
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
    if chg:
        for k in (0,1):
            draw_string("[]"[k],40+100*k+140*diff-10*k*diff,155,"w")
        diff=1-diff
        for k in (0,1):
            draw_string("[]"[k],40+100*k+140*diff-10*k*diff,155,"r")
    sleep(0.2)
    chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)
while keydown(KEY_EXE) or keydown(KEY_OK):1

N=12+12*diff
while 1:
    fill_rect(0,0,320,240,"w")
    K=[]
    for n in range(N):#65,65+25):
        for i in range(2):
            K.append(n)#chr(n))

    L=[]
    for j in range(len(K)):
        L.append(K.pop(randint(0,len(K)-1)))

    #print(L)

    #for i in range(len(L)):
    #    draw_string(L[i],10+30*(i%10),5+40*(i//10),"b")

    #print(sum(L))
    for i in range(len(L)):
        draw_string(".",30+35*(i%8),6+33*(i//8)+10*(diff==0),"b")

    chg=-1
    pos=1
    nb_reveles=0
    reveles=[]
    positions=[]
    nb_essais=0
    while L.count(".")!=len(L):
        if chg:
            #draw_string("[",10+35*(pos%8),5+35*(pos//8),"w")
            #draw_string("]",40+35*(pos%8),5+35*(pos//8),"w")
            cadre(20+35*(pos%8),2+33*(pos//8)+10*(diff==0),"w")
            pos=(pos+chg)%len(L)
            #draw_string("[",10+35*(pos%8),5+35*(pos//8),"r")
            #draw_string("]",40+35*(pos%8),5+35*(pos//8),"r")
            cadre(20+35*(pos%8),2+33*(pos//8)+10*(diff==0),"purple")
            sleep(0.2)
        if (keydown(KEY_EXE) or keydown(KEY_OK)) and nb_reveles<2 and L[pos]!="." and (pos not in positions):
            while keydown(KEY_EXE) or keydown(KEY_OK):1
            if mode==1:
                IMG(Images[L[pos]],20+35*(pos%8),2+33*(pos//8)+10*(diff==0))
            else:
                draw_string(chr(L[pos]+65),30+35*(pos%8),6+33*(pos//8)+10*(diff==0),"b")
            nb_reveles+=1
            reveles.append(L[pos])
            positions.append(pos)
            sleep(0.4)
            if nb_reveles==2:
                nb_essais+=1

                if reveles[0]==reveles[1]:
                    L[positions[0]]="."
                    L[positions[1]]="."
                else:
                    for i in positions:
                        fill_rect(20+35*(i%8),2+33*(i//8)+10*(diff==0),32,32,"w")
                        draw_string(".",30+35*(i%8),6+33*(i//8)+10*(diff==0),"b")
                reveles=[]
                nb_reveles=0
                positions=[]


        chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT)+8*(-keydown(KEY_UP)+keydown(KEY_DOWN))
        draw_string("Nombre d'essais : "+str(nb_essais),60,200,"purple")
        draw_string(str(nb_essais),240,200,(("purple","r")[nb_essais>record],"g")[nb_essais<record])
    fill_rect(30,110,260,85,"w")
    draw_string("Bravo !",130,120,"purple","cyan")
    if nb_essais<record:
        draw_string("Record battu !",100,140,"purple","cyan")
        record=nb_essais
    draw_string("OK ou EXE pour rejouer",55,160,"b")
    sleep(2)
    while not (keydown(KEY_OK) or keydown(KEY_EXE)):1
    while keydown(KEY_OK) or keydown(KEY_EXE):1