]> git.ayabusa.dev Git - a-la-carte.git/commitdiff
This is a mess, but it's fucking finished, thx god
authorayabusa <lebgpub@gmail.com>
Fri, 27 Dec 2024 13:06:22 +0000 (14:06 +0100)
committerayabusa <lebgpub@gmail.com>
Fri, 27 Dec 2024 13:06:22 +0000 (14:06 +0100)
src/compressor.py [new file with mode: 0644]
src/game.py
src/game_opti.py
src/game_opti_stage1.py [new file with mode: 0644]
src/game_opti_stage2.py [new file with mode: 0644]
src/sprites/_converter.py
src/sprites/sprites_converted.txt
src/test.py [new file with mode: 0644]

diff --git a/src/compressor.py b/src/compressor.py
new file mode 100644 (file)
index 0000000..319aaf8
--- /dev/null
@@ -0,0 +1,48 @@
+sprites = {'assiette': (0, 3, 20, 17,
+              'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),
+ 'caisse': (0, 0, 20, 20,
+            'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),
+ 'gui_art': (0, 0, 56, 55,
+             'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),
+ 'money_icon': (0, 0, 8, 11,
+                'ggccccgggcggggcgcggggggccggcgggccggcgggccggccggccggccggccggccggccggggggcgcggggcgggccccgg'),
+ 'oignon': (3, 3, 16, 13,
+            'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),
+ 'oignon_coupe': (3, 5, 13, 14,
+                  'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),
+ 'pain': (2, 4, 17, 14,
+          'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+ 'pain_bas': (2, 12, 17, 5,
+              '00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+ 'pain_haut': (2, 0, 17, 10,
+               'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),
+ 'planche': (0, 5, 20, 14,
+             'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),
+ 'player_down': (3, 0, 15, 20,
+                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'player_left': (3, 0, 15, 20,
+                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),
+ 'player_right': (2, 0, 15, 20,
+                  'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),
+ 'player_up': (3, 0, 15, 20,
+               'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'poele': (0, 0, 19, 19,
+           'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),
+ 'poubelle': (0, 0, 20, 20,
+              'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),
+ 'salade': (1, 4, 18, 13,
+            'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),
+ 'salade_cuite': (2, 7, 15, 9,
+                  'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),
+ 'steak': (3, 3, 14, 14,
+           'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),
+ 'steak_cuit': (3, 5, 15, 9,
+                'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),
+ 'tapis': (0, 0, 20, 20,
+           'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),
+ 'time_icon': (0, 0, 8, 11,
+               'gggccggggggccgggggccccgggcggggcgcggggcgccgggcggccggcgggccgggcggccggggggcgcggggcgggccccgg'),
+ 'tomate': (4, 3, 12, 13,
+            'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),
+ 'tomate_coupe': (3, 4, 13, 11,
+                  'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
index 7edcdf72c457730721f347d7959368e7f09d7be5..9f3ff2691b374db642bdb0aaf90247080be9cb16 100644 (file)
@@ -76,6 +76,13 @@ def draw_sprite(sprite_name: str, x: int, y: int, multiplier=1)->None:
                 curx += 1
             curx=0
             cury+=1
+            
+def save_data(hs):
+    try:
+        f = open("alacarte.sav","w")
+        f.truncate(0)
+        f.write(hs)
+    except:return
 
 class Ingredient:
     def __init__(self, i_nom):
@@ -174,8 +181,22 @@ class Game:
         self.missions = []
         self.old_missions = []
         self.pro_mission = (time.monotonic(), 3)
-        self.g_timer = (time.monotonic(), 180)
+        self.g_timer = (time.monotonic(), 5)
         self.g_money = 25
+    def gameover(self):
+        global highscore
+        fill_rect(52,12,216,196,colors[4])
+        fill_rect(50,12,2,196,colors[0])
+        fill_rect(268,12,2,196,colors[0])
+        fill_rect(52,10,216,2,colors[0])
+        fill_rect(52,67,216,2,colors[0])
+        fill_rect(52,208,216,2,colors[0])
+        draw_sprite("gui_art",52,12)
+        draw_string("GAME OVER", 115, 25, colors[0], colors[4])
+        draw_string("Ton score: "+str(self.g_money), 65, 85, colors[0], colors[4])
+        if self.g_money>highscore: highscore=self.g_money
+        draw_string("Meilleur score: "+str(self.g_money), 65, 110, colors[0], colors[4])
+        draw_string("OK pour aller au menu", 60, 190, colors[0], colors[4], True)
     def do_mission_step(self):
         if time.monotonic()-self.pro_mission[0]>self.pro_mission[1]:
             self.missions.append(Mission())
@@ -388,13 +409,10 @@ class Gui:
     def __init__(self) -> None:
         self.selected = 0
         self.render()
+        self.state = 0
     def redraw_text(self):
         draw_string("A la carte", 200, 10, colors[3], colors[15])
-        but_colors = [colors[4]]*3
-        but_colors[self.selected]=colors[3]
-        but = ["Jouer", "Options", "Aide"]
-        for i in range(len(but)):
-            draw_string(but[i], 200, 40+i*20, but_colors[i], colors[15])
+        draw_string("> Jouer (OK)", 200, 40, colors[4], colors[15])
     def render(self):
         fill_rect(0,0,320,222,colors[15])
         draw_sprite("gui_art", 0, 0, 4)
@@ -403,18 +421,13 @@ class Gui:
         while True:
             if ion.keydown(ion.KEY_OK) or ion.keydown(ion.KEY_HOME):
                 break
-            elif ion.keydown(ion.KEY_UP):
-                self.selected = (self.selected-1)%3
-                self.redraw_text()
-                time.sleep(0.2)
-            elif ion.keydown(ion.KEY_DOWN):
-                self.selected = (self.selected+1)%3
-                self.redraw_text()
-                time.sleep(0.2)
-        return self.selected
-
 
 
+highscore=0
+try:
+    with open("alacarte.sav","r") as f:
+        highscore=int(f.readline())
+except:pass
 
 gui = Gui()
 gui.loop()
@@ -423,6 +436,17 @@ game.render_all()
 game.gui_first_render()
 fill_rect(0,0,320,40,colors[2])
 while True:
+    if time.monotonic()-game.g_timer[0]>game.g_timer[1]:
+        game.gameover()
+        while not (ion.keydown(ion.KEY_OK) or ion.keydown(ion.KEY_HOME) or ion.keydown(ion.KEY_POWER)):
+            pass
+        gui = Gui()
+        time.sleep(1)
+        gui.loop()
+        game = Game(0)
+        game.render_all()
+        game.gui_first_render()
+        fill_rect(0,0,320,40,colors[2])
     game.scan_keyboard()
     game.do_timer_step()
     game.do_mission_step()
index 6d3ef3bb59dfc0b42d046de94f58e234bb271ea4..eb0dffe1968b1333525dfa6fbbe8c3b5d125eb83 100644 (file)
@@ -1,22 +1,25 @@
-_S='poubelle'
-_R='planche'
-_Q='pain_haut'
-_P='pain_bas'
-_O='gui_art'
-_N='down'
-_M=True
-_L=None
-_K='tomate'
-_J='steak'
-_I='oignon'
-_H='assiette'
-_G='steak_cuit'
-_F='salade'
-_E='caisse'
-_D='pain'
-_C='tomate_coupe'
-_B='salade_cuite'
-_A='oignon_coupe'
+_V='alacarte.sav'
+_U='time_icon'
+_T='poubelle'
+_S='planche'
+_R='pain_haut'
+_Q='pain_bas'
+_P='money_icon'
+_O='down'
+_N='gui_art'
+_M=None
+_L='tomate'
+_K='steak'
+_J='oignon'
+_I='assiette'
+_H='steak_cuit'
+_G='salade'
+_F='caisse'
+_E='pain'
+_D='tomate_coupe'
+_C='salade_cuite'
+_B='oignon_coupe'
+_A=True
 try:
        import os
        if hasattr(os,'environ'):os.environ['KANDINSKY_OS_MODE']='0';os.environ['KANDINSKY_ZOOM_RATIO']='4'
@@ -25,7 +28,7 @@ from kandinsky import*
 import ion,time,random
 print('Game started')
 colors=[color(i)for i in[(26,28,44),(93,39,93),(177,62,83),(239,125,87),(255,205,117),(167,240,112),(56,183,100),(37,113,121),(41,54,111),(59,93,201),(65,166,246),(115,239,247),(244,244,244),(148,176,194),(86,108,134),(51,60,87)]]
-sprites={_H:(0,3,20,17,'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),_E:(0,0,20,20,'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),_O:(0,0,56,55,'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),_I:(3,3,16,13,'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),_A:(3,5,13,14,'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),_D:(2,4,17,14,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),_P:(2,12,17,5,'00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),_Q:(2,0,17,10,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),_R:(0,5,20,14,'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),'player_down':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),'player_left':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),'player_right':(2,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),'player_up':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),'poele':(0,0,19,19,'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),_S:(0,0,20,20,'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),_F:(1,4,18,13,'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),_B:(2,7,15,9,'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),_J:(3,3,14,14,'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),_G:(3,5,15,9,'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),'tapis':(0,0,20,20,'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),_K:(4,3,12,13,'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),_C:(3,4,13,11,'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
+sprites={_I:(0,3,20,17,'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),_F:(0,0,20,20,'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),_N:(0,0,56,55,'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),_P:(0,0,8,11,'ggccccgggcggggcgcggggggccggcgggccggcgggccggccggccggccggccggccggccggggggcgcggggcgggccccgg'),_J:(3,3,16,13,'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),_B:(3,5,13,14,'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),_E:(2,4,17,14,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),_Q:(2,12,17,5,'00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),_R:(2,0,17,10,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),_S:(0,5,20,14,'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),'player_down':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),'player_left':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),'player_right':(2,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),'player_up':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),'poele':(0,0,19,19,'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),_T:(0,0,20,20,'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),_G:(1,4,18,13,'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),_C:(2,7,15,9,'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),_K:(3,3,14,14,'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),_H:(3,5,15,9,'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),'tapis':(0,0,20,20,'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),_U:(0,0,8,11,'gggccggggggccgggggccccgggcggggcgcggggcgccgggcggccggcgggccgggcggccggggggcgcggggcgggccccgg'),_L:(4,3,12,13,'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),_D:(3,4,13,11,'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
 key_pressed=[False]*5
 maps=[[[2,2,2,3,3,2,11,2],[12,1,1,1,1,1,1,4],[6,0,0,4,9,0,0,5],[7,0,0,2,8,0,0,2],[1,0,0,1,1,13,13,1]]]
 def draw_sprite(sprite_name,x,y,multiplier=1):
@@ -37,35 +40,38 @@ def draw_sprite(sprite_name,x,y,multiplier=1):
                        if px!=16 and px!=17:fill_rect(x+offx*multiplier+curx*multiplier,y+offy*multiplier+cury*multiplier,multiplier,multiplier,colors[px])
                        curx+=1
                curx=0;cury+=1
+def save_data(hs):
+       try:f=open(_V,'w');f.truncate(0);f.write(hs)
+       except:return
 class Ingredient:
        def __init__(self,i_nom):self.i_nom=i_nom
 class Assiette:
        def __init__(self):self.a_ingredients=[]
        def render(self,x,y,multiplier):
-               draw_sprite(_H,x,y,multiplier)
+               draw_sprite(_I,x,y,multiplier)
                if self.a_ingredients==[]:return
-               if _D in self.a_ingredients:draw_sprite(_P,x,y,multiplier)
-               if _B in self.a_ingredients:draw_sprite(_B,x+multiplier,y-multiplier,multiplier)
-               if _G in self.a_ingredients:draw_sprite(_G,x,y-2*multiplier,multiplier)
-               if _A in self.a_ingredients:draw_sprite(_A,x+multiplier,y-4*multiplier,multiplier)
-               if _C in self.a_ingredients:draw_sprite(_C,x-2*multiplier,y-multiplier,multiplier)
-               if _D in self.a_ingredients:draw_sprite(_Q,x,y,multiplier)
+               if _E in self.a_ingredients:draw_sprite(_Q,x,y,multiplier)
+               if _C in self.a_ingredients:draw_sprite(_C,x+multiplier,y-multiplier,multiplier)
+               if _H in self.a_ingredients:draw_sprite(_H,x,y-2*multiplier,multiplier)
+               if _B in self.a_ingredients:draw_sprite(_B,x+multiplier,y-4*multiplier,multiplier)
+               if _D in self.a_ingredients:draw_sprite(_D,x-2*multiplier,y-multiplier,multiplier)
+               if _E in self.a_ingredients:draw_sprite(_R,x,y,multiplier)
 class Mission:
        def __init__(self):
-               self.m_ingredients=[_D,_G];self.m_time=time.monotonic(),random.randint(40,60)
-               if random.getrandbits(1)==1:self.m_ingredients.append(_B)
-               if random.getrandbits(1)==1:self.m_ingredients.append(_A)
+               self.m_ingredients=[_E,_H];self.m_time=time.monotonic(),random.randint(40,60)
                if random.getrandbits(1)==1:self.m_ingredients.append(_C)
+               if random.getrandbits(1)==1:self.m_ingredients.append(_B)
+               if random.getrandbits(1)==1:self.m_ingredients.append(_D)
        def is_finished(self):return time.monotonic()-self.m_time[0]>self.m_time[1]
-       def re_render(self,place):offst=place*61;fill_rect(offst+4,26,38,12,colors[3]);draw_string(str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))%60),offst+5,26,colors[12],colors[3],_M);fill_rect(offst+2,26,2,14,colors[0]);fill_rect(offst+4,38,38,2,colors[0]);fill_rect(offst+41,37,2,2,colors[0])
+       def re_render(self,place):offst=place*61;fill_rect(offst+4,26,38,12,colors[3]);draw_string(str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))%60),offst+5,26,colors[12],colors[3],_A);fill_rect(offst+2,26,2,14,colors[0]);fill_rect(offst+4,38,38,2,colors[0]);fill_rect(offst+41,37,2,2,colors[0])
        def first_render(self,place):
                offst=place*61;fill_rect(offst+3,3,27,34,colors[3]);fill_rect(offst+30,3,27,34,colors[3]);fill_rect(offst+3,2,54,2,colors[0]);fill_rect(offst+3,36,54,2,colors[0]);fill_rect(offst+2,3,2,34,colors[0]);fill_rect(offst+56,3,2,34,colors[0]);a=Assiette();a.a_ingredients=self.m_ingredients;a.render(offst+5,5,1)
-               if _B in self.m_ingredients:draw_sprite(_B,offst+26,8,1)
-               if _A in self.m_ingredients:draw_sprite(_A,offst+39,16,1)
-               if _C in self.m_ingredients:draw_sprite(_C,offst+39,1,1)
-               draw_string(str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))%60),offst+5,26,colors[12],colors[3],_M);fill_rect(offst+2,26,2,14,colors[0]);fill_rect(offst+4,38,38,2,colors[0]);fill_rect(offst+41,37,2,2,colors[0])
+               if _C in self.m_ingredients:draw_sprite(_C,offst+26,8,1)
+               if _B in self.m_ingredients:draw_sprite(_B,offst+39,16,1)
+               if _D in self.m_ingredients:draw_sprite(_D,offst+39,1,1)
+               draw_string(str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(time.monotonic()-self.m_time[0]))%60),offst+5,26,colors[12],colors[3],_A);fill_rect(offst+2,26,2,14,colors[0]);fill_rect(offst+4,38,38,2,colors[0]);fill_rect(offst+41,37,2,2,colors[0])
 class Player:
-       def __init__(self,game,x,y):self.x=x;self.y=y;self.game=game;self.direction=_N;self.holding=Ingredient(_F);assiette=Assiette();assiette.render(0,0,2)
+       def __init__(self,game,x,y):self.x=x;self.y=y;self.game=game;self.direction=_O;self.holding=Ingredient(_G);assiette=Assiette();assiette.render(0,0,2)
        def draw_player(self):
                draw_sprite('player_'+self.direction,self.x*40,self.y*40+40,2)
                if type(self.holding)==Ingredient:draw_sprite(self.holding.i_nom,self.x*40+10,self.y*40+60)
@@ -75,19 +81,23 @@ class Player:
                if self.y+y_mod<4 and new_el in[0,1]:self.y+=y_mod;self.x+=x_mod
                self.draw_player()
        def do_pickup_action(self):
-               dir,el,elx,ely=self.direction,_L,_L,_L
+               dir,el,elx,ely=self.direction,_M,_M,_M
                if dir=='up':el,elx,ely=self.game.map[self.y-1][self.x],self.x,self.y-1
-               elif dir==_N:el,elx,ely=self.game.map[self.y+1][self.x],self.x,self.y+1
+               elif dir==_O:el,elx,ely=self.game.map[self.y+1][self.x],self.x,self.y+1
                elif dir=='left':el,elx,ely=self.game.map[self.y][self.x-1],self.x-1,self.y
                else:el,elx,ely=self.game.map[self.y][self.x+1],self.x+1,self.y
-               if self.holding!=_L:self.holding=self.game.poser_ingredient(elx,ely,self.holding);self.draw_player()
+               if self.holding!=_M:self.holding=self.game.poser_ingredient(elx,ely,self.holding);self.draw_player()
                else:self.holding=self.game.recup_ingredient(elx,ely);self.draw_player()
 class Game:
-       def __init__(self,mapid):self.mapid=mapid;self.map=maps[mapid];self.player=Player(self,1,1);self.missions=[];self.old_missions=[];self.pro_mission=time.monotonic(),3
+       def __init__(self,mapid):self.mapid=mapid;self.map=maps[mapid];self.player=Player(self,1,1);self.missions=[];self.old_missions=[];self.pro_mission=time.monotonic(),3;self.g_timer=time.monotonic(),5;self.g_money=25
+       def gameover(self):
+               global highscore;fill_rect(52,12,216,196,colors[4]);fill_rect(50,12,2,196,colors[0]);fill_rect(268,12,2,196,colors[0]);fill_rect(52,10,216,2,colors[0]);fill_rect(52,67,216,2,colors[0]);fill_rect(52,208,216,2,colors[0]);draw_sprite(_N,52,12);draw_string('GAME OVER',115,25,colors[0],colors[4]);draw_string('Ton score: '+str(self.g_money),65,85,colors[0],colors[4])
+               if self.g_money>highscore:highscore=self.g_money
+               draw_string('Meilleur score: '+str(self.g_money),65,110,colors[0],colors[4]);draw_string('OK pour aller au menu',60,190,colors[0],colors[4],_A)
        def do_mission_step(self):
-               if time.monotonic()-self.pro_mission[0]>self.pro_mission[1]:self.missions.append(Mission());self.pro_mission=time.monotonic(),random.randint(20,30)
+               if time.monotonic()-self.pro_mission[0]>self.pro_mission[1]:self.missions.append(Mission());self.pro_mission=time.monotonic(),random.randint(15,25)
                for i in range(len(self.missions)):
-                       if self.missions[i].is_finished():self.missions.pop(i);break
+                       if self.missions[i].is_finished():self.g_money-=2;self.missions.pop(i);break
                if self.old_missions!=self.missions:
                        fill_rect(0,0,320,40,colors[2]);self.old_missions=[]
                        for i in range(len(self.missions)):self.missions[i].first_render(i);self.old_missions.append(self.missions[i])
@@ -99,17 +109,22 @@ class Game:
                                el=self.map[i][k]
                                if type(el)==tuple and len(el)==4:
                                        if time.monotonic()>el[2]+el[3]:
-                                               if el[1]==_J:self.map[i][k]=el[0],_G
-                                               if el[1]==_F:self.map[i][k]=el[0],_B
-                                               if el[1]==_I:self.map[i][k]=el[0],_A
-                                               if el[1]==_K:self.map[i][k]=el[0],_C
+                                               if el[1]==_K:self.map[i][k]=el[0],_H
+                                               if el[1]==_G:self.map[i][k]=el[0],_C
+                                               if el[1]==_J:self.map[i][k]=el[0],_B
+                                               if el[1]==_L:self.map[i][k]=el[0],_D
                                                self.draw_element(self.map[i][k],k,i)
                                        else:self.draw_progressbar(k,i,(time.monotonic()-el[2])*18//el[3])
+       def gui_first_render(self):fill_rect(0,208,48,14,colors[3]);fill_rect(0,206,48,2,colors[2]);fill_rect(48,208,2,14,colors[2]);fill_rect(47,207,2,2,colors[2]);draw_string('15',2,209,colors[12],colors[3],_A);draw_sprite(_P,38,209);fill_rect(272,208,48,14,colors[9]);fill_rect(272,206,48,2,colors[8]);fill_rect(270,208,2,14,colors[8]);fill_rect(271,207,2,2,colors[8]);draw_string('00:00',273,209,colors[12],colors[9],_A);draw_sprite(_U,310,209)
+       def gui_re_render(self):
+               draw_string(str(self.g_money),2,209,colors[12],colors[3],_A);seconds=str(int(self.g_timer[1]-(time.monotonic()-self.g_timer[0]))%60)
+               if len(seconds)==1:seconds='0'+seconds
+               draw_string('0'+str(int(self.g_timer[1]-(time.monotonic()-self.g_timer[0]))//60)+':'+seconds,273,209,colors[12],colors[9],_A)
        def draw_progressbar(self,x,y,progress):fill_rect(x*40,y*40+40,40,10,colors[0]);fill_rect(x*40+2,y*40+42,36,6,colors[7]);fill_rect(x*40+2,y*40+42,int(progress)*2,6,colors[5])
        def scan_keyboard(self):
                if ion.keydown(ion.KEY_OK)or ion.keydown(ion.KEY_HOME)or ion.keydown(ion.KEY_POWER):self.player.do_pickup_action();time.sleep(.2)
                elif ion.keydown(ion.KEY_UP):self.player.direction='up';self.player.move(0,-1);time.sleep(.1)
-               elif ion.keydown(ion.KEY_DOWN):self.player.direction=_N;self.player.move(0,1);time.sleep(.1)
+               elif ion.keydown(ion.KEY_DOWN):self.player.direction=_O;self.player.move(0,1);time.sleep(.1)
                elif ion.keydown(ion.KEY_LEFT):self.player.direction='left';self.player.move(-1,0);time.sleep(.1)
                elif ion.keydown(ion.KEY_RIGHT):self.player.direction='right';self.player.move(1,0);time.sleep(.1)
        def render_all(self):self.draw_map(self.mapid);self.player.draw_player()
@@ -120,14 +135,14 @@ class Game:
                elif el==1:fill_rect(x*40,y*40+40,40,4,colors[3]);fill_rect(x*40,y*40+40+4,40,2,colors[1]);fill_rect(x*40,y*40+40+6,40,8,colors[2]);fill_rect(x*40,y*40+40+14,40,12,colors[15]);fill_rect(x*40,y*40+40+26,40,14,colors[14])
                elif el==2:fill_rect(x*40,y*40+40,40,40,colors[4])
                elif el==3:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite('poele',x*40,y*40+40,2)
-               elif el==4:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_R,x*40,y*40+40,2)
-               elif el==5:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_H,x*40,y*40+42,2);draw_sprite(_H,x*40,y*40+38,2);draw_sprite(_H,x*40,y*40+34,2)
-               elif el==6:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_E,x*40,y*40+40,2);draw_sprite(_I,x*40,y*40+40,2)
-               elif el==7:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_E,x*40,y*40+40,2);draw_sprite(_F,x*40,y*40+40,2)
-               elif el==8:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_E,x*40,y*40+40,2);draw_sprite(_J,x*40,y*40+40,2)
-               elif el==9:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_E,x*40,y*40+40,2);draw_sprite(_D,x*40,y*40+40,2)
-               elif el==11:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_S,x*40,y*40+40,2)
-               elif el==12:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_E,x*40,y*40+40,2);draw_sprite(_K,x*40,y*40+40,2)
+               elif el==4:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_S,x*40,y*40+40,2)
+               elif el==5:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_I,x*40,y*40+42,2);draw_sprite(_I,x*40,y*40+38,2);draw_sprite(_I,x*40,y*40+34,2)
+               elif el==6:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_F,x*40,y*40+40,2);draw_sprite(_J,x*40,y*40+40,2)
+               elif el==7:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_F,x*40,y*40+40,2);draw_sprite(_G,x*40,y*40+40,2)
+               elif el==8:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_F,x*40,y*40+40,2);draw_sprite(_K,x*40,y*40+40,2)
+               elif el==9:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_F,x*40,y*40+40,2);draw_sprite(_E,x*40,y*40+40,2)
+               elif el==11:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_T,x*40,y*40+40,2)
+               elif el==12:fill_rect(x*40,y*40+40,40,40,colors[4]);draw_sprite(_F,x*40,y*40+40,2);draw_sprite(_L,x*40,y*40+40,2)
                elif el==13:draw_sprite('tapis',x*40,y*40+40,2)
                if type(element)==tuple:draw_sprite(element[1],x*40,y*40+40,2)
        def draw_map(self,mapid):
