Space Invaders Automatique

This commit is contained in:
2022-11-06 16:23:34 +01:00
parent c8ab2307e2
commit a0494690d7
2 changed files with 76 additions and 0 deletions

View File

@@ -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()

BIN
invaders_exemple01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB