这一关的图片是一张迷宫地图,只不过白色部分是迷宫的墙,深色部分是路。根据标题from top to bottom的提示,入口就是图片的右上角,出口就是图片的左下角。一开始以为路线会构成谜底, 结果:
显然这还不是谜底。在仔细观察迷宫的路径,可以发现每个一个像素点,路径上的颜色就会变化,应该包含了一些信息。将这些像素点的R通道数据用二进制写到文件,打开可以发现前两位是 PK ,那么这些信息其实是构成了一个ZIP文件。更改后缀,解压,里面有两个文件,其中一个就是谜底了。
代码如下:
import Image,ImageDraw
img = Image.open('maze.png').getdata()
new = Image.new('RGBA',img.size,'black')
newimg = ImageDraw.Draw(new)
for i in range(img.size[1]):
if img.getpixel((i,0))[0]==0:
pos = (i,0)
if img.getpixel((i,img.size[0]-1))[0]==0:
endpos = (i,img.size[0]-1)
path = []
wholepath = []
dire = [(1,0),(0,1),(-1,0),(0,-1)]
wall = (255,)*4
while pos!=endpos:
img.putpixel(pos, wall)
flag = 0
newpos = pos
for i in dire:
try:
pp = (pos[0]+i[0],pos[1]+i[1])
if img.getpixel(pp)!=wall:
flag+=1
newpos = pp
except:
pass
if flag==0:
if path == []:
path = wholepath.pop()
continue
pos = path[0]
path = []
elif flag>1:
wholepath.append(path)
path = [pos]
pos = newpos
else:
path.append(pos)
pos = newpos
else:
path.append(pos)
wholepath.append(path)
img = Image.open('maze.png').getdata()
data = [(img.getpixel(k)[0],new.putpixel(k, wall)) for i in wholepath for k in i]
out = open('out24.zip','wb')
for i in data[1::2]:
out.write(chr(i[0]))
out.close()
new.save('out24.png')
结果为:
谜底就是lake啦