@@ -137,14 +152,14 @@ class Game:
                old_el=self.map[ely][elx]
                if type(old_el)==tuple and type(old_el[1])!=Assiette:return holding
                if type(holding)==Ingredient:
-                       result=_L;el=old_el,holding.i_nom
+                       result=_M;el=old_el,holding.i_nom
                        if old_el==11:return
                        elif old_el==2:0
-                       elif old_el==3 and holding.i_nom==_J:el=el[0],el[1],time.monotonic(),8
-                       elif old_el==4 and(holding.i_nom==_I or holding.i_nom==_F or holding.i_nom==_K):el=el[0],el[1],time.monotonic(),5
+                       elif old_el==3 and holding.i_nom==_K:el=el[0],el[1],time.monotonic(),8
+                       elif old_el==4 and(holding.i_nom==_J or holding.i_nom==_G or holding.i_nom==_L):el=el[0],el[1],time.monotonic(),5
                        elif type(old_el)==tuple and type(old_el[1])==Assiette:
                                n=holding.i_nom
-                               if n==_B or n==_C or n==_A or n==_D or n==_G:
+                               if n==_C or n==_D or n==_B or n==_E or n==_H:
                                        if n not in self.map[ely][elx][1].a_ingredients:self.map[ely][elx][1].a_ingredients.append(n);self.map[ely][elx][1].render(elx*40,ely*40+40,2)
                                        else:return holding
                                else:return holding
