tipc21/alrys/alryslib.py

107 lines
12 KiB
Python

from math import atan2, hypot, pi, cos, sin, ceil
map=b"\xd9\x10\x48\x21\x50\x21\x38\x1a\x48\x14\x58\xa9\x01\x28\x71\x18\xb1\x01\x80\x02\x11\x60\x11\x38\x2a\x38\x14\x28\x15\x30\x91\x01\x78\x15\xe1\x01\x68\x44\x90\x01\x12\x30\x11\x30\x1a\x0b\x1a\x28\x14\x28\x35\x08\x1d\x41\x1d\x11\x1d\x09\x15\x30\x21\x20\x1d\x39\x1d\x29\x1d\xe0\x01\x0c\x88\x01\x12\x30\x19\x28\x1a\x1b\x1a\x18\x14\x38\xbd\x01\x10\x25\x20\x31\x20\x25\x19\x3d\x11\x1d\x70\x23\x10\x93\x01\x68\x14\x18\x11\x20\x2a\x0b\x2a\x10\x14\x30\x65\x28\x3d\x18\x1d\x30\x11\x38\x25\x09\x45\x09\x15\x50\xfb\x01\x50\x0c\x15\x14\x10\x19\x28\x52\x10\x0c\x48\x6d\x08\x45\x08\x25\x28\x21\x38\x75\x48\x93\x02\x30\x14\x25\x0c\x18\x11\x38\x3a\x68\x8d\x01\x1a\x3d\x28\x31\x38\x35\x14\x25\x40\xa3\x02\x28\x0c\x1d\x0c\x28\x19\x40\x22\x48\x11\x18\x5d\x52\x45\x18\x41\x38\x25\x14\x25\x40\xbb\x01\x19\x53\x28\x0c\x2d\x0c\x18\x21\x40\x12\x60\x2b\x10\x65\x1a\x3d\x38\x49\x38\x25\x14\x15\x48\x7b\x21\x23\x11\x5b\x20\x0c\x35\x0c\x20\x19\x40\x0a\x60\x3b\x18\x2d\x10\x65\x10\x0d\x20\x49\x48\x35\x58\x6b\x21\x23\x19\x53\x20\x0c\x35\x0c\x30\x21\x58\x0a\x18\x0e\x08\x43\x40\x2d\x19\x0d\x11\x0d\x09\x35\x28\x39\x40\x45\x58\x6b\x21\x13\x19\x53\x28\x0c\x2d\x0c\x30\x21\x58\x0a\x28\x4b\x48\x1d\x51\x25\x28\x49\x30\x55\x50\x73\x41\x5b\x28\x0c\x25\x0c\x38\x11\x88\x01\x53\x58\x0d\x49\x25\x38\x41\x38\x55\x50\x73\x31\x5b\x28\x0c\x25\x0c\x40\x11\x80\x01\x63\x48\x1d\x49\x25\x28\x41\x40\x75\x08\x09\x20\x6b\x31\x5b\x28\x0c\x2d\x14\x30\x19\x78\x5b\x50\x25\x49\x25\x28\x39\x38\x85\x01\x08\x11\x28\x73\x31\x43\x28\x0c\x3d\x0c\x30\x19\x30\x14\x28\x5b\x50\x35\x39\x35\x28\x31\x18\x0e\x18\x8d\x01\x19\x28\x63\x31\x4b\x20\x0c\x3d\x0c\x38\x19\x28\x24\x18\x63\x48\x3d\x41\x35\x18\x41\x40\x7d\x21\x28\x5b\x20\x11\x53\x18\x14\x35\x0c\x38\x21\x28\x14\x18\x6b\x40\x2d\x12\x0d\x49\x35\x10\x41\x48\x2d\x22\x25\x10\x29\x18\x5b\x19\x08\x11\x53\x20\x0c\x35\x0c\x38\x19\x30\x0c\x18\x7b\x38\x25\x12\x1d\x41\x35\x18\x31\x58\x2d\x22\x1d\x18\x31\x10\x53\x19\x08\x09\x63\x18\x0c\x35\x0c\x38\x11\x30\x0c\x18\x8b\x01\x30\x1d\x12\x25\x49\x2d\x18\x31\x60\x2d\x12\x25\x28\x29\x10\x43\x21\x10\x09\x5b\x18\x14\x2d\x14\x30\x11\x38\x0c\x10\x3b\x1c\x3b\x38\x0d\x1a\x1d\x51\x2d\x10\x41\x58\x2d\x0a\x2d\x30\x29\x10\x3b\x29\x08\x09\x5b\x20\x0c\x35\x0c\x28\x19\x10\x09\x20\x0c\x08\x4b\x1c\x2b\x30\x1d\x22\x1d\x49\x2d\x10\x41\x28\x14\x28\x55\x38\x29\x10\x3b\x09\x14\x09\x08\x11\x53\x28\x0c\x35\x0c\x20\x39\x20\x0c\x08\x43\x14\x33\x38\x15\x1a\x2d\x49\x25\x10\x39\x28\x1c\x20\x5d\x40\x29\x10\x33\x09\x0c\x11\x08\x11\x53\x28\x0c\x35\x0c\x18\x39\x20\x0c\x10\x43\x24\x1b\x40\x25\x0a\x3d\x39\x25\x18\x29\x30\x0c\x30\x5d\x40\x29\x10\x33\x21\x08\x19\x4b\x28\x0c\x35\x0c\x18\x31\x38\x83\x01\x38\x7d\x21\x2d\x18\x41\x20\x0c\x28\x5d\x40\x29\x10\x3b\x19\x0f\x11\x53\x28\x0c\x35\x0c\x10\x31\x50\x73\x30\x8d\x01\x19\x2d\x18\x31\x30\x0c\x28\x5d\x38\x29\x10\x43\x31\x4b\x28\x0c\x45\x0c\x08\x29\x30\x15\x10\x83\x01\x30\x8d\x01\x11\x2d\x18\x29\x30\x0c\x30\x5d\x38\x29\x10\x4b\x29\x43\x28\x0c\x4d\x0c\x08\x29\x14\x18\x25\x8b\x01\x38\x5d\x12\x25\x09\x2d\x18\x29\x30\x0c\x28\x35\x14\x25\x30\x29\x10\x5b\x19\x43\x30\x0c\x45\x0c\x18\x21\x1c\x10\x25\x43\x11\x3b\x40\x55\x0a\x2d\x09\x2d\x10\x29\x60\x35\x24\x1d\x30\x29\x10\x63\x11\x3b\x30\x0c\x25\x12\x25\x0c\x10\x21\x14\x20\x15\x2b\x20\x4b\x48\xad\x01\x18\x29\x50\x3d\x24\x1d\x28\x29\x10\x1b\x10\x43\x11\x33\x30\x0c\x65\x0c\x10\x19\x0c\x30\x2b\x30\x3b\x20\x1c\x30\x95\x01\x18\x21\x58\x3d\x24\x1d\x28\x29\x10\x1b\x10\x43\x11\x1b\x48\x0c\x35\x12\x25\x0c\x10\x19\x30\x2b\x38\x3b\x20\x14\x50\x7d\x10\x31\x48\x4d\x14\x25\x20\x29\x10\x23\x18\x3b\x09\x13\x60\x0c\x5d\x0c\x18\x11\x30\x1b\x58\x33\x20\x0c\x68\x65\x18\x29\x58\x6d\x28\x19\x10\x23\x28\x43\x60\x0c\x5d\x0c\x18\x19\x38\x0b\x60\x33\x18\x21\x70\x4d\x18\x31\x60\x5d\x30\x11\x10\x23\x30\x33\x58\x0c\x65\x0c\x20\x19\xa0\x01\x33\x08\x41\x58\x55\x18\x39\x58\x5d\x30\x11\x10\x23\x10\x14\x10\x33\x40\x0a\x0c\x5d\x0c\x20\x31\xa8\x01\x23\x10\x39\x58\x5d\x20\x31\x60\x55\x30\x09\x10\x23\x10\x24\x10\x3b\x30\x1a\x5d\x18\x39\x18\x1c\x50\x0f\x28\x1b\x10\x41\x40\x6d\x18\x31\x68\x4d\x50\x23\x18\x14\x18\x4b\x28\x1a\x5d\x20\x29\x20\x0c\x90\x01\x0b\x20\x41\x28\x7d\x20\x21\x30\x1a\x20\x4d\x28\x14\x20\x23\x10\x14\x0f\x14\x08\x5b\x20\x1a\x4d\x40\x11\x58\x12\x38\x12\x30\x49\x18\x3d\x22\x2d\x20\x21\x30\x12\x28\x45\x30\x0c\x28\x23\x10\x14\x08\x14\x10\x53\x30\x12\x3d\x38\x0a\x08\x19\x48\x12\x88\x01\x39\x08\x09\x08\x4d\x12\x35\x28\x11\x30\x12\x0c\x20\x45\x60\x23\x20\x0c\x08\x0c\x10\x5b\x18\x0c\x18\x12\x2d\x20\x1c\x10\x21\x48\x22\x70\x39\x20\x8d\x01\x20\x29\x30\x0c\x20\x3d\x38\x12\x20\x23\x18\x0d\x10\x0d\x10\x63\x28\x1a\x3d\x18\x0c\x18\x19\x48\x1a\x48\x14\x18\x41\x20\x55\x0f\x3d\x18\x39\x28\x0c\x18\x45\x10\x0c\x20\x12\x20\x23\x10\x12\x0d\x08\x0d\x18\x63\x18\x2a\x3d\x18\x0c\x08\x21\x58\x69\x08\x49\x18\x9d\x01\x10\x49\x28\x0c\x08\x45\x10\x14\x28\x12\x10\x23\x18\x0a\x20\x0a\x08\x73\x20\x22\x3d\x28\x0a\x99\x02\x18\x4d\x11\x4d\x08\x59\x20\x0c\x45\x18\x0c\x50\x23\x50\x7b\x20\x22\x3d\x20\x0a\x91\x02\x18\x4d\x21\x45\x08\x59\x20\x4d\x20\x0c\x28\x0c\x10\x23\x50\x83\x01\x28\x22\x35\x28\x89\x02\x18\x45\x39\x3d\x08\x51\x28\x35\x30\x0c\x48\x23\x28\x14\x08\x0c\x93\x01\x20\x2a\x35\x10\xb1\x01\x30\x31\x18\x3d\x41\x45\x10\x51\x20\x35\x38\x0c\x38\x23\x58\x33\x19\x3b\x30\x22\x35\x18\x79\x60\x21\x20\x2d\x0e\x49\x4d\x08\x61\x10\x35\x38\x0c\x40\x23\x20\x24\x08\x14\x33\x19\x3b\x20\x3a\x35\x18\x51\x38\x13\x28\x15\x11\x18\x3d\x61\x45\x10\x49\x1a\x3d\x38\x0c\x38\x23\x30\x14\x10\x14\x3b\x11\x43\x20\x3a\x2d\x10\x41\x78\x7d\x71\x3d\x10\x49\x0a\x0f\x08\x35\x50\x0c\x30\x23\x38\x12\x08\x4b\x11\x3b\x30\x32\x25\x10\x31\x78\x95\x01\x69\x3d\x10\x49\x1a\x2d\x28\x22\x40\x23\x38\x22\x4b\x11\x43\x38\x22\x25\x18\x21\x78\x95\x01\x79\x35\x10\x61\x3d\x70\x23\x50\x12\x43\x11\x4b\x14\x20\x0c\x08\x1a\x25\x18\x11\x80\x01\x9d\x01\x79\x35\x18\x39\x18\x35\x50\x0a\x28\x23\x28\x32\x0b\x08\x93\x01\x24\x18\x22\x25\x18\x11\x30\x33\x10\xb5\x01\x71\x35\x18\x39\x18\x35\x78\x23\x38\x1a\x20\x9b\x01\x0c\x20\x2a\x25\x10\x31\x08\x33\x08\xed\x01\x51\x35\x18\x39\x18\x35\x78\x23\x38\x0a\x0e\x0a\x20\x9b\x01\x28\x2a\x25\x10\x21\x18\x3b\xfd\x01\x29\x4d\x20\x31\x10\x35\x28\x2a\x28\x2b\x30\x12\x08\x12\x18\xa3\x01\x28\x2a\x25\x10\x11\x20\x13\x08\x0f\x08\x13\x8d\x01\x2a\x65\x11\x4d\x28\x21\x10\x35\x28\x3a\x18\x2b\x30\x1a\x08\x0a\x28\x9b\x01\x28\x2a\x25\x08\x21\x18\x13\x18\x13\x08\x8d\x01\x2a\x8d\x01\x1c\x15\x18\x31\x08\x35\x30\x12\x1b\x12\x10\x2b\x38\x12\x40\xa3\x01\x20\x22\x25\x18\x11\x20\x13\x10\x1b\x20\x6d\x3a\x7d\x2c\x0d\x18\x29\x10\x2d\x38\x12\x1b\x12\x08\x3b\x30\x0a\x48\xa3\x01\x20\x2a\x25\x10\x11\x12\x18\x13\x08\x13\x40\x55\x12\x1b\x1a\x7d\x1c\x15\x20\x21\x08\x25\x48\x3a\x3b\x08\x0b\x70\xa3\x01\x20\x2a\x25\x10\x21\x28\x0b\x08\x0b\x60\x45\x0a\x13\x1a\xad\x01\x18\x29\x1d\x60\x2a\x53\x20\x23\x08\x4b\x19\x6b\x08\x0e\x20\x22\x25\x10\x11\x68\x12\xb0\x01\x45\x22\x3d\x10\x31\x15\x38\x15\x40\x9b\x01\x08\x4b\x21\x63\x38\x1a\x1d\x18\x11\x28\x12\x28\x12\xc0\x01\x3d\x12\x0b\x12\x35\x10\x29\x08\x0d\x38\x25\x30\xa3\x01\x08\x43\x21\x73\x38\x1a\x15\x18\x11\x28\x1b\x18\x12\x40\x0a\x88\x01\x35\x1a\x0b\x0a\x35\x10\x41\x38\x15\x30\xab\x01\x08\x43\x19\x73\x40\x1a\x0d\x18\x19\x18\x4b\x40\x0a\x40\x1c\x40\x35\x1a\x3d\x10\x39\x78\x93\x01\x40\x33\x11\x6b\x50\x1a\x0d\x10\x19\x08\x73\x28\x0a\x38\x1c\x50\x6d\x20\x31\x80\x01\x73\x68\x33\x09\x6b\x48\x1a\x0d\x20\x11\x93\x01\x18\x0a\x38\x1c\x68\x3d\x88\x01\x1a\x38\x6b\x78\xa3\x01\x48\x1a\x0d\x20\x11\x9b\x02\x68\x1d\x88\x01\x2a\x28\x43\x48\x5a\x0e\x08\x7b\x11\x1b\x38\x22\x0d\x20\x11\x43\x19\xa3\x02\xa0\x01\x22\x28\x4b\x38\x6a\x10\x8b\x01\x09\x1b\x30\x22\x0d\x28\x11\x43\x09\x0c\x08\x0c\x11\xd3\x03\x08\x5b\x38\x32\x18\x22\x18\x93\x01\x09\x1b\x28\x1a\x0d\x10\x0f\x18\x11\x43\x29\xdb\x01\x19\xeb\x01\x08\x53\x38\x42\x10\x1a\x18\xbb\x01\x30\x22\x0d\x18\x19\xab\x02\x31\xeb\x01\x08\x4b\x40\x22\x08\x1a\x18\x12\x10\xcb\x01\x28\x22\x0d\x10\x21\x23\x58\xb3\x01\x19\x83\x02\x08\x43\x58\x2a\x28\x0a\x18\xc3\x01\x20\x22\x28\x21\x0b\x70\xc3\x03\x08\x3b\x18\x12\x50\x1a\x20\x0a\x20\xc3\x01\x20\x1a\x30\x19\x0b\x70\x9b\x01\x70\x13\x20\x8b\x01\x08\x4b\x60\x12\x20\x12\x28\xbb\x01\x20\x1a\x20\x31\x90\x01\x3b\xb8\x01\x0b\x0a\x60\x13\x10\x1b\x28\x1b\xa0\x01\x12\x18\x0a\x18\x43\x11\x6b\x30\x0b\x28\x29\xb0\x01\x13\x60\x12\xe8\x01\x0b\x30\x0b\x90\x01\x2a\x20\x0a\x10\x0b\x08\x33\x09\x0a\x09\x6b\x70\x21\xcd\x02\x14\xad\x01\xe8\x01\x1a\x30\x0a\x53\x11\x73\x30\x14\x11\x18\x29\x45\x0e\xd5\x01\x1c\x45\x14\x75\x60\x22\x78\x12\x40\xcb\x01\x30\x14\x28\x31\x35\x22\xad\x02\x24\x4d\x80\x01\x15\x58\x1a\x50\xcb\x01\x20\x1c\x28\x41\x35\x1a\x85\x01\x2c\x1d\x0c\x0d\x0c\x1d\x0c\x3d\x14\x45\x98\x01\x0f\x98\x01\x12\x28\xc3\x01\x18\x24\x18\x51\x35\x0a\xb5\x01\x14\x1d\x14\x0d\x0c\x3d\x14\x45\x50\x0e\xa0\x01\x1a\x08\x1c\x0b\x40\x53\x0f\x6b\x20\x1c\x08\x0c\x61\xe5\x01\x14\x25\x14\x15\x0c\x0d\x0c\x25\x0c\x35\x48\x3a\x28\x12\x30\x51\x20\x19\x10\x09\x60\x63\x28\x14\x18\x61\x6d\x13\x75\x14\x3d\x0c\x45\x0c\x0d\x58\x1a\x91\x02\x40\x31\x08\x6b\x20\x14\x20\x61\x5d\x13\xcd\x01\x80\x01\xe1\x02\x40\x21\x08\x6b\x20\x0c\x09\x28\xc1\x01\x08\x31\x20\x3d\xa8\x01\x89\x03\x38\x11\x08\x6b\x18\x14\x20\x21\x20\x21\x10\x29\x28\x11\x08\x41\x20\x15\xb0\x01\xa9\x03\x18\x21\x08\x53\x30\x14\x28\x19\x0f\x11\x68\x19\x20\x49\x88\x01\x81\x04\x12\x10\x11\x08\x3b\x50\x0e\x10\xb9\x09"
def getmap(xr, yr, x=0, y=0, i=0, rle=map, w=146, nbits=3):
xr, yr = int(xr), int(yr)
xold, yold, iold = x, y, i
maskval = (1 << nbits) - 1
maskcnt = (0xFF >> nbits >> 1) << nbits
while i<len(rle) and (y < yr or y == yr and x <= xr):
xold, yold, iold = x, y, i
v=rle[i]
c = (v & maskcnt) >> nbits
if v & 0b10000000:
i += 1
c |= rle[i] << (7 - nbits)
x += c
y += x // w
x %= w
i += 1
return rle[iold] & maskval, xold, yold, iold
def interpolx2y(x1, y1, x2, y2, x):
return y1 + (y2 - y1) * (x - x1) / (x2 - x1)
def interpoly2x(x1, y1, x2, y2, y):
return x1 + (x2 - x1) * (y - y1) / (y2 - y1)
def sign(x):
return (x > 0) - (x < 0)
def segments(x1, y1, x2, y2):
dx, dy = sign(x2 - x1), sign(y2 - y1)
lx, ly = [], []
if dx:
if dx > 0:
r = range(int(x2) + (ceil(x2) > x2) - 1, int(x1), -1)
else:
r = range(int(x2) + 1, int(x1) + (ceil(x1) > x1), 1)
for x in r:
lx.append((x, interpolx2y(x1, y1, x2, y2, x)))
if dy:
if dy > 0:
r = range(int(y2) + (ceil(y2) > y2) - 1, int(y1), -1)
else:
r = range(int(y2) + 1, int(y1) + (ceil(y1) > y1), 1)
for y in r:
ly.append((interpoly2x(x1, y1, x2, y2, y), y))
l = [(x1, y1)]
while len(lx) or len(ly):
if not(len(ly)) or len(lx) and abs(lx[-1][0] - l[-1][0]) < abs(ly[-1][0] - l[-1][0]):
l.append(lx.pop())
else:
l.append(ly.pop())
l.append((x2, y2))
return l
def peut_aller(id):
return id != 1 and (id != 3 or state[6])
def a_gagne():
return state[9] >= 10
def en_avant(l, refresh=False):
state[3] -= .1
a = state[2] * pi / 180
destx = state[0] + l*cos(a)
desty = state[1] + l*sin(a)
l = segments(state[0], state[1], destx, desty)
for k in range(1, len(l)):
c, xr, yr, ir = getmap(int(min(state[0],l[k][0])), int(min(state[1],l[k][1])))
if not(peut_aller(c)) or not(peut_aller(getmap(l[k][0], l[k][1], xr, yr, ir)[0])): break
d = hypot(l[k][0] - state[0], l[k][1] - state[1]) * (.2 + ((c == 5) and .1 or (c == 4) and .2 or (c == 2) and .3))
state[3] -= d # score
state[4] -= d # life
state[0:2] = l[k][0:2]
if c == 7 and not(xr in state[8]):
if state[4] >= 100:
state[4] = max(state[4] - 100, 0)
state[3] += 100
state[5] += 1
state[8].append(xr)
state[9] += 1
if c == 6 and xr != state[7]:
if not state[6] and state[9] >= 9:
state[6] = 1
elif state[5]:
state[4] = min(250, state[4] + 120)
state[5] -= 1
state[7] = xr
def a_droite(a): state[2] += a
def aller_selon(f, start):
global state
# x y a score life tokens boat ldonj lvill
x, a, y, b = start[4:8]
x += a * 1e-14
y += b * 1e-14
state = [x, y, 0, 0, start[0], int(start[1]), int(start[2]), 0, [], int(start[3])]
while f() and not(a_gagne()): pass
state[3] += 1000 * a_gagne()
return state[3]
def action_clavier():
return