| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import time
- t0 = time.time()
- def log(*msg):
- print("{} - ".format(str(time.time() - t0)[:5]), *msg)
- obstacles = [(1, 0), (1, 1)]
- # Version serveur
- def can_see_trough(pos):
- return pos not in obstacles
- def line(start, target, strict=True):
- """
- adapted from https://github.com/fragkakis/bresenham/blob/master/src/main/java/org/fragkakis/Bresenham.java
- if strict is true, None is return if an obstacle interrupted the line; else a partial line is returned (from start to obstacle)
- """
- line = []
- x0, y0 = start
- x1, y1 = target
- dx = abs(x1 - x0)
- dy = abs(y1 - y0)
- sx = 1 if x0 < x1 else -1
- sy = 1 if y0 < y1 else -1
- err = dx - dy
- x, y = x0, y0
- while 1:
- line.append((x, y))
- if x == x1 and y == y1:
- break
- e2 = 2 * err
- if e2 > (-1 * dy):
- err -= dy
- x += sx
- if e2 < dx:
- err += dx
- y += sy
- if not can_see_trough((x, y)):
- return None if strict else line
- return line
- log(line((0, 2), (4, 3))) # test droite / bas
- log(line((0, 5), (4, 3))) # test droite / haut
- log(line((8, 1), (4, 3))) # test gauche / bas
- log(line((8, 5), (4, 3))) # test gauche / haut
- #
- # def bresenhamForward(start, target):
- # x0, y0 = start
- # x1, y1 = target
- #
- # dx = abs(x1 - x0)
- # dy = abs(y1 - y0)
- #
- # sx = 1 if x0 < x1 else -1
- # sy = 1 if y0 < y1 else -1
- #
- # err = dx - dy
- # x, y = x0, y0
- #
- # while 1:
- # e2 = 2 * err
- # if e2 > (-1 * dy):
- # err -= dy
- # x += sx
- #
- # if e2 < dx:
- # err += dx
- # y += sy
- #
- # if x == x1 and y == y1:
- # break
- #
- # if can_see_trough((x, y)):
- # return []
- #
- # return []
- #
- #
- # def bresenhamBackward(start, target):
- # pass
- #
- #
- # def checkBulletPath(start, target):
- # if start[1] > target[1]:
- # return bresenhamForward(start, target)
- # else:
- # return bresenhamBackward(start, target)
|