@@ -154,36 +169,45 @@ class Game:
                elif type(holding)==Assiette:
                        if old_el==11:return
                        elif old_el==2:self.map[ely][elx]=old_el,holding;holding.render(elx*40,ely*40+40,2);return
+                       elif old_el==13:
+                               for i in self.missions:
+                                       if set(i.m_ingredients)==set(holding.a_ingredients):self.g_money+=10;self.missions.remove(i);return
+                               return holding
                        else:return holding
        def recup_ingredient(self,elx,ely):
                el=self.map[ely][elx]
                if type(el)==int:
                        if el==5:return Assiette()
-                       elif el==6:return Ingredient(_I)
-                       elif el==7:return Ingredient(_F)
-                       elif el==8:return Ingredient(_J)
-                       elif el==9:return Ingredient(_D)
-                       elif el==12:return Ingredient(_K)
+                       elif el==6:return Ingredient(_J)
+                       elif el==7:return Ingredient(_G)
+                       elif el==8:return Ingredient(_K)
+                       elif el==9:return Ingredient(_E)
+                       elif el==12:return Ingredient(_L)
                        return
                elif type(el[1])==Assiette:self.map[ely][elx]=2;self.draw_element(2,elx,ely);return el[1]
                if el[0]==2:self.map[ely][elx]=2;self.draw_element(2,elx,ely);return Ingredient(el[1])
                elif el[0]==3 or el[0]==4:self.map[ely][elx]=el[0];self.draw_element(el[0],elx,ely);return Ingredient(el[1])
                else:return
 class Gui:
-       def __init__(self):self.selected=0;self.render()
-       def redraw_text(self):
-               draw_string('A la carte',200,10,colors[3],colors[15]);but_colors=[colors[4]]*3;but_colors[self.selected]=colors[3];but=['Jouer','Options','Aide']
-               for i in range(len(but)):draw_string(but[i],200,40+i*20,but_colors[i],colors[15])
-       def render(self):fill_rect(0,0,320,222,colors[15]);draw_sprite(_O,0,0,4);self.redraw_text()
+       def __init__(self):self.selected=0;self.render();self.state=0
+       def redraw_text(self):draw_string('A la carte',200,10,colors[3],colors[15]);draw_string('> Jouer (OK)',200,40,colors[4],colors[15])
+       def render(self):fill_rect(0,0,320,222,colors[15]);draw_sprite(_N,0,0,4);self.redraw_text()
        def loop(self):
-               while _M:
+               while _A:
                        if ion.keydown(ion.KEY_OK)or ion.keydown(ion.KEY_HOME):break
-                       elif ion.keydown(ion.KEY_UP):self.selected=(self.selected-1)%3;self.redraw_text();time.sleep(.2)
-                       elif ion.keydown(ion.KEY_DOWN):self.selected=(self.selected+1)%3;self.redraw_text();time.sleep(.2)
-               return self.selected
+highscore=0
+try:
+       with open(_V,'r')as f:highscore=int(f.readline())
+except:pass
 gui=Gui()
 gui.loop()
 game=Game(0)
 game.render_all()
+game.gui_first_render()
 fill_rect(0,0,320,40,colors[2])
