From a0494690d74f29ef43d97655de81f44ed5865f39 Mon Sep 17 00:00:00 2001 From: Francois JUMELLE Date: Sun, 6 Nov 2022 16:23:34 +0100 Subject: [PATCH] Space Invaders Automatique --- Space invaders Automatique.py | 76 ++++++++++++++++++++++++++++++++++ invaders_exemple01.png | Bin 0 -> 3713 bytes 2 files changed, 76 insertions(+) create mode 100644 Space invaders Automatique.py create mode 100644 invaders_exemple01.png diff --git a/Space invaders Automatique.py b/Space invaders Automatique.py new file mode 100644 index 0000000..5049a0e --- /dev/null +++ b/Space invaders Automatique.py @@ -0,0 +1,76 @@ +from PIL import Image +import requests +import base64 +from io import BytesIO + +modeles = "invaders_exemple01.png" +modeles_solution = "DAAHEADBBHEBGIAFFIFAGIGB" + +url_get = "https://pydefis.callicode.fr/defis/C22_Invaders01/get/Cavogrenier/bb052" +url_post = "https://pydefis.callicode.fr/defis/C22_Invaders01/post/Cavogrenier/bb052" + +def convert_b_and_w(image): + """Convert the img to black and white""" + img = Image.open(image) + width, height = img.size + res = Image.new("1", (width, height)) + for y in range(height): + for x in range(width): + pixel = img.getpixel((x,y)) + if pixel == (0, 0, 0): + res.putpixel((x,y), 0) + else: + res.putpixel((x,y), 1) + return res + +def get_image_fingerprint(img): + width, height = img.size + res = [] + for y in range(height): + for x in range(width): + res.append(str(img.getpixel((x,y)))) + return "".join(res) + +convert_b_and_w(modeles) + +img_modeles = convert_b_and_w(modeles) + +width_modeles, height_modeles = img_modeles.size +width_modele = width_modeles // 6 +height_modele = height_modeles // 4 + +#Learn from modeles +offset = 0 +mods = {} +for y in range(4): + for x in range(6): + tmp = img_modeles.crop((x*width_modele, y*height_modele, (x+1)*width_modele, (y+1)*height_modele)) + mods[get_image_fingerprint(tmp)] = modeles_solution[offset] + #print(modeles_solution[offset],get_image_fingerprint(tmp)) + offset = offset + 1 + + +res = requests.get(url_get) +sig = res.text.splitlines()[0] +contents = "".join(res.text.splitlines()[1:]).replace("\r", "").replace("\n", "") + +screen = convert_b_and_w(BytesIO(base64.b64decode(contents))) + +solution = "" +for y in range(4): + for x in range(6): + tmp = get_image_fingerprint(screen.crop((x*width_modele, y*height_modele, (x+1)*width_modele, (y+1)*height_modele))) + if tmp in mods: + solution = solution + mods[tmp] + else: + solution = solution + "C" + +print(solution) + +param = {'sig':sig, 'rep':solution} +res = requests.post(url_post, verify=False, data=param) + +print(res) +print(res.text) + +screen.show() diff --git a/invaders_exemple01.png b/invaders_exemple01.png new file mode 100644 index 0000000000000000000000000000000000000000..671930dafcbe13b2a2542410bc264204477a337b GIT binary patch literal 3713 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 dG!1fgxfF*sIx%f&2wp8A`&~U