F_CARRE,F_DISQUE,F_TRIANGLE_HG,F_TRIANGLE_HD,F_TRIANGLE_BG,F_TRIANGLE_BD,F_TRIANGLE_HM,F_TRIANGLE_BM,F_TRIANGLE_GM,F_TRIANGLE_DM=range(10)defnom_forme_const(v):return ('F_CARRE','F_DISQUE','F_TRIANGLE_HG','F_TRIANGLE_HD','F_TRIANGLE_BG','F_TRIANGLE_BD','F_TRIANGLE_HM','F_TRIANGLE_BM','F_TRIANGLE_GM','F_TRIANGLE_DM')[v]try:fromnbs_defsimport*except:pass# Dessine-nous ici Ton Beau Sapin
# liste a completer d'elements :
# (x, y, forme, taille, couleur)
#pour les formes :
# - F_CARRE : carre
# - F_DISQUE : O
# - F_TRIANGLE_BG : |\
# - F_TRIANGLE_BD : /|
# - F_TRIANGLE_HG : |/
# - F_TRIANGLE_HD : \|
# - F_TRIANGLE_HM : /\
# - F_TRIANGLE_BM : \/
# - F_TRIANGLE_GM : <|
# - F_TRIANGLE_DM : |>
#(triangles rectangles isoceles)
#pour les couleurs :
# - 0 : ( 0, 0,128)
# - 1 : (240,244,240)
# - 2 : ( 0, 4, 32)
# - 3 : ( 88, 60, 48)
# - 4 : (192,188,176)
# - 5 : (224,232,240)
# - 6 : ( 0, 32, 0)
# - 7 : (216,224,224)
# - 8 : (216,196, 48)
# - 9 : (192, 32, 32)
# - 10 : ( 0, 0,248)
# - 11 : ( 88,176, 64)
# - 12 : ( 0,152, 24)
# - 13 : ( 0,100, 0)
# - 14 : (248,128, 0)
TBS=[#( x , y , forme , t , c),( x , y , forme , t , c),( x , y , forme , t , c)
(70,30,F_TRIANGLE_HM,30,13),(70,50,F_TRIANGLE_HM,40,12),(70,70,F_TRIANGLE_HM,60,13),(85,145,F_CARRE,15,9),(40,140,F_CARRE,15,10),(55,110,F_DISQUE,5,9),(90,120,F_DISQUE,5,8),(65,15,F_TRIANGLE_HG,20,8),]# Voici Mon Beau Sapin
# 19-36-57-49-36
L_MBS,H_MBS=159,190MBS=(b'\xf0\1\1\2\20\xc2\1\20\22!\xb2\6\xd0\1\2\1\xf0\1\3\1\2\x90\4\xd2\1\0\xc2\2\24\x82\a\xb0\3\2\x80\4\xd2\3\1\5\22!\xf2\0\1\xc2\a\3\x92\3\0\22\20\x82\6!"\21\x82\f\20\22\0\2@\x92\5\0!\xe2\1\1\xb2\t!\x92\1\20\2\0"\0\x92\5\0\3\21\xe2\a\3\xb2\3!b\20\22\0\2\0\2'b'\0\2\0\xa2\2\0\22\1\xa2\16\3\1\xf2\0\20\22\0\2\0"\0\xd2\2\4\xb2\17\0"\20\2@\xa2\r\1\xe2\4\0\22\xc2\6\xa0\2\xf2\2\6\xa2\a\0\2\xf0\0\x82\4\xc0\5\xb2\3!\xc2\4\0\22\0\22\20\2\0\xb2\2\21R`\22\0"\xc0\5\xe2\2!\xf2\4\0\2\20\22\x92\2\a\1R\0\2\21\22\0\2\x002'b'\xc0\5\27\20\xb2\2\21\xe2\4\22\0\22\x82\2\x0020\2\21\0\2\0\2\20"\xc0\5\b\t@\xf2\6\0\2\0\2\20\x020\xe2\1\xc0\1\2\1\2\0\2\0\22\0\22\xc0\5\4\30\a\xc0\1\xf2\5\0\2\2\0B\x90\3\2\2\0\2\0\22\xb0\2\21\xe0\2\a\t(0\a\xd0\1\xe2\4\xf0\3\21`B\0\22\0\22\x90\2\2'b'\21\xe0\1\1`H\4\x80\3\xa2\2\xc0\5!\xb0\1\22\2\x90\2\21\xe0\1\4P\4h\4\a\xd0\n\27P\xc2\1\xc0\3\5\2P\a\48\ah)\b@\6\21\xa0\n\22\0\2@\2\20\2\xc0\4\t\30\4\b$\x88\1\t@!\xa0\n\2\20"\0\2\x002\20\2\4\x80\4\4\30\aTX\tP\2\21\xb0\n\2\20"\0\2\20\22\xd0\4\a\b\x047'b'\24X\xf0\6\1\xc0\x042\20\22\0\2\x90\4\1\5@\a\b\x047X\xd0\3\5\xf0\a\2\xf0\0\2\0\2\xf0\3\6\1`\b\4\'H\xe0\3\2\xa0\3\3\xb0\6b\xd0\3\b\4\27\4H\xb0\3\1\xc0\3\6\1\x80\2\21\n\xe0\1\22\20b\0\2\0\xa2\1\0\2\0\2\xe0\2\a\0\b\'\4H\xc0\2\1P\3\xd0\3\6\x80\2! \xc2\1\20'b'\xe2\3\xa0\2\a\4\'X\x80\b\1\x80\2\xc2\1\0\1\0\xf2\3\x80\2\a\4\a\b\v\34\v(\a\x90\n\xf2\0\2@\xe2\3\x80\2\3\a\bl\b\4\xf0\1\21\xc0\3\1\2\x80\4\xf2\0\0"0\2\1\0\xe2\3\xe0\1\f\v<\r,\35\a\xb0\1\4\1\xc0\3\1\xa0\4R\20\2\0\2\20\21\22\20\xf2\3\1\xa0\1\\\35,\r\f'b'\r@\1\xc0\x012\21\xc2\3\5"\x80\3R \2"\20\xb2\4`\5<\31-\3\31\r\f\a0\x060\xc2\1\21\xc2\3\1B\xc0\5\xa2\4\a<\r\xf9\0\3,\xa2\a\xb0\5\xd2\4L\3\xf9\0\r,\v\xd2\t\2\1\xc0\2\x92\3\21R\4L\v8\a\30\a\b\rL\a\xe2\4\1\5\xa2\4\xc0\2"\x82\3\21B\4l(\aX\\\4\xd2\4\0\1'b'\xa2\4\x90\4\2\20\xe2\1\21\0\22<\30\r<(\f\a(\x8c\1\b\5\xf2\a\0b\xb0\1\1\xd0\3\xb2\1L(\4\r<\30\f\v\b\v\x8c\1\b\34\5\xe2\a\0b\x90\5\5\x80\1\xfc\0\v\30\v\f\35\xfc\1\b\v<\5\xc2\b\xa0\6\a\b\xfc\0\33\f\31\3\r\xec\1\bL\xd2\b\20\a\1\xe0\5\a\3\x9c\1\r)\34\r\xbc'b'\1\b<\r\6\xd2\b\20\21\xf0\5\a\26\35\26\r<\31\3<\r\x8c\1\b\fVR \xa2\1\1\x82\6\xd0\x066\4\v\xac\1\v\4\35L\b\34\4\6\4\a\xb0\3\xb2\5\xa0\a\b\6L\26\34+\f\6=,\6\xc0\4\xe2\4\x90\a\a\f\x86\1\f+\r6\30&\x90\5\x92\4\x90\a\f\r\f\r\x86\1\f\r6(\3\6\r\xe0\5\xd2\6\xc0'b'\1\21\xf0\0"\0\1\0"\a,\xd6\1H\35\34\xd2\6\20\xb2\1\6\21\x82\3\xe0\1\2\xb0\1\xf2\0\r\34\r\xc6\1\b\3\26\b\v\6\r\34\rR\0\xc2\6\21R\21\xb2\1\0\a\5B\xb0\1\1\x040\2\3\2\xd0\1B\v\35\f\rV\r6\b\v\xf6\0\r\f\35\x82\n\a!\x90\2\2"\xd0\x012\v,\r\x1c6\r\f\26\30\26'b'\35V\r,\r\xe2\t\x001\x90\5\4\b-,\r\f-(\31\6\35\34M\\\v\xd2\b\x80\3\4\xd0\1\2\xa0\1\2\v\r\b\f\b\vX\34\rY\rL\r\f\r<\r\f\v\xe2\2\1\xc2\2\1R\1\xf2\1\xf0\1\4\xf0\0\1\6\x80\3\35\34\v<\6\f-\f\rI\3\rl\r\31\v\r\34\r\f\4\xd2\1\1B\21\xc2\2\6\xe2\2\6\21\6\xb0\1\2'b'\xf0\0\22\xe0\2\4\\\v\r\34\6L\35)\3l\r\4\a\4\t\a\4L\r\5\xd2\4\1\xa2\2\6R1\xd0\1\1\2\xb0\1\2\4\xc0\1\4\rl\b\a\b\f\r\6l\r\30\rl)\35\4\a\35L\r\v\xf2\6\0R\0\22\xc0\4\1@\xac\1\b\v\f\r\6\rL\6)\r\f\r\f\r,\3\t\r\f\35\t\r\\\r\f\v\xb2\2\1\x82\5\xf0\4\1\2\a\r'b'\x9c\1\v,&\f\35&\t\3\34\31\35l\4\a\6\r\f\r<\r\xe2\a\xc0\5\a\6\x9c\1\v\34\v\rF\f\26\35\34\v\2\4\r<\r\f\r\31\x86\1\xe2\a\xd0\5\b\6\xfc\0\b\a\v\f\b\rl&\r\f\r\a\4\6\35,\r\31\3\f\rV\0\xd2\1\0\xf2\5\xe0\5\26\\\4(\v\x9c\1&\v\r\2\v\4F\4\a\b\34-\26\v\20\xd2\2\4'b'\xc2\3\1\x92\1\x80\6F\30\4\a\4\v,\30l\35\20\4\a\r&\3\31\34\r\24\a\2\0\2\20\xd2\2\1\xf2\4\xc0\6\a\48\33\f\r\30L\6,\a\2\27\r\6\r\f\4\a\3\34\vB \xe2\a\xb0\6\2\r\4\b\24\a\f\v\6\35\6\3V,\4\a-\6\t\4\3\r\26\5\0"P\xf2\2 b\1\6\x82\3\xb0\4\2\xe0\1\5\r\v\30\a\v'b'\34=\6\3\b-V-\6\31&\35\b\0\2`R\0\x92\1\0R\20b\4\21\xc2\1\1\xa2\1\xa0\3\2\xf0\2-\b\v\34\v\35\6=\bM&=\6\a\3M\b\2@R\20\x82\1\0B\0"\0R\1\xc2\1!\x92\1\xd0\1\6\5\xa0\1\1\xd0\2\a]\v\x1d6=\6\v\6\bm\6\r&-\b\35\aPb\20b 2\0\x060\xb2\2!\x92\1\xd0\1\21\x80\4-\26=6'b'\rf\b\a\bM\26\f\r6\v\b\6\34\2@\2\0B \xf2\0\0R@\xb2\2\a\xa2\1\xd0\1\a\1\xb0\1\1\6\x80\2]f\r,F\f\v\b\3V\35\f\35\26\b\26\r\34\v@B R\0\22\x002\0B\0\xf2\3\x80\3\1\4\0\1\xe0\1\5\x8d\1F\34\35\f=\f\r\b\v\26\b\4\26\r\\\v\b\f\r<\vP2\6\20BP"P\xf2\3\x90\3\2\xd0\1'b'\26\xad\1\xcc\1\35\b\f\v\r\f\r\30\r\f\35,\r\b\x8c\1\a\2"0BPR0\xe2\3\xf0\0\1\x80\3\2\1\0\a=\f\xad\1\xdc\1\b\f\r\b\34\r\34\r\b\a\b-\b\35\x8c\1\r\x102@2\0\x020\22\xf0\0\xe2\1\0\xe2\1\x90\4m\34\xbd\1\x8c\1\r\v\r\v\34\t\16\t\r<\v(\f\b<\r<\35,\r2@20\2\x80\1'b'\2\0\22\0\xa2\1\20R\21b\x80\4\bm\34\xbd\1\x8c\1\30\v\34\r\16\5\16\3\r<\r\f\35\30\r\f\r\v<\26\35\f\r\f\v\2PB\xe0\1\22\0b\x002\0"\0"\1b\x80\4\a\b\6\35\v\f\v\31\3\x9d\1\6\r<\r\34\v\30\r\f\r\v)\3\rl\b=\b\a\b\r\f\35V=\4\2\a\1\2\0\2\xe0\1\2\20B\0\6\0\22\20'b'\22\20\xb2\1\x80\4\30\r<\31\3\xad\1\26\35\6\33\34-\34\6)\3\26=\f\b\r<\v\b\f\r(\33\a\b6M\v\20\a\0\2\2\xe0\1\2\x002\x002\20\2\20\2\x012\x002\xc0\3\2@\30=\3\6\r\b\xfd\0\30\v\6\3\b\v\b\rl\r\16\5\t\x036\35\b\26\35,\v\r<\r\v\30]\6\r\20\1\xe0\2\2\0""\20\2'b'\20R\20"\xb0\4\a\30=(\v\3\30\3\33(]l\r\36\t\6\35&\b\3\6\r\6\r\x8c\1\r\xf6\0\r\xd0\3\22\0\2\xf0\0\2\0\22\21\2\x102\xf0\0\3\xc0\3(-\b\x8d\1\b\xfd\0\\\35\16\26=\b\v=\26\r\3\t\3\r\34\r&\3\6\3\4\x90\1\6\xc0\1\6\xf0\0\22\xc0\1\4\21\22\20"`\21\3\xd0\2\21@\aH'b'\x8d\1\vm\6\r\34\35,\r\6=\3\b]\6\169\f\35\6\a\6\r\xa0\1!\x90\1\x020\2P\2@\22`\2\21\0\2\x002`\5\1\xa0\4\b\x8d\1\3\xfd\0\6\r\f-\f\26-\v\f\vmY\3\26\r\a\34\rG\5\6 !\xd0\1\6\x80\1\2\22\20\22@\x020"\xe0\2\1\xe0\1\2\a\5\'\bm*\xfd\0\xf6\0\r\3\30\v\bm\a\t\a\t'b'\a\t\16\6\35\a\34\r\x97\1\4\0\6\xe0\2\2\xb0\1\2\20\2\0\2\22\xd0\2\6\5\xb0\1\5\xf7\0\30M\n\a\5\32\x8d\x016\35\3Hm\a\t\a\t\a\31\35\27\35\4\xd7\1\4\x90\5"\x80\4\27\5W\21\27\b=\n\25:\xdd\1\3Hmi\v\'\35\x97\2\5\6\2\x80\1\6\20\2\xd0\2\2\20\22\1\xa0\3\5\xb7\1'b'!\27\4=:\a\32\xbd\1\b\r\tH\xfd\0I\r\'\1\a\r\x97\3@\2\xa0\3\22\1\2\xf0\2\5\a\5\xc7\1\5\27\5M\32\a\5*\x9d\1\3\30\r\vH\x8d\1\6\3\6\35\n\27!\xf7\2\21\'\5@\6\2\xa0\2\2\2\1\xe0\2\1\a\25g\5\x87\1\r\f\35\26\32\27\32\x8d\1\30\v\xfd\1\26]\4\a\21\xf7\0\6\xf7\1'b'\21W\6\2\6\5\20\1\5\xf0\1\5\2\xd0\2\5\21\a\x95\1\xf7\0\r\f\rF\r*\xfd\0(m\26\x8d\1&]\4W\21\27\6\xf7\1\21W\5\2\a\2\26\a\6\xf0\1\1\2\xb0\1\21\0\6\1\xf5\1g\r,6\35\6]\30\v\b\x9d\1&m\6\35V\35\vG\21\5\2\26\2\'\6\xa7\1\x017\5\2\x1767\x060\2@\1\0\2\5\1\2\xc0'b'\1\6\x110\x85\2\27\5\1\'\f\33-\f\r\34\r\26\b\r86\3m\26\rF\f&\f\35V\b\35\a\2W\6G\2\x87\2\6\2\5\a\5\6\a\22\a\1\2\4\0\x040\2\2\3\5\1\2\0\2\x80\2\xf5\1\27\1\a\21\a\r\33\r\b\v\30\f\30\v8V\35)f\r\f\r&\v\f\26\r<-\f\r\b-\x167\5\x067\26\4G\21\x87\1\6\2\26\2\26'b'\a\22\a\5\6\2& \2\0\2\6\1\0\4\0\22\xe0\1\x85\2G\5\a\6\r\f\35\34\35\f\r\f\35\34V\35IF\r\f\r\34-\34\35l\35\b=G\2\6\2\6\'\2\a\5\xd7\1\2\6\1\x056\22\27&\2\6\2\3\5\2\6"\0\2\xd0\1\x95\2WM\f\r(\f\r\xfc\0\r\f-\aI\26\35\xfc\0\r\3\t\v\\\r\30I-\27&\2\5\27\6"G\5g'b'\6\4\2\a\1&\22\6\2\a\6\27\2\6\22\a\2\0\2\20\2\21\xc0\1\xd5\2\'\4M,\30\a\xcc\1\r\f7\t\5\16\xac\1)\34\v,\r\16i\b\r\f\r\4\a\2&\a\2\26\1G\2\a\4g\26\5\a&\22\6\a\2\6\2F\x057\20\22\0\aP\x95\3\27\v]\6,(\r\xbc\1\35\31\16)\r\xac\1\r\31\v<\r\v)\36\b)\r,\r\4\26\2'b'\27&W\6\2\3\1G\23f\4\2\3\5\27\5\6\27\5\2\27\3\a\0\2\6\a\4\1\a\xf5\2\1%\27\4\xcd\1\v\6\f\v\xcc\1\3I\r\xbc\1\35<-\t\369\b\t\r\\\a\2\'\6\x027\5\6\2\a\5\xf7\0\5\a\2\26\2\27\2\26\2\6\5\2\'F\5\22\a\5\4\x95\2\1%\21\a5M\b\31\6=&\35\34(\xac\1\r\31\3\r\x8c\2\35,'b'\ri\r\34\rL\35\4\26\22\'\5\a\6\a\5G\6\2\6\x026\2\5\2\6\2\1\5\a\4&\2\5\6\a\5\4!\6\4\a\xd5\2\x015]\24\t\b\a\b\xfd\0\34\r\b\a\xbc\1\35\xfc\1\r\6\r\f\r,\r\23\b\16\b\t\r<\26\35\f\r\34\35\4\6\27\4\6\2\6\2\1\5G\5\a\22f\5\3\a\4\2\26\2\6\2G\26\2\26\xf5\2\xfd\0'b'\3\a\t\35\31\xfd\0,\35\v=\xac\2\35\f-\f\b\t\3,\r\b\34-\f\rL\35&\35,\r\f\a\5\27\26\2\27\1g6\1\6\27F\2\a\4\2\1\6\2\5\2\6\2\5\2\1\xc5\2\a\x9d\1\3\t-\6\t\xfd\0<-(\r\xfc\1]\v\34\31\3<\b\6\r\x9c\1MF\35\a\2\1&\x127\x057\1V\2\4\x056\2\6\1\'\6\5\1\a\5\26\5\21'b'\x85\2\xcd\1\a\v\xad\1\6\rl\b\a\b\f\35\34\xbd\1\b,+-\34\r\v\b\6\35\26\rl\xad\1\v\3\6\22\26\2\6\1\a\6\2\'\2\6\2&\a\4\xa6\1\a\4\5\a\26\4\a\1\a\5\21\xe5\1\1\a\b\xbd\1\b\t\xcd\1L\r\6(\r\b\r,\v\r\6\r\f\r\t\3,\30\\\26\35\f\b\6M\26\35\f\35\6\xad\1\23\'\26\5\a'b'\4\1&\2\1\a\22\4\5\22\6\2\5\2\xf6\0\2\27\2\6\2\1\22\x065\1\xa5\1\a!\b\3\xad\1\6\31\xad\1\26-\6\30\6\v\r\v\30\35+\35\26\t\3\r\f\r\b<\r\f=\3\b\x9d\1&m6\3\26\5\26\2&\2\x016\22\a\5\2!\26\x021f\2\6\5\4\1&\x025\21\xa5\1!\5\b\23\x9d\1\27\4\xbd\1&\r\30\r\b\35'b'\3(\6\vm\6\r,\r<=\b\xfd\0\23\xad\1\6\23\v\3\6\a\22\6\1\a\26\3\26\1\6\2\26"!\6\a\25\1\xa6\1\25\21\26\x025\21\a\xf5\1\tSM\31\xed\1\b-\b=\30\x9d\1\6\34\35\34M\vm\4\a\4\t\27\x8d\1\v6\27\2V\a\5F\5\a\x056\2\26\21\5\21F\2\6\x016\22\6\xf5\2\a\38M\6\24\x9d\1\30'b'\3\xcd\1\v\35\v]\6\r,\r\26\35\v\xfd\0\31\35\4\a\26m\4V\2&\2\1\2\6\2V"\21\26\a\25\1\26\2&\a\2\a\6\22\4\6\2\6\2\1\xb5\1\a\xd5\1\a\5\a]\3\a\t\35\6M8-\6\'\6m\b\a\bm6\35\3\vM\6-\t-\3\t\26\r\v\23+\3\xa6\2\4\a\1\5\1\26\2\6\1\5\2f\2\a\5\a\2&\2\1\6\2\xb5\1\a'b'\xf5\1\am\31\r\26M(\v\35\23\t\16\31\3]\b\a\b\xbd\1\v\3M&]\4\a6\v\23\33\a\xa6\1\24V\2\6"\6\aV\2\6\x026\22\6%\1\5\21\6\xc5\3\a\b]\3\a6\35\6\b\r\v=\3\t\5\t\16\31\vM\30\3\v\35\6M\6\r\v\b]F=\27F\23\4\6\2&\2\1F\2\21\2F\2&\1\2\6\1\25\1\a\5\1\22\26\25\2\4\25'b'\22F\xc5\3\27S\rF\a\b]\6\23i\r\6\xfd\0\30V\b\3]\x86\1\31\3\x96\1A6\2\4\2f\2\6\4\5\21\2\x062\26\22\3\2\26\x045!\2\26\xd5\3\27\b\23\bV\v\30=&\16\31\16\31\16\t\16&\xfd\0\b\x046\b\3\26-\x96\1\3\a\4\xa6\1!\2V\4!\2F\3\22\6\22\4\a\1\25\21\5\2\1\2\5&\2\6\2\5!'b'\5\1\xc5\3\'\1\5&\b\a\6\b\xa6\1\t\3\31\396M6\3\b\6\30\r\xe6\1\31\xb6\1\4\1\x126\2\26\2\6\2F\2\6\1\3\a\4\1"\6\5\1\4\2\26\22\5\a\1\26\4\5\1\6\1\4\2\x95\2\a\2\x85\1\'6\r\b\a\b\xb6\1)\16\t\3\16\31\xe6\1\30\27\xd6\1\4\t\3\xa6\1-\a\26\22\26\22\4\26\x056\2\4'b'\21\5\1\5\1\2\5\a\1\25\21\a\1\a\2\6\1\25\6B\1\xf5\1\a\1\5\2\aU\27&\3\6\3\b\r\30\3\xc6\1\31\39\3\xc6\1\v\b\6(\3\xb6\1\t\a\4\xa6\1m6\2\6\a\2\1\6\22\a\5\1\2\5\6\3\22\1\26\3\1\3\6\2\6\5\1\aE\21\5\1\5\1\2\x85\1\1e6\a%\a\b6\b\a\t6\35\xc6\1)\3\t\16\n\xc6\1\v'b'\b\26\v\b\26\3\4\3\b\xf6\0\31\6\r\x86\1\x8d\1\6\a\3\1\4!\5\6b\6\21\6\a\4\22\a\21\6\5\21\2\27\6\25\2\21&\xf5\1\27\5\2\x046\b\a\30\v\26\v\6\r<\35\xd6\1\36\t\xc6\1\r\b\x96\1\v\b\v\b\26\30\3\6\a\x9d\3\21\2W\6\4\1\26\1\a\22\5!\6\21\2\1\27\1\5\1\6!\2\3\4\xc5'b'\1\v\r\x96\1(Vl\r\xf6\0\35\x96\2\30F\r\v\26-6\30\a\b\26\xbd\3\v\'5\1\2\1\2\1\a\25\1\22\6\2\6\5!\4\1\5\1\4\5\21\27\xc5\1\a\xb6\1\r\b\6\r&\3\6\x8c\1M<\r\x96\1\r6\b\3V\r\4\n\a]&(\v\b\3\r\b\x9d\2&\x8d\1\v\a\5\1\6\5\2\6\2\1\4\xf1\0\2\a\5!\5!\a\xd5\1\b\xa6\2'b'\t\b\r\x8c\2-V=\26\b\3f\n\4\5\n\x9d\1\b=\30\v-\v\b\v\xbd\1f]\5\6\2\a\1\4\a\5\21\5\1\4\26A6\1\a\6\3\2\6\x85\1\21\5\a\v\x86\29\r\xec\1\xcd\1\v8\r&-\32\5\2\a\x8d\1\b\x8d\1\v\30\a\xbd\1\xb6\1\r\2\6\1\6\27\6\2\6\1\6\21\a\6\2\a\5\1\2&\1\26\2\25\6\xf5\x001\a'b'\b\xf6\1I\3\xbc\1\r\f\xbd\1\vX\vM\32\a\32\a\xfd\0(\x8d\1(\v\30\v\b\a=\30\xc6\1\5\21\2\1\5f\22\26\4A\5\1\a\4\25\1%\21%\a!\5\30\r\xd6\1\t\a\4\t\24\r\x9c\1\r\26\xad\1\b\v\rH\fM\n\4\5\32\am\b\27\30\xfd\0\6\vM\30\35(\a\b\xa6\1\3\25\1\6\a\1%\21\4\xa1\1\26\a%'b'\1\25!%\27%\a\30\xd6\1Y\6\rl\35F]\b\33-H\fM\32\1\5\32m\t\24\31\x8d\1\3\26\xfd\0\3H\v\b\aV\5\4\2\6U\x91\1\4\5\21&%\1\25!%\2\3\x015\a8\35\xf6\0\t\a\t\27\5\xd6\1\23\35\33\30]H\f]\n\a\n\5\1m\b$\3\x9d\1F]\3\v\r&\v\bF\a\4\27UQ\2\26Q\2\6\a%\1\xf5\0\26\a%\6\a'b'\5\a\r\6\3\30\3VI\4\xb6\1\r\v8\x9d\1H\f]\32\5\a\n]\26\30\x9d\1\v\4\3\xd6\2\a\5\21\4B!\22\5\21\6\22\6\2\x161\6\a\5\1E\21\5"\5&\2\6\a&\35\6\r(\r\bY\6\vV\r\b\v\3X\xdd\2:m&\x8d\1\33\4\30\a\1\x96\2\a\5!\a\21\a\1\a\21\5\a\26!\6\5\22\21\5A\a\5\x0151\26\2\a\2'b'\6\5\22\a\xa6\1\v)\24\b\a\4\b\3(\3\30\26X]\6\xed\1\26\nmF\xfd\0\f\v\b\4(\v\xe6\1\5Q\'\25\21\5\4\6\1\22\6\2A\x021\3\2\25\x0151\6\22\5&\22\a\b\r&\30\r\26\25\r\6\t\6\5\4\v\r\x86\1\3\t\b\31\b\tM&\xdd\x016Mf]\34\b\4\1\4\a\30\xe6\1a\5\22\1%\3\6\4!\2\26!\x041'b'\2\26\a\21U\3\a\6\22F\3\6H\a\b\16\r\5\a\5\16\26\16\a\25\6\16\xf6\0\r\t\b\31\30-F\xdd\1\x96\2=\v\f\b\4\b\4\30\a\v\xd6\1a\a\x065\a\25Q\25\2\5\21\6\1E\ae\2\26\2\6\2\5&\a\1\a\21\b\16\a\5\a\5\16\r\v\16\5\a\5\36\x86\1H\3\xf6\0\xad\1\6\r\xe6\2\v\f8\4\30\v'b'\xc6\1a%\6%\6\25\1\5\1\26\2\1&\1\6\x151\x85\1\3\2\xf6\0\4\22\4\2\1\a>\'\16\6.\5\a>f\r(\v\x86\1\x9d\1\x96\3\v\34\'\4\30\rV\1\x046\x81\1\'\5\1\22\25!\4\1\6\21\25\27\1\5aE\1\2\x96\1\22\1\2\a\21>\27N\25\36\r\xd6\2\x9d\1\'\xe6\2\r,\a8V\3\xe1\1\2\21\a\2\5\4'b'\5!\2!\3\2\6\27\25\xf1\0E\4V\2\21\a\6\1\6\1\6\1\5\1\a&\4\5>\a\16\r\x96\3\x8d\1\'\xe6\2\r+\t\30\4&)\6\r\2\xd1\1\5\a\5\2\6\4\6\5!\4!\x051\2\1\5aE\22\26\2\4Q\2\4\2\a\1\5i\3\36\3Y\3\xe6\2m\a\21\a\31F\b\26\r\30\v\26\r\30\r\26\3\b\r\6\b9\a\49\6\1\5\3\xd1\1'b'\x157\1%\a\26\2\6\a\6\1\4\x91\1E\6\22Q\a%1\a\23\31\16\1\5)\3\a\5\a\t#\xf6\2M\6GV\30\6(\v\26\f\v(\6\b\26\b\xa9\1\4\'\x91\2\25\4\2\5\'E\xb1\1E\xf1\0\27\25\1\2!\a#.S\36\t3F\r\xe6\x027\1V\rH\v\f\6\33h\4\xb9\1(\xf1\6\4\1\5\1\2\1\2\4\21\6\23.S\x1e3\v\f\r&\f+'b'\r\xb6\2\'F\rh\33\r\33h)h)(\xf1\6\24\25a\23.C\6\36\6\23;\30[\xb6\3\xf8\0\33\6\v\xf8\0)h)(\xe1\6\27\1\5\21\5\a\5\1\0\3\31\6\36C\6\36\3\31\r\f\35\v\b\f=*\xb6\3\r8\v\b\v\6\33h)h)(\xf1\6\26\3\25\24\5\2\21\31\3\36\39\3\36\3\31\v\xfa\0\f\v*f\1\xd6\2\1\27(\f'b'\v\30\3\4\1\4\30)h\318\xf1\6\5\1\25\a\1\27\21\a#\36#\31\6\36#\v\xfa\0\f\33\32V\21\xa6\1\3V\3V\23\v\t\23F#\31h\318\xa1\b#\36\3\t\3\31\3\36#\v\xfa\0\v\b*\1\3\26\16!\3&)\3\26#\a\6\tV8\3&\386\31h\318\xa1\b\31\3\36\39\3\36\31\3\vj\3\30*\21)!\3i\x063I6(V\v'b'\30\3&\3\31h\318\xa1\b\3\t\3\36\23\t#\16\6\31\3\vj\3\30*\219\16\b\x99\1\23Y\23\26(V\v\30\3\6\39h\318\xa1\b\23\6\36\6\3\t#\36\3\t\6\vj\3\30*\1\a\xb9\3(V(ih\318\xa1\b\3\t\3\36\3I\36\31\3\v\3Z\3\30\32.9\a\x89\1\b\a\36\31.\27)(Y()\b)h\318\xa1\b)\36\39\6\36'b'\31\3\v\3Z\3\30\32.\31\36\x89\1>(\31\3(\31(Y()\b)h\318\xa1\b\t\3\t\36\3\t\3\31.\t\23\v\3Z\3\30\32\36)N\bI\36H)(\1\t(\31\1\5\t\4(\5\1\x99\1\30\318\xa1\b\4\3\t\36\23\6\3\t.\3\6\3\v\3Z\3\30\32\36)^\t\b)h)\30\t\1\t(\31\1\5\t\4(\5\1)\32\39\32\318\x91\6\5'b'\xf1\1\a\31\36\39.\31\33j\3\b\v*\16\32\tN\t\16\b\3\31\16X)(\31(Y()Z\3\t\3\32\318\x91\6\a\x81\2\t\3\36\39\36\t\3\t\33\3Z\3\b\v\a\n;\xfe\0\b)\16X\318\31(Y()Z\31*\318\x91\6\5\xb1\3\5\32\33\3Z\3\16\r\32\33\32^\b\36)\16\b\168\318\t\5(\1\4\31\5\t(\31\4Z\31*'b'\31\b\x047\xe1\5\3\xc1\3\5\32\33\3Z\3\16\32>\n\16\b>\t.\31\16\b\168\318\t\1\4\30\21\31\1\a\30\a\4\t\1Z\31*G\xf1\5\5\1\a\6\xb1\3\a\32\33\3Z\3\16\f\v\36\b\16\n\v\b>\t.\31\16\b\168\318)\30Y\309Z\31*G\x91\6\26\1\a\x91\3\a\32\33j\3\b\a\v\36\30\v\30\xfe\0\31'b'\16\b\168\318)\30Y\309Z\31*\27\x91\6\6\1\4\a\1\2Q\5\x91\2\a\1\a\32\33j\3\b\16\v\16(\v\30N\30\16\3\t\b\368\318\16\31\30\31\4)\30\31\4\tZ\31*\xf1\6\25\x91\3\xf7\0:\16\a\36\v\16(\v\30\x0e7.\31\b\368\318\1\31\30\31\21\t\4\30\t\5\1\tZ\31*\xf1\2\x85\3\21%\1'b'\26\xc1\3\xb7\1\36\v\a(\v\16W.\31\b\368\318\16\31\30\31\a)\30\31\24Z\4\aA\5\x91\2\x85\1\1\x95\2\21\5\2\6\25\6\1\a\xb1\3\xa7\3\36\b\31\368\31(\16)\30Y\30)\a\5\27\1\27\xe1\2\x85\x031\25\21\25\1\2\5\1\a\4\xf1\0\25\xb1\2\xb7\3\31\368\t\3\16\'\16\4\t\30Y\30'b'\31\4\'\xf1\2\xb5\2aU\21\aA\2\4\2\25\xe1\1\5\xc1\2\xe7\2\36\xd7\1E\27\5\a\x81\3E1\25\21\x95\1\x81\1\x151%!\5\6\5\1\4\5!\5!\25A\25\xc1\3\xf7\2\5\aA\5\xb1\3e!\5!\5\21\5\1\xf5\0Qe\1\a\x041\2\6\5\2\5\1U\21\2\x045\1\6%\xb1\4\5\xc1\5U\x015\1\5\1\25\1\5\1\25'b'\1\5\1\25\21\5\1\xe5\1\1\25\a\6!\5\3\1\5\a\xf5\0\1\xa5\1\x91\a\5\xa1\x025\21\xf5\0\1\xf5\0\1\xa5\1\1\xb5\1\1\4\21\25\3\1\5\1\6\aU\a\2\1U\1\6\1\x065a\5\xd1\3\25\xc1\2\25\21\25\21\xd5\1\21\5\1%\1\5\21\25\1\5\21\xf5\1\x015\21\25\6\5\2\4\1\5\1\a\xa5\1\6\22'b'\6%1\x95\1\xd1\6\5!\xc5\1\x065\x115!\x95\3\1E\x115\6\22\6\1\xf5\0!e\6\1\5\1E\21\xe5\1\xc1\4\25!\xf5\1\2\25\x015\21\25\21\5\21\25a\xc5\1\a\xf5\0\1\25\1\25\22E\a%\1\2\aE\1\5\6\1\ae\1\a\xc5\2\xf1\1\xa5\4\2%1\5A\25\21\5\1E\1\xb5\1!e\21\5\21\6\2\x065\3\a5\1'b'\2\6\4\6\25\6\2\1\5\27e\x015\1\xf5\a\a\25\6\5\1\27!\5\21\5A\25\1\5!\5\1\xb5\1\1\a\1\xb5\1\4&\x025\1\5\26\5\21\2\25\1\a\2\4\1\2\aE\1\4\6\4\xa5\1\1U\1\25\1\x85\1\21\xf5\1\1%\1%AU\2\a!\a5\1\x151\25\21\5\1\5\1\5\1\5\1E\x015\'"\5\21\x85\1\26\1%\27\6\25\a\1'b'\2\1\a\5\2\21&\5\aE\2\1\5\aU\1\xf5\2\1U\1\x95\2!\5\1U\a\6\5\1\2E\1\5\1\5\1\5\1\25\21\5\1\5!\5\1\x95\1\a&\1\4!%\x91\1\6\1\4\1\5!\3\5\6\2%\1\6\2\1\6\5\1E\2\3\a%\1\5\1U\1\25\21\25!\25\1\5\1\x95\2\21U\1%!\xf5\0\1\5\1\4\x115\21\5\21\25!\25\1E\1\xb5\1\6\2%'b'\21E\2\6\5\1\2\a\2\a\5\a\5\27\25&\1\5\26\21\4!\2E\2\1\xf5\0\1\x85\1\1\25\1\5\1\5!E\1\x95\1\1\25\1\x85\3\6\1%\1\5\21\5\21\25\21%a\xb5\1\6\2\xf5\0!\25\26\22\25\2\25\a\6\1\5\4!\a\25\4\1\5\1\4\26\5\1\25\6\5\6\1U\1e\1\5\21\5\1\25\1\25\1\x95\3\1\5\1\x95\1\a5'b'\2\6\25\21\5\x015\1\x95\3\2\4!E\6"!\aE\1\a\5\4\22\6\1\4\6\1\4\a\6\1\5\2\21\a%\6\1\5\2\ae\1E!\x0515\1%\1U\1\x95\1\1\5\1\xd5\1\26\a%\2\25\1\26\4\21\x85\1\1\xa5\2!\26\3U\4\2\26E&\21\5!\6\4\25\2\21"\1\6\1\5\27\4\1\5\21%\1\x95\1\1\25!\5\1\25\21\5\1%\1\25\21'b'\5\1\5\1E\21\x85\2\a\1\22\25\2\21\2\1\5\4\2\x065\1\xa5\2\a5\1\6\1\6\25\1%\21\25\2\6\21\26%\1\4\6\1\6\1%\22\4\a\2\6\1\a\4\27\5\1\5\1\a\6\4\x95\1\1%\x81\1%\1\x85\2\1\x85\1\1\xb5\1\27\2\a\5\1\2\a5\1\xf5\2\a\2\26\5\1\22\1\xe5\1\3Q\22\3\6\3\25\6\4\2\6!%\27'b'\2\1\a\6\4\2\4e\1\xa5\1\21\5!\xf5\0\1\xd5\1\1\xa5\2\26\4\xd5\1\1\xd5\1\1E\a\22\x051%Q%\x021\6!\5\21\5\1&!\5\3&\1\5\2\6\1\6%\a\25\1%\x015A\5\1\x051\25\1%\1\xb5\1\1\25\21\xa5\1\21E\1\5\1\5\aE\1\a\xa5\3Q\2\a%\xf1\0%\4\6!\22\6\1\5\1\2\5\27\5\4\6\1\a\6\25\a'b'A\5\a\24\25\a\6e\1%\1\5\1\25!\xd5\1\1%\1%\a\1\a\x95\1\a\x015\6\2\6\1\x065\1\6\3\xc5\1\1\xa5\1\a%!&5\xa1\1%\26\x116\2\26\22\5\1\5\1\a\2\6\4\26\5\4\1\a\5\a\4\25\1\a\25\1\5\1\25\1\5\1\5\1\5\21\5\21E\1\25\1\xd5\1\21U\21\xa5\1\6\2\a%\1\6\x95\3\27%\1\6\2\5'b'\x175\xb1\x015\1\4\6\a!\25\1\26\21\5\6\5\4\5\1\2\21\6\5\a\22\25\4\1\25\x015\1%\1\5\1\5\21\xd5\1\1\x95\1\a\1\xb5\1\2\aE\6\25\a\5\21\6\a\x95\2\1\5\1E\6\22\6\22\x85\1\xe1\1\25A%\a\2\4\5F\1\5\21\a\5\1\2\5\a\5\2\aUA\5\21\5\21\x85\2\1%\a\6\4\6\22\xb5\1\1\25'b'\1\5\21\a\1\22\6\2\a\x85\1!E\1\xa5\1\26\22%1e\xb1\1\25!5\a1\6\5\1\3\1\5\1\2G\2\1\a\xb5\1\21%\1%\1\xf5\1\27\6\2\27\xb5\1\22\25!\26\a\25\27\25\a\1E!\x85\2\x91\1\xc5\1\xf1\0%\2\5\2\5\a\5Q\5\21&\25\27!\a\xa5\3\a\xb5\1\2\6\a\xd5\1\1\2\6!\5\2U!E1\xb5\1\a\5\6'b'\aQ\6\4\22\a\1\x051U\x91\1%\21\5\27\1\5\xb7\1!\2\a\5\a\xd5\4\2\6\xb5\1\6\aE\26\a%\1\a\21\6\2\xf5\0\1\a\xf5\0\1\5\a\5"\6\2\6\22\26\x057\5\x81\x015\x91\1E\4\a5\xf7\0\5!\5\6\x95\3\a\5\a\x95\1\a\2\x051E\'\5\22\27\5\a\22\5\27\1\2A\a\5\a5\a\1\xd5\1\aB\26\a\5'b'\xf1\3\5\1E\x87\1\1\6\3\4\3\a\xf5\2\a\1\25\x115\a%1\6\5\4\a5\'\5\a"\5\21\5\a!\5\1\5\26\3\5\27E\1\x95\1\1\5\a\5\a\6\2\6\2\6\x91\5\5\a\xf5\0\1\2\6\5\2\27\6\xe5\2\a%\x015\'\25\1\26\2\x85\1\27\5\27\6\25\1\5\21\6\5"\25\21\a\5\a\25\27\x017e\aE\1\x051&\2\4'b'\xc1\4\5\1GA5\xd7\2\5\21\a\5\21W\1\2\6\5\1\5\1\5G%\2\a\5\a\26\2\6\2&\5\'!\26\'\6\3&\3\xa7\1\5\6\2\5\x031\6\a\5\27\x81\5\5\a\21\6\2\1\a\1\2\25\x97\2\1\27\5A\a\x057\1\5\1\2\6A\x87\1\2%6\2\4\5\a!&%\a\25\a\2\xb7\1\5\27\x012\6\1\26\5!')PALETTE_MBS=((0,0,128),(240,244,240),(0,4,32),(88,60,48),(192,188,176),(224,232,240),(0,32,0),(216,224,224),(216,196,48),(192,32,32),(0,0,248),(88,176,64),(0,152,24),(0,100,0),(248,128,0))KEY_LEFT,KEY_UP,KEY_DOWN,KEY_RIGHT,KEY_EXE,KEY_OK,K_ESC,KEY_1,KEY_2, \
KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_PLUS,KEY_MINUS,KEY_MULTIPLICATION,KEY_DIVISION,KEY_LEFTPARENTHESIS,KEY_RIGHTPARENTHESIS=range(1,23)try:frompc8_keysimport*exceptImportError:passfnop=lambda:Noneshow_screen,PC_init=fnop,fnopdraw_rect=fnopshell_viscols=fnopL_ECRAN,H_FONT=0,0try:importsyss=sys.platform##################
# KhiCAS/Micropy #
##################
ifs=="numworks":importgraphicset_pixel=graphic.set_pixeldefget_pixel(x,y):returngraphic.get_pixel(x,y+24)d_key={KEY_LEFT:0,KEY_UP:1,KEY_DOWN:2,KEY_RIGHT:3,KEY_EXE:4,KEY_OK:30201,K_ESC:5,KEY_1:49,KEY_2:50,KEY_3:51,KEY_4:52,KEY_5:53,KEY_6:54,KEY_7:55,KEY_8:56,KEY_9:57,KEY_PLUS:137,KEY_MINUS:153,KEY_MULTIPLICATION:169,KEY_DIVISION:47,KEY_LEFTPARENTHESIS:40,KEY_RIGHTPARENTHESIS:41}L_ECRAN,H_ECRAN=320,222######################
# NumWorks + KhiCAS #
######################
L_FONT,H_FONT=11,18##################
# KhiCAS/Micropy #
##################
show_screen=graphic.show_screendefdraw_rect(x,y,w,h,c):graphic.draw_rectangle(int(x),int(y),int(w)-1,int(h)-1,c)deffill_rect(x,y,w,h,c):graphic.draw_filled_rectangle(int(x),int(y),int(w),int(h),c)defdraw_string(s,x,y,cf,cb=(255,255,255)):ifcb:graphic.draw_string(int(x),int(y),s,cf,cb)else:graphic.draw_string(int(x),int(y),s,cf)defPC_init():fill_rect(0,0,L_ECRAN,H_ECRAN,C_BLANC);importiondefkeydown(v):returnion.keydown(d_key[v])>=0except:passifnotL_ECRAN:############
# NumWorks #
############
importkandinsky,ionget_pixel,set_pixel=kandinsky.get_pixel,kandinsky.set_pixelL_ECRAN,H_ECRAN=320,222L_FONT,H_FONT=11,14deffill_rect(x,y,w,h,c):kandinsky.fill_rect(int(x),int(y),int(w),int(h),c)defdraw_string(s,x,y,cf,cb=(255,255,255)):ifcb:kandinsky.draw_string(s,x,y,cf,cb)else:kandinsky.draw_string(s,x,y,cf)d_key={KEY_LEFT:0,KEY_UP:1,KEY_RIGHT:3,KEY_DOWN:2,KEY_EXE:52,KEY_OK:4,K_ESC:5,KEY_1:42,KEY_2:43,KEY_3:44,KEY_4:36,KEY_5:37,KEY_6:38,KEY_7:30,KEY_8:31,KEY_9:32,KEY_PLUS:45,KEY_MINUS:46,KEY_MULTIPLICATION:39,KEY_DIVISION:40,KEY_LEFTPARENTHESIS:33,KEY_RIGHTPARENTHESIS:34}defkeydown(v):returnion.keydown(d_key[v])defshell_viscols():return30defl_str(s):returnL_FONT*len(s)try:fromtimeimportsleepexcept:try:fromutimeimportsleepexcept:passifdraw_rect==fnop:defdraw_rect(x,y,w,h,c):fordyin(0,h-1):fill_rect(x,y+dy,w,1,c)fordxin(0,w-1):fill_rect(x+dx,y+1,1,h-2,c)defescape_key():returnkeydown(K_ESC)modifie=Falsetry:fromtbs0importTBSexceptImportError:passtry:frommbsimport*exceptImportError:passtry:fromnbs_defsimport*exceptImportError:passtry:frompc8importL_ECRAN,H_ECRAN,PC_init,show_screen,set_pixel,get_pixel,draw_rect, \
fill_rect,draw_string,L_FONT,l_str,H_FONT,keydown,escape_key,shell_viscols, \
KEY_LEFT,KEY_UP,KEY_DOWN,KEY_RIGHT,KEY_EXE,KEY_OK,KEY_PLUS,KEY_MINUS,KEY_MULTIPLICATION,KEY_DIVISION, \
KEY_1,KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_LEFTPARENTHESIS,KEY_RIGHTPARENTHESIS, \
sleepexcept:pass#>>>>>> CONSTANTES COULEURS <<<<<<
C_BLANC,C_NOIR,C_ROUGE,C_BLEU,C_VIOLET,C_GRIS=(248,252,248),(0,0,0),(248,0,0),(0,0,248),(128,0,128),(128,128,128)#>>>>>> FONCTIONS COULEURS <<<<<<
defto_rgb565(c):return (c[0]>>3<<3,c[1]>>2<<2,c[2]>>3<<3)#>>>>>>> CONSTANTES IMAGE <<<<<<<
PALETTE_MBS_CLAIR=tuple([to_rgb565(tuple([i+4*(255-i)//5foriinc]))forcinPALETTE_MBS])#>CONSTANTES INTERFACE GRAPHIQUE<
L_CADRE,H_CADRE,H_FONT2,H_FONT12,N_CHIFFRES_SCORE=2*L_MBS+2,H_MBS+2,H_FONT*2,H_FONT//2,8#>>>>>>> CONSTANTES DESSIN <<<<<<<
FORMES=(F_CARRE,F_DISQUE,F_TRIANGLE_BG,F_TRIANGLE_BD,F_TRIANGLE_HG,F_TRIANGLE_HD,F_TRIANGLE_HM,F_TRIANGLE_BM,F_TRIANGLE_GM,F_TRIANGLE_DM)#>>>>>>> CONSTANTES SCORE <<<<<<<
D_SCORE=255*3#>>>>>>>> FONCTIONS SCORE <<<<<<<<
defscore_couleurs(c1,c2):(r1,g1,b1),(r2,g2,b2)=c1,c2returnD_SCORE-abs(int(r1)-int(r2))-abs(int(g1)-int(g2))-abs(int(b1)-int(b2))# a diviser par 10 ?
defscore_pixel(x,y,cd=None):x2=x+L_MBS*(x<=L_MBS+x0_cadreand1or-1)cg=to_rgb565(get_pixel(min(x,x2),y))# image de gauche
ifnotcd:cd=to_rgb565(get_pixel(max(x,x2),y))# image de droite
returnscore_couleurs(cg,cdinPALETTE_MBS_CLAIRandC_BLANCorcd)#>FONCTIONS INTERFACE GRAPHIQUE <
defcenter_1d(pos_cadre,l_cadre,l_objet):returnpos_cadre-((min(l_cadre,l_objet)-l_cadre)//2)defcenter_2d(x0_cadre,y0_cadre,l_cadre,h_cadre,l_objet,h_objet):return (center_1d(x0_cadre,l_cadre,l_objet),center_1d(y0_cadre,h_cadre,h_objet))defcadre_couleur(rang,clr,x0_colbox,y0_colbox):draw_rect(x0_colbox+1+d_colbox*(rang%nx_colbox),y0_colbox+1+d_colbox*(rang//nx_colbox),d_colbox-2,d_colbox-2,clr)defaffiche_sapin(x0,y0):globalscorei,x=0,0whilei<len(MBS):v=MBS[i];mv,c=v&15,(v&0x70)>>4ifv&128:i+=1;c|=MBS[i]<<3c+=1;i+=1whilec:cw=min(c,L_MBS-x)fill_rect(x0+x,y0,cw,1,PALETTE_MBS[mv])fill_rect(x0+x+L_MBS,y0,cw,1,PALETTE_MBS_CLAIR[mv])c-=cw;x=(x+cw)%L_MBS;y0+=x==0score+=score_couleurs(PALETTE_MBS[mv],C_BLANC)*cwdefcurseur(Xc,Yc,clr=None,double=1,clrdef=C_NOIR):for (i,j)in((-2,0),(-1,0),(1,0),(2,0),(0,-2),(0,-1),(0,1),(0,2)):forkinrange(double+1):x,y=Xc+L_MBS*k+i,Yc+j;c=get_pixel(x,y)set_pixel(x,y,clrorcandtuple([255-vforvinget_pixel(x,y)])orclrdef)defscore_rect(x0,y0,w,h,cd=None):score=0fory0inrange(y0,y0+h):forxinrange(x0,x0+w):score+=score_pixel(x,y0,cd)returnscoredeffill_rect_interface(x,y,w,h,c,dans_menu=False):globalscoreifdans_menuorx<x0_cadre+L_CADRE-1ory<H_CADRE-1:ifnotdans_menu:ifx<=L_MBS+x0_cadre:w+=x-1-L_MBS-x0_cadre;x=1+L_MBS+x0_cadreify<=0:h+=y-1;y=1ifnotdans_menu:w,h=dans_menuand(w,h)or(min(w,L_CADRE-x-1),min(h,H_CADRE-y-1))ifw>0andh>0:ifnotdans_menu:score-=score_rect(x,y,w,h)fill_rect(x,y,w,h,c)ifnotdans_menu:score+=score_rect(x,y,w,h,c)defdessine(x,y,forme,taille,clr,dans_menu=False):x+=L_MBS*(1-dans_menu)ifforme==F_CARRE:fill_rect_interface(x,y,taille,taille,clr,dans_menu)elifforme==F_DISQUE:foriinrange(-taille+1,taille):forjinrange(taille-1,-1,-1):ifi**2+j**2<taille**2:breakfill_rect_interface(x-j,y+i,2*j+1,1,clr,dans_menu)elifformein(F_TRIANGLE_HG,F_TRIANGLE_BG,F_TRIANGLE_HD,F_TRIANGLE_BD):foriinrange(taille-1):fill_rect_interface(x+(formein(F_TRIANGLE_HD,F_TRIANGLE_BD)andi+2-taille),y+i*(formein(F_TRIANGLE_HG,F_TRIANGLE_HD)and1or-1),taille-i-1,1,clr,dans_menu)elifformein(F_TRIANGLE_HM,F_TRIANGLE_BM):foriinrange(-taille,taille):fill_rect_interface(x+i,y+(forme==F_TRIANGLE_HMandabs(i)orforme==F_TRIANGLE_BMand1-taille),1,taille-abs(i),clr,dans_menu)elifformein(F_TRIANGLE_GM,F_TRIANGLE_DM):foriinrange(1-taille,taille):fill_rect_interface(x+(forme==F_TRIANGLE_GMandabs(i)orforme==F_TRIANGLE_DMand1-taille),y+i,taille-abs(i),1,clr,dans_menu)x_score,s_score=None,Nonedefreaffiche_score(x0_score,y0_score,l_score,c):globalscore,x_score,s_scoreifnotx_scoreisNone:draw_string(s_score,x_score,y0_score,C_BLANC)n_chiffres_score,s_score=len(str(abs(score))),"{:d}"ifn_chiffres_score-3<N_CHIFFRES_SCORE:s_score+="."+"{:0"+str(min(3,N_CHIFFRES_SCORE-n_chiffres_score+3))+"}"s_score=s_score.format(score//1000,score%1000);x_score=center_1d(x0_score,l_score,l_str(s_score))draw_string(s_score,x_score,y0_score,c)defconfig_interface():globalx0_cadre,x0_score_xy,y0_score,y0_xy,l_score_xy,x0_taille,y0_taille,y0_px,l_taille,x0_taille_fleches,x0_formbox,y0_formbox,n_formbox,d_formbox,d_formbox12,x0_colbox,y0_colbox,nx_colbox,ny_colbox,d_colboxx0_cadre=L_ECRAN<=2*L_MBSand-1n1_colbox,n2_colbox=1,1marge=H_ECRAN-H_CADRE;l_score_xy=max(l_str("."+"0"*N_CHIFFRES_SCORE),l_str("(000;000)"));l_taille=l_str("000")x0_score_xy,y0_score,y0_xy=0,center_1d(H_CADRE,marge//2,H_FONT),center_1d(H_CADRE+marge//2,marge//2,H_FONT)x0_formbox,y0_formbox,l_formbox,h_formbox=l_score_xy,H_CADRE,(L_ECRAN-l_score_xy-l_taille)//2-H_FONT,marge;l1_formbox,l2_formbox=l_formbox,h_formboxx0_taille,y0_taille=x0_formbox+l_formbox,center_1d(H_CADRE,marge,H_FONT2);x0_taille_fleches=x0_taille+l_taillex0_colbox,y0_colbox=x0_taille+l_taille+H_FONT2,H_CADRE;l_colbox,h_colbox=L_ECRAN-x0_colbox,marge;l1_colbox,l2_colbox=l_colbox,h_colboxd_formbox,d_colbox=(marge-2)*2//3,margeifnot(d_formbox%2):d_formbox-=1n_formbox,n1_colbox=l1_formbox//d_formbox,len(PALETTE_MBS)whilel2_formbox<d_formbox*3//2orl1_formbox<d_formbox*n_formboxornotd_formbox%2orn_formbox<5:d_formbox-=1;n_formbox=l1_formbox//d_formboxd_formbox12=d_formbox//2;n_formbox-=(n_formbox%2)+1x0_formbox,y0_formbox=center_2d(x0_formbox,y0_formbox,l_formbox,h_formbox,n_formbox*d_formbox,d_formbox*3//2);whilel1_colbox<d_colbox*n1_colboxorl2_colbox<d_colbox*n2_colbox:d_colbox-=1;n2_colbox=marge//d_colbox;n1_colbox=ceil_div(len(PALETTE_MBS),n2_colbox)nx_colbox,ny_colbox=n1_colbox,n2_colboxx0_colbox,y0_colbox=center_2d(x0_colbox,y0_colbox,l_colbox,h_colbox,nx_colbox*d_colbox,ny_colbox*d_colbox)y0_formbox+=d_formbox12defaffiche_interface():draw_rect(x0_cadre,0,L_CADRE,H_CADRE,C_BLEU)# 9-46-59-96-123-165
draw_string("px",center_1d(x0_taille,l_taille,l_str("px")),y0_taille+H_FONT,C_VIOLET)x0_fleches=x0_taille_fleches+H_FONTdessine(x0_fleches,y0_taille,F_TRIANGLE_HM,H_FONT,C_VIOLET,True)dessine(x0_fleches,y0_taille+H_FONT2,F_TRIANGLE_BM,H_FONT,C_VIOLET,True)foriinrange(len(PALETTE_MBS)):fill_rect(x0_colbox+2+d_colbox*(i%nx_colbox),y0_colbox+2+d_colbox*(i//nx_colbox),d_colbox-4,d_colbox-4,PALETTE_MBS[i])xc_formbox,yc_formbox=x0_formbox+n_formbox*d_formbox//2,y0_formbox+d_formbox12draw_rect(x0_formbox,y0_formbox,d_formbox*n_formbox+1,d_formbox,C_BLEU)foriinrange(1,n_formbox):fill_rect(x0_formbox+i*d_formbox,y0_formbox+1,1,d_formbox-2,C_BLEU)dessine(xc_formbox,y0_formbox-2,F_TRIANGLE_BM,d_formbox12-1,C_BLEU,True)dessine(x0_formbox-d_formbox12-1,y0_formbox+d_formbox12,F_TRIANGLE_GM,d_formbox12,C_BLEU,True)dessine(x0_formbox+d_formbox*n_formbox+d_formbox12+1,y0_formbox+d_formbox12,F_TRIANGLE_DM,d_formbox12,C_BLEU,True)#>>>>>>> AUTRES FONCTIONS <<<<<<<
defceil_div(d,n):return-((-d)//n)# quotient arrondi par exces
defprint_write(s,fichier=None):print(s)iffichier:fichier.write(s+"\n")#>>>>>>>> INITIALISATION <<<<<<<<
rangCouleur,rangForme=11,1;Clr,Forme=PALETTE_MBS[rangCouleur],FORMES[rangForme]PC_init();config_interface()Xc,Yc,Taille,chgClr,chgForme,chgTaille,chgX,chgY,ajoutForme,x_taille,x_xy,score=L_MBS//2,H_MBS//2,7,1,1,1,1,1,False,None,None,0xc_formbox=x0_formbox+n_formbox*d_formbox//2;yc_formbox=y0_formbox+d_formbox12affiche_interface();affiche_sapin(x0_cadre+1,1)foreltinTBS:dessine(elt[0]+x0_cadre,elt[1],elt[2],max(1,min(999,elt[3])),PALETTE_MBS[elt[4]])score-=D_SCOREcurseur(Xc,Yc);reaffiche_score(x0_score_xy,y0_score,l_score_xy,C_ROUGE)#>>>>>>> BOUCLE PRINCIPALE <<<<<<<
try:whilenotescape_key():ifchgClr:foriinrange(2):cadre_couleur(rangCouleur,iandC_NOIRorC_BLANC,x0_colbox,y0_colbox)ifi:breakrangCouleur=(rangCouleur+chgClr)%len(PALETTE_MBS);Clr=PALETTE_MBS[rangCouleur];l_formdess=d_formbox12-1curseur(xc_formbox,yc_formbox,C_BLANC,0);dessine(xc_formbox,yc_formbox,FORMES[rangForme],l_formdess,Clr,1);curseur(xc_formbox,yc_formbox,None,0,C_NOIR);sleep(0.2)ifchgXorchgY:foriinrange(2):curseur(Xc,Yc)# efface/affiche par passage en negatif
ifnotx_xyisNone:draw_string(s_xy,x_xy,y0_xy,iandC_BLEUorC_BLANC)ifi:breakXc,Yc=max(1,min(L_MBS,Xc+chgX)),max(1,min(H_MBS,Yc+chgY));s_xy="({:d};{:d})".format(Xc,Yc);x_xy=center_1d(x0_score_xy,l_score_xy,l_str(s_xy))sleep(0.05)ifchgTaille:foriinrange(2):ifnotx_tailleisNone:draw_string(str(Taille),x_taille,y0_taille,iandC_VIOLETorC_BLANC)ifi:breakTaille=max(1,min(999,Taille+chgTaille));x_taille=center_1d(x0_taille,l_taille,l_str(str(Taille)))sleep(0.3)ifchgForme:l_formdess=d_formbox12-1;sleep(0.2)foriinrange(2):forkinrange(-(n_formbox-1)//2,(n_formbox+1)//2,1):dessine(xc_formbox+k*d_formbox,yc_formbox,FORMES[(rangForme+k)%len(FORMES)],l_formdess,notiandC_BLANCork==0andClrorC_GRIS,1)# bypass : dans_menu=1
curseur(xc_formbox,yc_formbox,notiandC_BLANC,0)ifi:breakrangForme=(rangForme+chgForme)%len(FORMES);Forme=FORMES[rangForme]ifajoutForme:modifie=True;curseur(Xc,Yc);dessine(Xc,Yc,Forme,Taille,Clr);TBS.append((Xc-x0_cadre,Yc,Forme,Taille,rangCouleur));score-=D_SCORE;curseur(Xc,Yc);reaffiche_score(x0_score_xy,y0_score,l_score_xy,C_ROUGE);sleep(0.3)chgClr,chgForme,chgTaille=keydown(KEY_RIGHTPARENTHESIS)or-keydown(KEY_LEFTPARENTHESIS),keydown(KEY_DIVISION)-keydown(KEY_MULTIPLICATION),keydown(KEY_PLUS)-keydown(KEY_MINUS)ajoutForme,chgX=keydown(KEY_EXE)orkeydown(KEY_OK)orkeydown(KEY_5),(keydown(KEY_RIGHT)orkeydown(KEY_9)orkeydown(KEY_6)orkeydown(KEY_3))-(keydown(KEY_LEFT)orkeydown(KEY_7)orkeydown(KEY_4)orkeydown(KEY_1))chgY=(keydown(KEY_DOWN)orkeydown(KEY_1)orkeydown(KEY_2)orkeydown(KEY_3))-(keydown(KEY_UP)orkeydown(KEY_7)orkeydown(KEY_8)orkeydown(KEY_9))exceptKeyboardInterrupt:pass#>>>>>>>>>> SAUVEGARDE <<<<<<<<<<
TBS=["({:<3d},{:<3d},{:<13s},{:<3d},{:<2d}),".format(cmd[0],cmd[1],nom_forme_const(cmd[2]),cmd[3],cmd[4])forcmdinTBS]try:FileNotFoundError# HP Prime throws OSError instead of FileNotFoundError (undefined)
except:FileNotFoundError=OSErrornum_fichier,fichier=0,Noneifmodifie:whileTrue:try:try:nom_fichier="tbs{:d}.py".format(num_fichier);fichier=open(nom_fichier,"r");fichier.close();num_fichier+=1except (FileNotFoundError,OSError):fichier=open(nom_fichier,"w");breakexcept:breakl_line,n_cols,line_maxchars=len(TBS)andlen(TBS[0]),1,shell_viscols()-1ifnotline_maxcharsisNone:forcmdinTBS[1:]:ifl_line+len(cmd)<line_maxchars:n_cols+=1;l_line+=len(cmd)l_line=line_maxchars+1;n_cols+=1whilel_line>line_maxcharsandn_cols>1:n_cols-=1;max_cols=[0]*n_colsforiinrange(len(TBS)):max_cols[i%n_cols]=max(max_cols[i%n_cols],len(TBS[i]))l_line=sum(max_cols)iffichier:fichier.write("try: from nbs_defs import *\nexcept ImportError: pass\n\n# Dessine-nous ici Ton Beau Sapin\n\n# liste a completer d'elements :\n# (x, y, forme, taille, couleur)\n\n#pour les formes :\n")forvinFORMES:fichier.write("# - {:<13s} : {:s}\n".format(nom_forme_const(v),v==F_CARREand'carre'orv==F_DISQUEand'O'orv==F_TRIANGLE_HGand" |/"orv==F_TRIANGLE_HDand"\\|"orv==F_TRIANGLE_BGand" |\\"orv==F_TRIANGLE_BDand"/|" \
orv==F_TRIANGLE_HMand" /\\"orv==F_TRIANGLE_BMand"\\/"orv==F_TRIANGLE_GMand" <|"or"|>"))fichier.write("#(triangles rectangles isoceles)\n\n#pour les couleurs :\n")foriinrange(len(PALETTE_MBS)):c=PALETTE_MBS[i];fichier.write("# - {:<2d} : ({:<3d},{:<3d},{:<3d})\n".format(i,c[0],c[1],c[2]))print("\n# Score: {:s}".format(s_score));print_write("\nTBS = [\n#"+",".join(["( X , Y , FORME , T ,C )"]*n_cols),fichier)foriinrange(len(TBS)):ifnot(i%n_cols):s_line=""s_line+=("{0: <"+str(max_cols[i%n_cols])+"}").format(TBS[i])if (i%n_cols)+1==n_colsori+1==len(TBS):print_write(s_line,fichier)print_write("]",fichier);iffichier:fichier.close();print("Liste ecrite dans {:s}".format(nom_fichier))
During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:
Ensure the proper functioning of the site (essential cookies); and
Track your browsing to send you personalized communications if you have created a professional account on the site and can be contacted (audience measurement cookies).
With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.