-while _M:game.scan_keyboard();game.do_timer_step();game.do_mission_step()
\ No newline at end of file
+while _A:
+       if time.monotonic()-game.g_timer[0]>game.g_timer[1]:
+               game.gameover()
+               while not(ion.keydown(ion.KEY_OK)or ion.keydown(ion.KEY_HOME)or ion.keydown(ion.KEY_POWER)):0
+               gui=Gui();time.sleep(1);gui.loop();game=Game(0);game.render_all();game.gui_first_render();fill_rect(0,0,320,40,colors[2])
+       game.scan_keyboard();game.do_timer_step();game.do_mission_step();game.gui_re_render()
\ No newline at end of file
diff --git a/src/game_opti_stage1.py b/src/game_opti_stage1.py
new file mode 100644 (file)
index 0000000..2f98d40
--- /dev/null
@@ -0,0 +1,472 @@
+try: # This is for the kandinsky emulator, it will be ignored on the calc
+  import os
+  if hasattr(os, "environ"):
+    os.environ['KANDINSKY_OS_MODE'] = '0'
+    os.environ['KANDINSKY_ZOOM_RATIO'] = "4"
+except: pass
+
+from kandinsky import *
+import ion, time
+import random as ra
+
+print("G started")
+c = [color(i) for i in [(26,28,44),(93,39,93),(177,62,83),(239,125,87),(255,205,117),(167,240,112),(56,183,100),(37,113,121),(41,54,111),(59,93,201),(65,166,246),(115,239,247),(244,244,244),(148,176,194),(86,108,134),(51,60,87)]]
+sprites ={'assiette': (0, 3, 20, 17,
+              'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),
+ 'c': (0, 0, 20, 20,
+            'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),
+ 'ga': (0, 0, 56, 55,
+             'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),
+ 'money_icon': (0, 0, 8, 11,
+                'ggccccgggcggggcgcggggggccggcgggccggcgggccggccggccggccggccggccggccggggggcgcggggcgggccccgg'),
+ 'o': (3, 3, 16, 13,
+            'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),
+ 'o_c': (3, 5, 13, 14,
+                  'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),
+ 'p': (2, 4, 17, 14,
+          'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+ 'p_bas': (2, 12, 17, 5,
+              '00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+ 'p_haut': (2, 0, 17, 10,
+               'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),
+ 'planche': (0, 5, 20, 14,
+             'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),
+ 'pdown': (3, 0, 15, 20,
+                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'pleft': (3, 0, 15, 20,
+                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),
+ 'pright': (2, 0, 15, 20,
+                  'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),
+ 'pup': (3, 0, 15, 20,
+               'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),
+ 'poele': (0, 0, 19, 19,
+           'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),
+ 'poubelle': (0, 0, 20, 20,
+              'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),
+ 'sa': (1, 4, 18, 13,
+            'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),
+ 'sa_cuite': (2, 7, 15, 9,
+                  'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),
+ 's': (3, 3, 14, 14,
+           'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),
+ 's_cuit': (3, 5, 15, 9,
+                'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),
+ 'tapis': (0, 0, 20, 20,
+           'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),
+ 'time_icon': (0, 0, 8, 11,
+               'gggccggggggccgggggccccgggcggggcgcggggcgccgggcggccggcgggccgggcggccggggggcgcggggcgggccccgg'),
+ 't': (4, 3, 12, 13,
+            'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),
+ 't_c': (3, 4, 13, 11,
+                  'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
+
+key_pressed = [False]*5
+
+ma = [[[2, 2, 2, 3, 3, 2, 11, 2], [12, 1, 1, 1, 1, 1, 1, 4], [6, 0, 0, 4, 9, 0, 0, 5], [7, 0, 0, 2, 8, 0, 0, 2], [1, 0, 0, 1, 1, 13, 13, 1]]]
+
+def fr(x,y,w,h,c):
+    fill_rect(x,y,w,h,c)
+
+def dt(t,x,y,c,b,f=False):
+    draw_string(t, x, y, c, b, f)
+def tm():
+    return time.monotonic()
+
+def kd(k):
+    return ion.keydown(k)
+
+def ds(sprite_name, x, y, mu=1) :
+        offx, offy, w, h, data = sprites[sprite_name]
+        curx, cury = 0,0
+        for i in range(h):
+            for k in range(w):
+                px = int(data[w*i+k], 18)
+                if px != 16 and px != 17:
+                    fr(x+offx*mu+curx*mu,y+offy*mu+cury*mu,mu,mu,c[px])
+                curx += 1
+            curx=0
+            cury+=1
+
+def rhg():
+  try:
+    file=open("alacarte.sav","r")
+    best = file.readline()
+    file.close()
+    return int(best)
+  except:
+    return 0
+
+def shg(score):
+  try :
+    file=open("alacarte.sav","w")
+    file.truncate(0)
+    file.write(str(score))
+    file.close()
+  except: pass
+
+class I:
+    def __init__(self, i_nom):
+        self.i_nom = i_nom
+
+class A:
+    def __init__(self):
+        self.ai = []
+    def r(self, x, y, mu):
+        ds("assiette",x,y,mu)
+        if self.ai==[]: return
+        if "p" in self.ai: ds("p_bas",x,y,mu)
+        if "sa_cuite" in self.ai: ds("sa_cuite",x+mu,y-mu,mu)
+        if "s_cuit" in self.ai: ds("s_cuit",x,y-2*mu,mu)
+        if "o_c" in self.ai: ds("o_c",x+mu,y-4*mu,mu)
+        if "t_c" in self.ai: ds("t_c",x-2*mu,y-mu,mu)
+        if "p" in self.ai: ds("p_haut",x,y,mu)
+
+class M:
+    def __init__(self)   :
+        self.mi = ["p", "s_cuit"]
+        self.m_time = (tm(), ra.randint(40,60))
+        if ra.getrandbits(1)==1: self.mi.append("sa_cuite")
+        if ra.getrandbits(1)==1: self.mi.append("o_c")
+        if ra.getrandbits(1)==1: self.mi.append("t_c")
+    def is_finished(self):
+        return tm()-self.m_time[0]>self.m_time[1]
+    def r_r(self, place ):
+        of = place*61
+        fr(of+4,26,38,12,c[3])
+        dt(str(int(self.m_time[1]-(tm()-self.m_time[0]))//60)+":"+str(int(self.m_time[1]-(tm()-self.m_time[0]))%60), of+5, 26, c[12], c[3], True)
+        fr(of+2,26,2,14,c[0])
+        fr(of+4,38,38,2,c[0])
+        fr(of+41,37,2,2,c[0])
+    def f_r(self, place ):
+        of = place*61
+        fr(of+3,3,27,34, c[3])
+        fr(of+30,3,27,34, c[3])
+        #lines v
+        fr(of+3,2,54,2, c[0])
+        fr(of+3,36,54,2, c[0])
+        fr(of+2,3,2,34, c[0])
+        fr(of+56,3,2,34, c[0])
+        a=A()
+        a.ai = self.mi
+        a.r(of+5, 5, 1)
+        if "sa_cuite" in self.mi: ds('sa_cuite', of+26, 8, 1)
+        if "o_c" in self.mi: ds('o_c', of+39, 16, 1)
+        if "t_c" in self.mi: ds('t_c', of+39, 1, 1)
+        dt(str(int(self.m_time[1]-(tm()-self.m_time[0]))//60)+":"+str(int(self.m_time[1]-(tm()-self.m_time[0]))%60), of+5, 26, c[12], c[3], True)
+        fr(of+2,26,2,14,c[0])
+        fr(of+4,38,38,2,c[0])
+        fr(of+41,37,2,2,c[0])
+
+class P:
+    def __init__(self, g, x , y )   :
+        self.x = x
+        self.y = y
+        self.g = g
+        self.di = "down"
+        self.h=None
+        assiette = A()
+        assiette.r(0,0,2)
+    def dp(self) :
+        ds("p"+self.di, self.x*40, self.y*40+40, 2)
+        if type(self. h)==I:
+            ds(self. h.i_nom, self.x*40+10, self.y*40+60)
+        elif type(self. h)==A:
+            self. h.r(self.x*40+10, self.y*40+60, 1)
+    def mv(self, x_mod , y_mod ) :
+        e = ma[g.mapid][self.y][self.x]
+        self.g.de(e, self.x, self.y)
+        new_el=ma[self.g.mapid][self.y+y_mod][self.x+x_mod]
+        if self.y+y_mod<4 and new_el in [0,1]:
+            self.y+=y_mod
+            self.x+=x_mod
+        self.dp()
+    def dpa(self) :
+        dir,e,elx,ely=self.di,None,None,None
+        if dir=="up": e,elx,ely=self.g.map[self.y-1][self.x],self.x,self.y-1
+        elif dir=="down": e,elx,ely=self.g.map[self.y+1][self.x],self.x,self.y+1
+        elif dir=="left": e,elx,ely=self.g.map[self.y][self.x-1],self.x-1,self.y
+        else: e,elx,ely=self.g.map[self.y][self.x+1],self.x+1,self.y
+        if self. h != None:
+            self. h = self.g.pi(elx,ely,self. h)
+            self.dp()
+        else:
+            self. h = self.g.ri(elx,ely)
+            self.dp()
+
+class G:
+    def __init__(self, mapid ):
+        self.mapid = mapid
+        self.map = []
+        for i in ma[mapid]: self.map.append(i[:])
+        self.player = P(self, 1,1)
+        self.ms = []
+        self.old_missions = []
+        self.pmi = (tm(), 1)
+        self.g_timer = (tm(), 40)
+        self.g_money = 0
+    def gover(self):
+        global hg
+        fr(52,12,216,196,c[4])
+        fr(50,12,2,196,c[0])
+        fr(268,12,2,196,c[0])
+        fr(52,10,216,2,c[0])
+        fr(52,67,216,2,c[0])
+        fr(52,208,216,2,c[0])
+        ds("ga",52,12)
+        dt("GAME OVER", 115, 25, c[0], c[4])
+        dt("Ton score: "+str(self.g_money), 65, 85, c[0], c[4])
+        if self.g_money>hg: 
+            hg=self.g_money
+            shg(hg)
+        dt("Meilleur score: "+str(hg), 65, 110, c[0], c[4])
+        dt("OK pour aller au menu", 60, 190, c[0], c[4], True)
+    def dms(self):
+        if tm()-self.pmi[0]>self.pmi[1]:
+            self.ms.append(M())
+            self.pmi = (tm(), ra.randint(15,25))
+        for i in range(len(self.ms)):
+            if self.ms[i].is_finished():
+                self.g_money-=2
+                self.ms.pop(i)
+                break
+        if self.old_missions!=self.ms:
+            fr(0,0,320,40,c[2])
+            self.old_missions=[]
+            for i in range(len(self.ms)):
+                self.ms[i].f_r(i)
+                self.old_missions.append(self.ms[i])
+        else:
+            for i in range(len(self.ms)):
+                self.ms[i].r_r(i)
+    def dts(self):
+        for i in range(5):
+            for k in range(8):
+                e=self.map[i][k]
+                if type(e)==tuple and len(e)==4:
+                    if tm()>e[2]+e[3]:
+                        if e[1] == "s":
+                            self.map[i][k] = (e[0],"s_cuit")
+                        if e[1] == "sa":
+                            self.map[i][k] = (e[0],"sa_cuite")
+                        if e[1] == "o":
+                            self.map[i][k] = (e[0],"o_c")
+                        if e[1] == "t":
+                            self.map[i][k] = (e[0],"t_c")
+                        self.de(self.map[i][k],k,i)
+                    else:
+                        self.draw_progressbar(k,i, (tm()-e[2])*18//e[3])
+    def gui_f_r(self):
+        fr(0,208,48,14,c[3])
+        fr(0,206,48,2,c[2])
+        fr(48,208,2,14,c[2])
+        fr(47,207,2,2,c[2])
+        dt("0",2,209,c[12],c[3], True)
+        ds("money_icon", 38, 209)
+        fr(272,208,48,14,c[9])
+        fr(272,206,48,2,c[8])
+        fr(270,208,2,14,c[8])
+        fr(271,207,2,2,c[8])
+        dt("00:00",273,209,c[12],c[9], True)
+        ds("time_icon", 310, 209)
+    def gui_r_r(self):
+        fr(1,209,30,12,c[3])
+        dt(str(self.g_money),2,209,c[12],c[3], True)
+        seconds = str(int(self.g_timer[1]-(tm()-self.g_timer[0]))%60)
+        if len(seconds)==1:
+            seconds="0"+seconds
+        dt("0"+str(int(self.g_timer[1]-(tm()-self.g_timer[0]))//60)+":"+seconds,273,209,c[12],c[9], True)
+    def draw_progressbar(self, x, y, progress):
+        fr(x*40, y*40+40, 40, 10, c[0])
+        fr(x*40+2, y*40+42, 36, 6, c[7])
+        fr(x*40+2, y*40+42, int(progress)*2, 6, c[5])
+    def sk(self):
+        if kd(ion.KEY_OK) or kd(ion.KEY_HOME) or kd(ion.KEY_POWER):
+            self.player.dpa()
+            time.sleep(0.2)
+        elif kd(ion.KEY_UP):
+            self.player.di="up"
+            self.player.mv(0,-1)
+            time.sleep(0.1)
+        elif kd(ion.KEY_DOWN):
+            self.player.di="down"
+            self.player.mv(0,1)
+            time.sleep(0.1)
+        elif kd(ion.KEY_LEFT):
+            self.player.di="left"
+            self.player.mv(-1,0)
+            time.sleep(0.1)
+        elif kd(ion.KEY_RIGHT):
+            self.player.di="right"
+            self.player.mv(1,0)
+            time.sleep(0.1)
+    def ra(self):
+        """Render literraly everything, this should not be called too many times"""
+        self.dm(self.mapid)
+        self.player.dp()
+    def de(self, el, x , y ) :
+        e=el
+        if type(e)==tuple: e=e[0]
+        if e==0:
+            fr(x*40, y*40+40, 40, 40, c[14])
+        elif e==1:
+            fr(x*40, y*40+40, 40, 4, c[3])
+            fr(x*40, y*40+40+4, 40, 2, c[1])
+            fr(x*40, y*40+40+6, 40, 8, c[2])
+            fr(x*40, y*40+40+14, 40, 12, c[15])
+            fr(x*40, y*40+40+26, 40, 14, c[14])
+        elif e==2:
+            fr(x*40, y*40+40, 40, 40, c[4])
+        elif e==3:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("poele", x*40, y*40+40, 2)
+        elif e==4:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("planche", x*40, y*40+40, 2)
+        elif e==5:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("assiette", x*40, y*40+42, 2)
+            ds("assiette", x*40, y*40+38, 2)
+            ds("assiette", x*40, y*40+34, 2)
+        elif e==6:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("c", x*40, y*40+40, 2)
+            ds("o", x*40, y*40+40, 2)
+        elif e==7:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("c", x*40, y*40+40, 2)
+            ds("sa", x*40, y*40+40, 2)
+        elif e==8:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("c", x*40, y*40+40, 2)
+            ds("s", x*40, y*40+40, 2)
+        elif e==9:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("c", x*40, y*40+40, 2)
+            ds("p", x*40, y*40+40, 2)
+        elif e==11:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("poubelle", x*40, y*40+40, 2)
+        elif e==12:
+            fr(x*40, y*40+40, 40, 40, c[4])
+            ds("c", x*40, y*40+40, 2)
+            ds("t", x*40, y*40+40, 2)
+        elif e==13:
+            ds("tapis", x*40, y*40+40, 2)
+        if type(el)==tuple: 
+            ds(el[1], x*40, y*40+40, 2)
+
+    def dm(self, mapid ):
+            for l in range(5):
+                for c in range(8):
+                    e = self.map[l][c]
+                    self.de(e, c, l)
+    def pi(self, elx ,ely , h):
+        old_el=self.map[ely][elx]
+        if type(old_el)==tuple and type(old_el[1])!=A: return  h
+        if type( h)==I:
+            result = None
+            e = (old_el, h.i_nom)
+            if old_el==11:
+                return None
+            elif old_el==2:
+                pass
+            elif old_el==3 and  h.i_nom=='s':
+                e = (e[0],e[1],tm(), 8)
+            elif old_el==4 and( h.i_nom=='o' or  h.i_nom=='sa' or  h.i_nom=='t'):
+                e = (e[0],e[1],tm(), 5)
+            elif  type(old_el)==tuple and type(old_el[1])==A:
+                n= h.i_nom
+                if n=="sa_cuite" or n=="t_c" or n=="o_c" or n=="p" or n=="s_cuit":
+                    if n not in self.map[ely][elx][1].ai:
+                        self.map[ely][elx][1].ai.append(n)
+                        self.map[ely][elx][1].r(elx*40,ely*40+40,2)
+                    else: return  h
+                else: return  h
+                return None
+            else:
+                return  h
+            self.map[ely][elx]=e
+            g.de(e, elx, ely)
+            return result
+        elif type( h)==A:
+            if old_el==11:
+                return None
+            elif old_el==2:
+                self.map[ely][elx]=(old_el, h)
+                h.r(elx*40, ely*40+40, 2)
+                return None
+            elif old_el==13:
+                for i in self.ms:
+                    if set(i.mi)==set( h.ai):
+                        self.g_money+=10
+                        self.ms.remove(i)
+                        return None
+                return  h
+            else:
+                return  h
+    def ri(self, elx ,ely ):
+        e=self.map[ely][elx]
+        if type(e)==int: 
+            if e==5: return A()
+            elif e==6: return I("o")
+            elif e==7: return I("sa")
+            elif e==8: return I("s")
+            elif e==9: return I("p")
+            elif e==12: return I("t")
+            return None
+        elif type(e[1])==A:
+            self.map[ely][elx]=2
+            self.de(2,elx,ely)
+            return e[1]
+        if e[0]==2:
+            self.map[ely][elx]=2
+            self.de(2,elx,ely)
+            return I(e[1])
+        elif e[0]==3 or e[0]==4:
+            self.map[ely][elx]=e[0]
+            self.de(e[0],elx,ely)
+            return I(e[1])
+        else:
+            return None
+
+class Gui:
+    def __init__(self)   :
+        self.se = 0
+        self.r()
+        self.state = 0
+    def redraw_text(self):
+        dt("A la carte", 200, 10, c[3], c[15])
+        dt("Jouer (OK)", 200, 40, c[4], c[15])
+    def r(self):
+        fr(0,0,320,222,c[15])
+        ds("ga", 0, 0, 4)
+        self.redraw_text()
+    def loop(self):
+        while True:
+            if kd(ion.KEY_OK) or kd(ion.KEY_HOME):
+                break
+
+
+hg=rhg()
+gui = Gui()
+gui.loop()
+g = G(0)
+g.ra()
+g.gui_f_r()
+fr(0,0,320,40,c[2])
+while True:
+    if tm()-g.g_timer[0]>g.g_timer[1]:
+        g.gover()
+        while not (kd(ion.KEY_OK) or kd(ion.KEY_HOME) or kd(ion.KEY_POWER)):
+            pass
+        gui = Gui()
+        time.sleep(1)
+        gui.loop()
+        g = G(0)
+        g.ra()
+        g.gui_f_r()
+        fr(0,0,320,40,c[2])
+    g.sk()
+    g.dts()
+    g.dms()
+    g.gui_r_r()
\ No newline at end of file
diff --git a/src/game_opti_stage2.py b/src/game_opti_stage2.py
new file mode 100644 (file)
index 0000000..89b534f
--- /dev/null
@@ -0,0 +1,225 @@
+_P='alacarte.sav'
+_O='time_icon'
+_N='poubelle'
+_M='planche'
+_L='p_haut'
+_K='money_icon'
+_J='down'
+_I=None
+_H='assiette'
+_G='s_cuit'
+_F='sa'
+_E='t_c'
+_D='sa_cuite'
+_C='p'
+_B='o_c'
+_A=True
+try:
+       import os
+       if hasattr(os,'environ'):os.environ['KANDINSKY_OS_MODE']='0';os.environ['KANDINSKY_ZOOM_RATIO']='4'
+except:pass
+from kandinsky import*
+import ion,time,random as ra
+print('G started')
+c=[color(i)for i in[(26,28,44),(93,39,93),(177,62,83),(239,125,87),(255,205,117),(167,240,112),(56,183,100),(37,113,121),(41,54,111),(59,93,201),(65,166,246),(115,239,247),(244,244,244),(148,176,194),(86,108,134),(51,60,87)]]
+sprites={_H:(0,3,20,17,'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),'c':(0,0,20,20,'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),'ga':(0,0,56,55,'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),_K:(0,0,8,11,'ggccccgggcggggcgcggggggccggcgggccggcgggccggccggccggccggccggccggccggggggcgcggggcgggccccgg'),'o':(3,3,16,13,'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),_B:(3,5,13,14,'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),_C:(2,4,17,14,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),'p_bas':(2,12,17,5,'00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),_L:(2,0,17,10,'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),_M:(0,5,20,14,'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),'pdown':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),'pleft':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),'pright':(2,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),'pup':(3,0,15,20,'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),'poele':(0,0,19,19,'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),_N:(0,0,20,20,'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),_F:(1,4,18,13,'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),_D:(2,7,15,9,'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),'s':(3,3,14,14,'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),_G:(3,5,15,9,'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),'tapis':(0,0,20,20,'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),_O:(0,0,8,11,'gggccggggggccgggggccccgggcggggcgcggggcgccgggcggccggcgggccgggcggccggggggcgcggggcgggccccgg'),'t':(4,3,12,13,'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),_E:(3,4,13,11,'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
+key_pressed=[False]*5
+ma=[[[2,2,2,3,3,2,11,2],[12,1,1,1,1,1,1,4],[6,0,0,4,9,0,0,5],[7,0,0,2,8,0,0,2],[1,0,0,1,1,13,13,1]]]
+def fr(x,y,w,h,c):fill_rect(x,y,w,h,c)
+def dt(t,x,y,c,b,f=False):draw_string(t,x,y,c,b,f)
+def tm():return time.monotonic()
+def kd(k):return ion.keydown(k)
+def ds(sprite_name,x,y,mu=1):
+       offx,offy,w,h,data=sprites[sprite_name];curx,cury=0,0
+       for i in range(h):
+               for k in range(w):
+                       px=int(data[w*i+k],18)
+                       if px!=16 and px!=17:fr(x+offx*mu+curx*mu,y+offy*mu+cury*mu,mu,mu,c[px])
+                       curx+=1
+               curx=0;cury+=1
+def save_data(hs):
+       try:f=open(_P,'w');f.truncate(0);f.write(hs)
+       except:return
+class I:
+       def __init__(self,i_nom):self.i_nom=i_nom
+class A:
+       def __init__(self):self.ai=[]
+       def r(self,x,y,mu):
+               ds(_H,x,y,mu)
+               if self.ai==[]:return
+               if _C in self.ai:ds('p_bas',x,y,mu)
+               if _D in self.ai:ds(_D,x+mu,y-mu,mu)
+               if _G in self.ai:ds(_G,x,y-2*mu,mu)
+               if _B in self.ai:ds(_B,x+mu,y-4*mu,mu)
+               if _E in self.ai:ds(_E,x-2*mu,y-mu,mu)
+               if _C in self.ai:ds(_L,x,y,mu)
+class M:
+       def __init__(self):
+               self.mi=[_C,_G];self.m_time=tm(),ra.randint(40,60)
+               if ra.getrandbits(1)==1:self.mi.append(_D)
+               if ra.getrandbits(1)==1:self.mi.append(_B)
+               if ra.getrandbits(1)==1:self.mi.append(_E)
+       def is_finished(self):return tm()-self.m_time[0]>self.m_time[1]
+       def r_r(self,place):of=place*61;fr(of+4,26,38,12,c[3]);dt(str(int(self.m_time[1]-(tm()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(tm()-self.m_time[0]))%60),of+5,26,c[12],c[3],_A);fr(of+2,26,2,14,c[0]);fr(of+4,38,38,2,c[0]);fr(of+41,37,2,2,c[0])
+       def f_r(self,place):
+               of=place*61;fr(of+3,3,27,34,c[3]);fr(of+30,3,27,34,c[3]);fr(of+3,2,54,2,c[0]);fr(of+3,36,54,2,c[0]);fr(of+2,3,2,34,c[0]);fr(of+56,3,2,34,c[0]);a=A();a.ai=self.mi;a.r(of+5,5,1)
+               if _D in self.mi:ds(_D,of+26,8,1)
+               if _B in self.mi:ds(_B,of+39,16,1)
+               if _E in self.mi:ds(_E,of+39,1,1)
+               dt(str(int(self.m_time[1]-(tm()-self.m_time[0]))//60)+':'+str(int(self.m_time[1]-(tm()-self.m_time[0]))%60),of+5,26,c[12],c[3],_A);fr(of+2,26,2,14,c[0]);fr(of+4,38,38,2,c[0]);fr(of+41,37,2,2,c[0])
+class P:
+       def __init__(self,g,x,y):self.x=x;self.y=y;self.g=g;self.di=_J;self.h=I(_F);assiette=A();assiette.r(0,0,2)
+       def dp(self):
+               ds(_C+self.di,self.x*40,self.y*40+40,2)
+               if type(self.h)==I:ds(self.h.i_nom,self.x*40+10,self.y*40+60)
+               elif type(self.h)==A:self.h.r(self.x*40+10,self.y*40+60,1)
+       def mv(self,x_mod,y_mod):
+               e=ma[g.mapid][self.y][self.x];self.g.de(e,self.x,self.y);new_el=ma[self.g.mapid][self.y+y_mod][self.x+x_mod]
+               if self.y+y_mod<4 and new_el in[0,1]:self.y+=y_mod;self.x+=x_mod
+               self.dp()
+       def dpa(self):
+               dir,e,elx,ely=self.di,_I,_I,_I
+               if dir=='up':e,elx,ely=self.g.map[self.y-1][self.x],self.x,self.y-1
+               elif dir==_J:e,elx,ely=self.g.map[self.y+1][self.x],self.x,self.y+1
+               elif dir=='left':e,elx,ely=self.g.map[self.y][self.x-1],self.x-1,self.y
+               else:e,elx,ely=self.g.map[self.y][self.x+1],self.x+1,self.y
+               if self.h!=_I:self.h=self.g.pi(elx,ely,self.h);self.dp()
+               else:self.h=self.g.ri(elx,ely);self.dp()
+class G:
+       def __init__(self,mapid):self.mapid=mapid;self.map=ma[mapid];self.player=P(self,1,1);self.ms=[];self.old_missions=[];self.pmi=tm(),3;self.g_timer=tm(),5;self.g_money=25
+       def gover(self):
+               global hg;fr(52,12,216,196,c[4]);fr(50,12,2,196,c[0]);fr(268,12,2,196,c[0]);fr(52,10,216,2,c[0]);fr(52,67,216,2,c[0]);fr(52,208,216,2,c[0]);ds('ga',52,12);dt('GAME OVER',115,25,c[0],c[4]);dt('Ton score: '+str(self.g_money),65,85,c[0],c[4])
+               if self.g_money>hg:hg=self.g_money
+               dt('Meilleur score: '+str(self.g_money),65,110,c[0],c[4]);dt('OK pour aller au menu',60,190,c[0],c[4],_A)
+       def dms(self):
+               if tm()-self.pmi[0]>self.pmi[1]:self.ms.append(M());self.pmi=tm(),ra.randint(15,25)
+               for i in range(len(self.ms)):
+                       if self.ms[i].is_finished():self.g_money-=2;self.ms.pop(i);break
+               if self.old_missions!=self.ms:
+                       fr(0,0,320,40,c[2]);self.old_missions=[]
+                       for i in range(len(self.ms)):self.ms[i].f_r(i);self.old_missions.append(self.ms[i])
+               else:
+                       for i in range(len(self.ms)):self.ms[i].r_r(i)
+       def dts(self):
+               for i in range(5):
+                       for k in range(8):
+                               e=self.map[i][k]
+                               if type(e)==tuple and len(e)==4:
+                                       if tm()>e[2]+e[3]:
+                                               if e[1]=='s':self.map[i][k]=e[0],_G
+                                               if e[1]==_F:self.map[i][k]=e[0],_D
+                                               if e[1]=='o':self.map[i][k]=e[0],_B
+                                               if e[1]=='t':self.map[i][k]=e[0],_E
+                                               self.de(self.map[i][k],k,i)
+                                       else:self.draw_progressbar(k,i,(tm()-e[2])*18//e[3])
+       def gui_f_r(self):fr(0,208,48,14,c[3]);fr(0,206,48,2,c[2]);fr(48,208,2,14,c[2]);fr(47,207,2,2,c[2]);dt('15',2,209,c[12],c[3],_A);ds(_K,38,209);fr(272,208,48,14,c[9]);fr(272,206,48,2,c[8]);fr(270,208,2,14,c[8]);fr(271,207,2,2,c[8]);dt('00:00',273,209,c[12],c[9],_A);ds(_O,310,209)
+       def gui_r_r(self):
+               dt(str(self.g_money),2,209,c[12],c[3],_A);seconds=str(int(self.g_timer[1]-(tm()-self.g_timer[0]))%60)
+               if len(seconds)==1:seconds='0'+seconds
+               dt('0'+str(int(self.g_timer[1]-(tm()-self.g_timer[0]))//60)+':'+seconds,273,209,c[12],c[9],_A)
+       def draw_progressbar(self,x,y,progress):fr(x*40,y*40+40,40,10,c[0]);fr(x*40+2,y*40+42,36,6,c[7]);fr(x*40+2,y*40+42,int(progress)*2,6,c[5])
+       def sk(self):
+               if kd(ion.KEY_OK)or kd(ion.KEY_HOME)or kd(ion.KEY_POWER):self.player.dpa();time.sleep(.2)
+               elif kd(ion.KEY_UP):self.player.di='up';self.player.mv(0,-1);time.sleep(.1)
+               elif kd(ion.KEY_DOWN):self.player.di=_J;self.player.mv(0,1);time.sleep(.1)
+               elif kd(ion.KEY_LEFT):self.player.di='left';self.player.mv(-1,0);time.sleep(.1)
+               elif kd(ion.KEY_RIGHT):self.player.di='right';self.player.mv(1,0);time.sleep(.1)
+       def ra(self):self.dm(self.mapid);self.player.dp()
+       def de(self,el,x,y):
+               e=el
+               if type(e)==tuple:e=e[0]
+               if e==0:fr(x*40,y*40+40,40,40,c[14])
+               elif e==1:fr(x*40,y*40+40,40,4,c[3]);fr(x*40,y*40+40+4,40,2,c[1]);fr(x*40,y*40+40+6,40,8,c[2]);fr(x*40,y*40+40+14,40,12,c[15]);fr(x*40,y*40+40+26,40,14,c[14])
+               elif e==2:fr(x*40,y*40+40,40,40,c[4])
+               elif e==3:fr(x*40,y*40+40,40,40,c[4]);ds('poele',x*40,y*40+40,2)
+               elif e==4:fr(x*40,y*40+40,40,40,c[4]);ds(_M,x*40,y*40+40,2)
+               elif e==5:fr(x*40,y*40+40,40,40,c[4]);ds(_H,x*40,y*40+42,2);ds(_H,x*40,y*40+38,2);ds(_H,x*40,y*40+34,2)
+               elif e==6:fr(x*40,y*40+40,40,40,c[4]);ds('c',x*40,y*40+40,2);ds('o',x*40,y*40+40,2)
+               elif e==7:fr(x*40,y*40+40,40,40,c[4]);ds('c',x*40,y*40+40,2);ds(_F,x*40,y*40+40,2)
+               elif e==8:fr(x*40,y*40+40,40,40,c[4]);ds('c',x*40,y*40+40,2);ds('s',x*40,y*40+40,2)
+               elif e==9:fr(x*40,y*40+40,40,40,c[4]);ds('c',x*40,y*40+40,2);ds(_C,x*40,y*40+40,2)
+               elif e==11:fr(x*40,y*40+40,40,40,c[4]);ds(_N,x*40,y*40+40,2)
+               elif e==12:fr(x*40,y*40+40,40,40,c[4]);ds('c',x*40,y*40+40,2);ds('t',x*40,y*40+40,2)
+               elif e==13:ds('tapis',x*40,y*40+40,2)
+               if type(el)==tuple:ds(el[1],x*40,y*40+40,2)
+       def dm(self,mapid):
+               for l in range(5):
+                       for c in range(8):e=self.map[l][c];self.de(e,c,l)
+       def pi(self,elx,ely,h):
+               old_el=self.map[ely][elx]
+               if type(old_el)==tuple and type(old_el[1])!=A:return h
+               if type(h)==I:
+                       result=_I;e=old_el,h.i_nom
+                       if old_el==11:return
+                       elif old_el==2:0
+                       elif old_el==3 and h.i_nom=='s':e=e[0],e[1],tm(),8
+                       elif old_el==4 and(h.i_nom=='o'or h.i_nom==_F or h.i_nom=='t'):e=e[0],e[1],tm(),5
+                       elif type(old_el)==tuple and type(old_el[1])==A:
+                               n=h.i_nom
+                               if n==_D or n==_E or n==_B or n==_C or n==_G:
+                                       if n not in self.map[ely][elx][1].ai:self.map[ely][elx][1].ai.append(n);self.map[ely][elx][1].r(elx*40,ely*40+40,2)
+                                       else:return h
+                               else:return h
+                               return
+                       else:return h
+                       self.map[ely][elx]=e;g.de(e,elx,ely);return result
+               elif type(h)==A:
+                       if old_el==11:return
+                       elif old_el==2:self.map[ely][elx]=old_el,h;h.r(elx*40,ely*40+40,2);return
+                       elif old_el==13:
+                               for i in self.ms:
+                                       if set(i.mi)==set(h.ai):self.g_money+=10;self.ms.remv(i);return
+                               return h
+                       else:return h
+       def ri(self,elx,ely):
+               e=self.map[ely][elx]
+               if type(e)==int:
+                       if e==5:return A()
+                       elif e==6:return I('o')
+                       elif e==7:return I(_F)
+                       elif e==8:return I('s')
+                       elif e==9:return I(_C)
+                       elif e==12:return I('t')
+                       return
+               elif type(e[1])==A:self.map[ely][elx]=2;self.de(2,elx,ely);return e[1]
+               if e[0]==2:self.map[ely][elx]=2;self.de(2,elx,ely);return I(e[1])
+               elif e[0]==3 or e[0]==4:self.map[ely][elx]=e[0];self.de(e[0],elx,ely);return I(e[1])
+               else:return
+class Gui:
+       def __init__(self):self.se=0;self.r();self.state=0
+       def redraw_text(self):
+               dt('A la carte',200,10,c[3],c[15]);but_c=[c[4]]*3;but_c[self.se]=c[3];but=['Jouer','Aide']
+               for i in range(len(but)):dt(but[i],200,40+i*20,but_c[i],c[15])
+       def r(self):fr(0,0,320,222,c[15]);ds('ga',0,0,4);self.redraw_text()
+       def render_help(self):pass
+       def loop(self):
+               while _A:
+                       if kd(ion.KEY_OK)or kd(ion.KEY_HOME):
+                               if self.state==0:
+                                       if self.se==1:self.render_help();self.state=1
+                                       else:break
+                               else:self.r();self.state=0
+                               time.sleep(.3)
+                       elif kd(ion.KEY_UP):
+                               if self.state==1:continue
+                               self.se=(self.se-1)%2;self.redraw_text();time.sleep(.2)
+                       elif kd(ion.KEY_DOWN):
+                               if self.state==1:continue
+                               self.se=(self.se+1)%2;self.redraw_text();time.sleep(.2)
+               return self.se
+hg=0
+try:
+       with open(_P,'r')as f:hg=int(f.readline())
+except:pass
+gui=Gui()
+gui.loop()
+g=G(0)
+g.ra()
+g.gui_f_r()
+fr(0,0,320,40,c[2])
+while _A:
+       if tm()-g.g_timer[0]>g.g_timer[1]:
+               g.gover()
+               while not(kd(ion.KEY_OK)or kd(ion.KEY_HOME)or kd(ion.KEY_POWER)):0
+               gui=Gui();time.sleep(1);gui.loop();g=G(0);g.ra();g.gui_f_r();fr(0,0,320,40,c[2])
+       g.sk();g.dts();g.dms();g.gui_r_r()
\ No newline at end of file
index b7f10e7d680dcef60f3fd2ddf5feccad687a4b26..6b3c2787e747e181e2c984da6f8ec0fb0ac10cd4 100644 (file)
@@ -72,8 +72,48 @@ def get_croped_image(img: Image.Image)->tuple[Image.Image, int, int]:
     img_croped = img.crop((offsetx, offsety, h-neg_offsety, w-neg_offsetx))
     return (img_croped, offsetx, offsety)
 
-def compress_string_image(img: str)->str:
-    pass
+def compress_string_image(img: str,w: int,h: int)->str:
+    l = []
+    for i in range(h):
+        l.append(img[i*w:(i+1)*w-1])
+    print(l)
+    for i in range(len(l)):
+        l_of_rep = []
+        rep = [0,0,0]
+        for k in range(len(l[i])):
+            if rep==[0,0,0]:
+                rep=[k,k,l[i][k]]
+            else:
+                if rep[2]==l[i][k]:
+                    rep[1]=k
+                else:
+                    if rep[1]-rep[0]>2:
+                        l_of_rep.append(rep)
+                    rep = [0,0,0]
+        if rep[1]-rep[0]>2:
+            l_of_rep.append(rep)
+        nv_li = l[i]
+        for rep_i in l_of_rep:
+            nv_li = nv_li.replace(rep_i[2]*(rep_i[1]-rep_i[0]), "?"+str(rep_i[2])+str(rep_i[1]-rep_i[0])+"!")
+        print(nv_li)
+
+def compress2(img: str,w: int,h: int)->str:
+    l = []
+    de = ""
+    de.replace
+    char = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","d","e","f","g","h"]
+    for i in range(h):
+        l.append(img[i*w:(i+1)*w-1])
+    print(l)
+    result = ""
+    for i in range(len(l)):
+        nv_li = l[i]
+        for k in char:
+            for m in range(w,4,-1):
+                nv_li = nv_li.replace(k*m, "?"+k+str(m)+"!")
+        result+=nv_li
+    return result
+
 
 def convert_all_files(save_to_file: bool, compress_sprites: bool, path: str)->None:
     files_list = [f for f in listdir(path) if isfile(join(path, f))]
@@ -93,6 +133,7 @@ def convert_all_files(save_to_file: bool, compress_sprites: bool, path: str)->No
         for v in range(h):
             for k in range(w):
                 result += get_color_id(*image_croped.getpixel((k, v)))
+        result = compress2(result, w,h)
         print('Finished,', file, '\n', result, '\n')
         final_result[file.removesuffix(".png")] = (off_x, off_y, w, h, result)
     if save_to_file: 
index 476bfe8ffd957bd640215f05fd570290982d63b7..64aebf3798250167daf808d7ca6b4138589b818b 100644 (file)
@@ -1,49 +1,49 @@
 _converter.py
 {'assiette': (0, 3, 20, 17,
-              'ggggggg000000gggggggggggg00cccccc00gggggggg00cccccccccc00ggggg0cccccccccccccc0ggg0cccccddddddccccc0gg0ccccdccccccdcccc0g0ccccdccccccccdcccc00cccdccccccccccdccd00cccdcccccccccccccd00dccdcccccccccccccd00dcccdccccccccccccd0g0dcccccddcccccccd0gg0dccccccccccccccd0ggg0ddccccccccccdd0ggggg00ddccccccdd00gggggggg00dddddd00gggggggggggg000000ggggggg'),
+              '?g7!?06!?g6!?g5!00?c6!00ggggggg00?c10!00gggg0?c14!0gg0?c5!?d6!?c5!0g0ccccd?c6!dcccc00ccccd?c8!dcccc0cccd?c10!dccd0cccd?c13!d0dccd?c13!d0dcccd?c12!dg0d?c5!dd?c7!d0g0d?c14!d0gg0dd?c10!dd0gggg00dd?c6!dd00gg?g5!00?d6!00gggg?g7!?06!?g6!'),
  'caisse': (0, 0, 20, 20,
-            'gg0000000000000000ggg0c0ccccccccccdcdd0g0ccd0ddcccddcdddddc000cdd0cccddcdddddcc00c0de0000000000dccc00cd00eeedddd0dd0ccc00cdc0eddddd0ddd0ccd00ccc0edddd0ccd00cde00ccc0dddd0cdd0e0dee00ccd0ddd0ddd0ed0eed00cdd0dd0ddd0edd0edd00ddc0d0cdd0eddd0dde00ccd00cdd0eeddd0dee00cdd0cdd0eedddd0eee00ddd0dd0eeddddd00ee00ddde0000000000cd0e00dddccccdeecce0ccd000ddccccdeeddeee0dde0g0ccccdeeddeeeee0d0ggg0000000000000000gg'),
+            'gg?016!gg0c0?c10!dcdd00ccd0ddcccddc?d5!c00cdd0cccddc?d5!cc0c0de?010!dccc0cd00eeedddd0dd0ccc0cdc0e?d5!0ddd0ccd0ccc0edddd0ccd00cde0ccc0dddd0cdd0e0dee0ccd0ddd0ddd0ed0eed0cdd0dd0ddd0edd0edd0ddc0d0cdd0eddd0dde0ccd00cdd0eeddd0dee0cdd0cdd0eedddd0eee0ddd0dd0ee?d5!00ee0ddde?010!cd0e0dddccccdeecce0ccd00ddccccdeeddeee0ddeg0ccccdeedd?e5!0d0gg?016!g'),
  'gui_art': (0, 0, 56, 55,
-             'ggggggggggggg0cccccccccd0cccccccddd0cccc00gggggggggggggggggggggggggg0cccccccccd0cccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccdd0cccccd0ggggggggggggggggggggggggg0ccccccccd0ccccccccccddd0ccccdd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccd0ggggggggggggggggggggggg0ccccccccd0ccccccccccccdd0ccdccdd0gggggggggggggggggggggg0ccccccccd0ccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccdcdd0gggggggggggggggggggggg0cccccccd0cccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0cccccdd0gggggggggggggggggggggg0cccccccd0cccccccccccccd0cccccddd0gggggggggggggggggggggg0cccccccd0ccccccccccccdd0ccccddd0ggggggggggggggggggggggg0cccccccd0cccccccccccdd0cccccdd0gggggggggggggggggggggggg0cccccccd0ccccccccccdd0cccccdd0ggggggggggggggggggggggggg0ddccccd0ccccccccccdd0cccccdd0gggggggggggggggggggggggggg000dddcd0cccccccccdd0cccccdd0gggggggggggggggggggggggggg0ccc000ddcccccccccdd0cccccdd0ggggggggggggggggggggggggggg0ddcccc00ddccccccdd0cccccdd0gggggggggggggggggggggggggggg000ddcccc00dddccc00cccccdd0gggggggggggggggggggggggggggg043300dddccc000dddccccccdd0gggggggggggggggggggggggggggg0044433000ddcccc000ddcccdd0ggggggggggggggggggggggggggggg044444433300ddccccc00dddd0gggggggggggggggggggggggggggggg04444000443300dddcccd00d0gggggggggggggggggggggggggggggg044440444044433000dddddd0ggggggggggggggggggggggggggggggg04444044004444433300dddd0ggggggggggggggggggggggggggggggg0444444400444400043300d0ggggggggggggggggggggggggggggggg044044440044440044044330gggggggggggggggggggggggggggggggg04404444444444004404330ggggggggggggggggggggggggggggggggg04404444444440044404330ggggggggggggggggggggggggggggggggg0444044444444444444330ggggggggggggg0000000ggggggggggggggg044400444444444444330gggggggggg0004444444000ggggggggggggg0044400444444444330gggggggggg04cc44443444330gggggggggggggg00444000444440330ggggggggg04444443444444330gggggggggggggg004444400440330gggggggggg04443444443444330gggggggggggggg040044444433330gggggggggg04344444444444330ggggggggggggg0c0330000033300ggggggggggg04444444444333330gggggggg000g0ccc00330gg000ggggggggggggg04433443333333330ggggggg0ccc0c0cccc00gggggggggggggggggggg000033333330000fggggg00ccccccc0ccccc000ggggggggggggggggg0222000000022200gggg0cccccccccc0ccccccc0ggggggggggggggg0000022222220000c0gggcccddccccccc0ccccccc0ggggggggggggg0c056600000007600cd0ggcddd00ccccccc0ccccccc0ggggggggggg0c00507055767507040cd0gdd00g0cccc0dc0cccccccc0ggggggggg00c04030307060630330cd0gd0ggg0cccccc0dcc0ddcccc0gggg0000c0dc044344040303330ccd0g0gggg0cccccc0dcd000ddccd0000ccccd0dcc0004343333000cccd0ggggg0ccccccc0ccd0gg00dccccccccccdd0dcccc0000000cccccd0gggggg0cccc0d0dccd0gggg00dccccccc00000dddccccccccccddd0ggggggg0cccccc0dcdd0gggggg0dccc000ggggg000dddddddddd000ggggggg0ccccccc0ccd0gggggggg0000ggggggggggg0000000000gggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0gggggggggggggggggggggggggggggggggggggggggg0ccccccc0cdd0ggggggggggggggggggggggggggggggggggggggggggg0cccccc0dcdd0ggggggggggggggggggggggggggggggggggggggggggg0cccc0d0cddd0ggggggggggggggggggggggggggggggggggggggggg'),
+             '?g13!0?c9!d0?c7!ddd0cccc00?g13!?g12!0?c9!d0?c9!dd0?c5!d0?g12!?g12!0?c8!d0?c10!dd0?c5!d0?g12!?g12!0?c8!d0?c10!ddd0ccccdd0?g11!?g11!0?c8!d0?c12!dd0ccdccd0?g11!?g11!0?c8!d0?c12!dd0ccdccdd0?g10!?g11!0?c8!d0?c12!dd0cccdcdd0?g10!?g11!0?c7!d0?c13!dd0cccdcdd0?g10!?g11!0?c7!d0?c13!dd0?c5!dd0?g10!?g11!0?c7!d0?c12!dd0?c5!ddd0?g10!?g11!0?c7!d0?c12!dd0?c5!dd0?g11!?g10!0?c7!d0?c13!d0?c5!ddd0?g11!?g10!0?c7!d0?c12!dd0ccccddd0?g12!?g10!0?c7!d0?c11!dd0?c5!dd0?g13!?g10!0?c7!d0?c10!dd0?c5!dd0?g14!?g10!0ddccccd0?c10!dd0?c5!dd0?g15!?g10!000dddcd0?c9!dd0?c5!dd0?g16!?g9!0ccc000dd?c9!dd0?c5!dd0?g17!?g9!0ddcccc00dd?c6!dd0?c5!dd0?g18!?g9!000ddcccc00dddccc00?c5!dd0?g19!?g8!043300dddccc000ddd?c6!dd0?g20!?g7!0044433000ddcccc000ddcccdd0?g21!?g7!0?46!33300dd?c5!00dddd0?g22!?g7!04444000443300dddcccd00d0?g23!?g6!044440444044433000?d6!0?g24!?g6!0444404400?45!33300dddd0?g24!?g6!0?47!00444400043300d0?g25!?g5!044044440044440044044330?g26!?g5!0440?410!004404330?g27!?g5!0440?49!0044404330?g27!?g5!04440?414!330?g13!?07!?g8!?g6!044400?412!330?g10!000?47!000?g5!?g7!0044400?49!330?g10!04cc44443444330gggg?g9!00444000?45!0330?g9!0?46!3?46!330ggg?g10!00?45!00440330?g10!04443?45!3444330ggg?g10!0400?46!33330?g10!043?411!330ggg?g9!0c033?05!33300?g11!0?410!?35!0ggggggg000g0ccc00330gg000?g13!0443344?39!0gggggg0ccc0c0cccc00?g20!0000?37!0000fgggg00?c7!0?c5!000?g17!0222?07!22200ggg0?c10!0?c7!0?g15!?05!?27!0000c0ggcccdd?c7!0?c7!0?g13!0c0566?07!7600cd0gcddd00?c7!0?c7!0?g11!0c00507055767507040cd0dd00g0cccc0dc0?c8!0?g9!00c04030307060630330cd0d0ggg0?c6!0dcc0ddcccc0gggg0000c0dc044344040303330ccd00gggg0?c6!0dcd000ddccd0000ccccd0dcc0004343333000cccd0gggg0?c7!0ccd0gg00d?c10!dd0dcccc?07!?c5!d0ggggg0cccc0d0dccd0gggg00d?c7!?05!ddd?c10!ddd0gggggg0?c6!0dcdd0?g6!0dccc000?g5!000?d10!000gggggg0?c7!0ccd0?g8!0000?g11!?010!?g6!ggg0?c6!0dcdd0?g39!ggg0cccc0d0cddd0?g39!gg0?c7!0cdd0?g40!gg0?c6!0dcdd0?g40!gg0cccc0d0cddd0?g40!'),
  'money_icon': (0, 0, 8, 11,
-                'ggccccgggcggggcgcggggggccggcgggccggcgggccggccggccggccggccggccggccggggggcgcggggcgggccccgg'),
+                'ggccccggcggggcc?g6!cggcgggcggcgggcggccggcggccggcggccggc?g6!gcggggcggccccg'),
  'oignon': (3, 3, 16, 13,
-            'ggggggggggg00ggggggg00000g0650ggggg021122016650ggg0111c111210660g0211c111210g0500211cc11111200500211c11211110g0g012c112111110ggg012c111112120gggg01121112110gggg01221112110gggggg010122110gggggggg0g00000ggggggg'),
+            '?g11!00gggggg?05!g0650gggg021122016650gg0111c11121066g0211c111210g050211cc?15!20050211c11211110g0012c112?15!0gg012c?15!2120ggg01121112110ggg01221112110ggggg010122110?g5!gg0g?05!?g6!'),
  'oignon_coupe': (3, 5, 13, 14,
-                  'gggggg00000ggggg000ccccc0ggg0cccc000c0gg0c00c100g0c00c0g0c1cc00c00c00g0c11cc1001cc00ccc110gg011cc1000c0ggg0011c0g0c0ggggg00c00g0c0ggggg01cc00c0gggggg011cc10ggggggg00110gggggggggg00gg'),
+                  '?g6!?05!gggg000?c5!0gg0cccc000c0g0c00c100g0c0c0g0c1cc00c0c00g0c11cc101cc00ccc110g011cc1000c0gg0011c0g0c0gggg00c00g0c?g5!01cc00c?g6!011cc1?g7!00110?g9!00g'),
  'pain': (2, 4, 17, 14,
-          'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000g0033300000003330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+          '?g5!?07!gggggg000?47!000gg04cc444434443300?46!3?46!3304443?45!344433043?411!330?410!?35!0443344?39!g0000?37!000000333?07!3330044443333?45!33g0443?46!33330gg0004343333000g?g5!?07!gggg'),
  'pain_bas': (2, 12, 17, 5,
-              '00333ggggggg3330004444333344444330g044344444433330ggg0004343333000ggggggg0000000ggggg'),
+              '00333?g7!3330044443333?45!33g0443?46!33330gg0004343333000g?g5!?07!gggg'),
  'pain_haut': (2, 0, 17, 10,
-               'ggggg0000000ggggggg0004444444000ggg04cc44443444330g0444444344444433004443444443444330043444444444443300444444444433333004433443333333330g000033333330000gggggg0000000ggggg'),
+               '?g5!?07!gggggg000?47!000gg04cc444434443300?46!3?46!3304443?45!344433043?411!330?410!?35!0443344?39!g0000?37!0000?g5!?07!gggg'),
  'planche': (0, 5, 20, 14,
-             'ggggg00000000000000ggggg0333333333333330g00g0333003333333330033003320c0333323330033333330cd022233330032333330ddc023333300332233330ddd033333002200333330ddd033330g00g03333330ddf03330gggg022222220fdf0220ggggg00000000ffff00gggggggggggggg00fdf0gggggggggggggggg0ff0ggggggggggggggggg00gg'),
+             '?g5!?014!gggg0?314!g00g033300?39!033003320c0333323330?37!0cd02223333032?35!0ddc02?35!0332233330ddd0?35!02200?35!0ddd03333g00g0?36!0ddf0333gggg0?27!0fdf022?g5!?08!ffff00?g13!00fdf0?g15!0ff0?g16!00g'),
  'player_down': (3, 0, 15, 20,
-                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg04c848c40gggggg044444440ggggggg0000000ggggggg0cccdccc0ggggg0cccccdccc0gggg0c0cfcdc0c0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggggg00g00ggggg'),
+                 'gg?011!gg0ccc0ccc0ccc00ccc0?c5!0ccc0ccc0?c5!0ccc0ccc0?c5!0cccg0ccc0ccc0ccc0gg?06!cc000ggg0?c9!0ggg?011!gggg04c848c40ggggg0?47!0gggggg?07!gggggg0cccdccc0gggg0?c5!dccc0ggg0c0cfcdc0c0ggg0c0cccdc0c0ggg000cfcdc000ggggg0cccdc0ggggggg?07!ggg?g5!00g00gggg'),
  'player_left': (3, 0, 15, 20,
-                 'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg08c48c440gggggg044444440ggggggg0000000ggggggg0ccdcccc0ggggg0ccccdcccc0gggg0c0cfcd0cc0gggg0c0cccdc0c0gggg000cfcdc000gggggg0cccdc0gggggggg0000000ggggggg000gg000gggg'),
+                 'gg?011!gg0ccc0ccc0ccc00ccc0?c5!0ccc0ccc0?c5!0ccc0ccc0?c5!0cccg0ccc0ccc0ccc0gg?06!cc000ggg0?c9!0ggg?011!gggg08c48c440ggggg0?47!0gggggg?07!gggggg0ccdcccc0gggg0ccccdcccc0ggg0c0cfcd0cc0ggg0c0cccdc0c0ggg000cfcdc000ggggg0cccdc0ggggggg?07!gggggg000gg000ggg'),
  'player_right': (2, 0, 15, 20,
-                  'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000cc000000gggg0ccccccccc0gggg00000000000ggggg044c84c80gggggg044444440ggggggg0000000ggggggg0ccccdcc0ggggg0ccccdcccc0gggg0cc0dcfc0c0gggg0c0cdccc0c0gggg000cdcfc000gggggg0cdccc0gggggggg0000000gggggggg000gg000ggg'),
+                  'gg?011!gg0ccc0ccc0ccc00ccc0?c5!0ccc0ccc0?c5!0ccc0ccc0?c5!0cccg0ccc0ccc0ccc0gg000cc?06!ggg0?c9!0ggg?011!gggg044c84c80ggggg0?47!0gggggg?07!gggggg0ccccdcc0gggg0ccccdcccc0ggg0cc0dcfc0c0ggg0c0cdccc0c0ggg000cdcfc000ggggg0cdccc0ggggggg?07!ggggggg000gg000gg'),
  'player_up': (3, 0, 15, 20,
-               'gg00000000000ggg0ccc0ccc0ccc0g0ccc0ccccc0ccc00ccc0ccccc0ccc00ccc0ccccc0ccc0g0ccc0ccc0ccc0ggg000000cc000gggg0ccccccccc0gggg00000000000ggggg044444440gggggg044444440ggggggg0000000ggggggg0ccccccc0ggggg0ccccccccc0gggg0c0ccccc0c0gggg0c0ccccc0c0gggg000ccccc000gggggg0ccccc0gggggggg0000000ggggggggg00g00ggggg'),
+               'gg?011!gg0ccc0ccc0ccc00ccc0?c5!0ccc0ccc0?c5!0ccc0ccc0?c5!0cccg0ccc0ccc0ccc0gg?06!cc000ggg0?c9!0ggg?011!gggg0?47!0ggggg0?47!0gggggg?07!gggggg0?c7!0gggg0?c9!0ggg0c0?c5!0c0ggg0c0?c5!0c0ggg000?c5!000ggggg0?c5!0ggggggg?07!ggg?g5!00g00gggg'),
  'poele': (0, 0, 19, 19,
-           'gggggg00000000gggggggg000eeeeeeee000gggg0eeeffffffffeee0gg0eeffeeeeeeeeffee0g0efeeeeeeeeeeeefe0g0efeeeeeeeeeeeefe0g0eeeeeeeeeeeeeeee0g00eeeeeeeeeeeeee00g0b0000eeeeee0000f0g000fff000000ffff00g00fffffffffff000f0g0ff0000000000baf0g0ff0fabfffbafffba0g0f0ffbff2f3b3ffff0gg0fff0ffffffff0fff0g0fff0000000000fff0g0fff0gggggggg0fff0g0ff0gggggggggg0ff0gg00gggggggggggg00g'),
+           '?g6!?08!ggggggg000?e8!000ggg0eee?f8!eee0g0eeff?e8!ffeeg0ef?e12!feg0ef?e12!feg0?e16!g00?e14!0g0b0000?e6!0000fg000fff?06!ffff0g00?f11!000fg0ff?010!baf00ff0fabfffbafffba00f0ffbff2f3b3ffff0g0fff0?f8!0fffg0fff?010!fffg0fff0?g8!0fffg0ff0?g10!0ffgg00?g12!00'),
  'poubelle': (0, 0, 20, 20,
-              'ggggg0000000000ggggggggg0ffffffffff0ggggggg0fffffffffffe0ggggg0ffffffffffffef0ggg0fffefffffffffeff0g0ffffefff66f6ffffff00ffffeff6ff66ffefff00ffffeffff666ffffff00ffffef6fffffffffff00ffffe666ff6f6fefff00ffffef6ff666ffefff00ffffeff6ff6fffefff00ffffefffffffffefff00ffffffffffffffffff00ffffeeeeeeeeeeffff00fffeffffffffffefff00ffefff000000fffeff00fefff00000000fffef0g0fff0000000000fffeggg0000000000000000gg'),
+              '?g5!?010!gggggggg0?f10!0gggggg0?f11!e0gggg0?f12!ef0gg0fffe?f9!eff00ffffefff66f6?f6!0ffffeff6ff66ffefff0ffffeffff666?f6!0ffffef6?f11!0ffffe666ff6f6fefff0ffffef6ff666ffefff0ffffeff6ff6fffefff0ffffe?f9!efff0?f18!0ffff?e10!ffff0fffe?f10!efff0ffefff?06!fffeff0fefff?08!fffefg0fff?010!fffegg?016!g'),
  'salade': (1, 4, 18, 13,
-            'gggggggggggg0gggggggggg0000g0070gggggggg07777077570ggggg00755567567570ggg077567777777570gg07657765655767770g077776556556755770000076556556767070ggg075556555670g00ggg075556555670gggggg07665655670gggggggg077777770gggggggggg0000000gggggg'),
+            '?g12!0gggg?g5!0000g0070ggggggg07777077570gggg00755567567570gg07756?77!570g076577656557677700777765565567557700007655655676707ggg075556555670g0ggg075556555670ggggg07665655670ggggggg0?77!0gggg?g5!?07!?g5!'),
  'salade_cuite': (2, 7, 15, 9,
-                  'gggg0000000ggggg0055765567000g077755555556770g0655655555560g075566566565550g5666656655760g050705576750700g0g0g070606g0gggggggg0g0g0gggg'),
+                  'gggg?07!gggg00557655670000777?57!677g06556?56!6007556656656555g566665665576005070557675070g0g0g070606g0g?g6!0g0g0ggg'),
  'steak': (3, 3, 14, 14,
-           'ggg0000000gggggg033322cc0gggg0cc222d2c20gg032d22cc2c220g0322d2c222c0gg022d2c22220gggg0c22cd220ggggg022222d20gggggg0222d2d20gggggg02d2d2220gggggg0c2c222c0gggggg0cc22d220gggggg00cc2220gggggggg00000g'),
+           'ggg?07!ggggg033322cc0ggg0cc222d2c20g032d22cc2c2200322d2c222c0g022d2c22220ggg0c22cd220gggg0?25!d20ggggg0222d2d20ggggg02d2d2220ggggg0c2c222c0?g5!0cc22d22?g6!00cc222?g8!?05!'),
  'steak_cuit': (3, 5, 15, 9,
-                'gggg0000000ggggg0000223320000g003323332333200033233322333330032333233323320023332333233220022222333222220g0002222222000ggggg0000000gggg'),
+                'gggg?07!gggg000022332000000332333233320033233322?35!03233323332332023332333233220?25!333?25!g000?27!000gggg?07!ggg'),
  'tapis': (0, 0, 20, 20,
-           'feeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeeefeeeeeffffffffeeeeefffeeeeeffffffeeeeefffffeeeeeffffeeeeefffffffeeeeeffeeeeefffffffffeeeeeeeeeefffffefffffeeeeeeeefffffeeefffffeeeeeefffffeeeeefffffeeeefffffeeeeeeefffffeefffffeeeeeeeeeffffffffffeeeee'),
+           'f?e5!?f8!?e5!ff?e5!?f6!?e5!ffff?e5!ffff?e5!ffffff?e5!ff?e5!fff?f5!?e10!ffffe?f5!?e8!?f5!ee?f5!?e6!?f5!eeee?f5!eeee?f5!eeeeee?f5!ee?f5!eee?e5!?f10!eeeef?e5!?f8!?e5!ff?e5!?f6!?e5!ffff?e5!ffff?e5!ffffff?e5!ff?e5!fff?f5!?e10!ffffe?f5!?e8!?f5!ee?f5!?e6!?f5!eeee?f5!eeee?f5!eeeeee?f5!ee?f5!eee?e5!?f10!eeee'),
  'time_icon': (0, 0, 8, 11,
-               'gggccggggggccgggggccccgggcggggcgcggggcgccgggcggccggcgggccgggcggccggggggcgcggggcgggccccgg'),
+               'gggccgggggccggggccccggcggggccggggcgcgggcggcggcgggcgggcggc?g6!gcggggcggccccg'),
  'tomate': (4, 3, 12, 13,
-            'ggggggg0gggggggg0g060gggggg060700ggggg02277220ggg0276767220g026226227220022c22722120022cc222221002222c222110g0222222210gg0222221110ggg00111100gggggg0000gggg'),
+            '?g7!0ggggggg0g060ggggg060700gggg02277220gg027676722002622622722022c2272212022cc?25!102222c22211g0?27!10g0?25!1110gg00111100ggggg0000ggg'),
  'tomate_coupe': (3, 4, 13, 11,
-                  'gggggg000ggggggggg02220ggggggg0233220gggggg02434220ggg00233433220g022224344320022334223320g02334320220gg0223442000gggg0222220ggggggg00000gggggg')}
+                  '?g6!000ggg?g5!02220gggggg0233220ggggg02434220gg0023343322g0222243443202233422332002334320220g0223442000ggg0?25!0gggggg?05!?g5!')}
diff --git a/src/test.py b/src/test.py
new file mode 100644 (file)
index 0000000..48890ed
--- /dev/null
@@ -0,0 +1,21 @@
+import os
+
+def readBestScore():
+  try:
+    file=open("alacarte.sav","r")
+    best = file.readline()
+    file.close()
+    return int(best)
+  except:
+    return 0
+
+def saveScore(score):
+  try :
+    file=open("alacarte.sav","w")
+    file.truncate(0)
+    file.write(str(score))
+    file.close()
+  except: pass
+
+saveScore(3)
+print(readBestScore())
\ No newline at end of file