Skip to content

Instantly share code, notes, and snippets.

@iam4722202468
Created September 19, 2021 18:57
Show Gist options
  • Save iam4722202468/4bb96f23c96f6ce95951f099a1c0e114 to your computer and use it in GitHub Desktop.
Save iam4722202468/4bb96f23c96f6ce95951f099a1c0e114 to your computer and use it in GitHub Desktop.
import random
size = 7
map = []
for x in range(size):
tmp = []
for y in range(size):
tmp.append('')
map.append(tmp)
def printMap(ms, red, blue):
for y, m in enumerate(ms):
for x, p in enumerate(m):
c = ''
if blue != None:
if y == blue[1] and x == blue[0]:
c = '\033[94m'
if red != None:
if y == red[1] and x == red[0]:
c = '\033[91m'
if p == '':
print(c +' ', end='\033[0m')
else:
print(c+p, end='\033[0m')
print('')
queue = []
def extend(chr, dir):
if chr == '╴' and dir == 'D':
return '┐'
if chr == '╴' and dir == 'R':
return '─'
if chr == '╴' and dir == 'U':
return '┘'
if chr == '╵' and dir == 'D':
return '│'
if chr == '╵' and dir == 'R':
return '└'
if chr == '╵' and dir == 'L':
return '┘'
if chr == '╶' and dir == 'D':
return '┌'
if chr == '╶' and dir == 'L':
return '─'
if chr == '╶' and dir == 'U':
return '└'
if chr == '╷' and dir == 'L':
return '┐'
if chr == '╷' and dir == 'R':
return '┌'
if chr == '╷' and dir == 'U':
return '│'
if chr == '─' and dir == 'D':
return '┬'
if chr == '─' and dir == 'U':
return '┴'
if chr == '│' and dir == 'L':
return '┤'
if chr == '│' and dir == 'R':
return '├'
if chr == '┌' and dir == 'L':
return '┬'
if chr == '┌' and dir == 'U':
return '├'
if chr == '┐' and dir == 'R':
return '┬'
if chr == '┐' and dir == 'U':
return '┤'
if chr == '└' and dir == 'L':
return '┴'
if chr == '└' and dir == 'D':
return '├'
if chr == '┘' and dir == 'D':
return '┤'
if chr == '┘' and dir == 'R':
return '┴'
return None
def addNextTo(q, p, map):
queue = []
if p[1] + 1 < size:
queue.append((p[0], p[1]+1))
if p[0] + 1 < size:
queue.append((p[0]+1, p[1]))
if p[0] > 0:
queue.append((p[0]-1, p[1]))
if p[1] > 0:
queue.append((p[0], p[1]-1))
random.shuffle(queue)
for n in queue:
if map[n[1]][n[0]] == '':
q.append(n)
start = (0,5)
queue.append(start)
for i in range(0,1000):
if len(queue) == 0:
break
p = queue.pop(0)
chr = map[p[1]][p[0]]
nearby = set()
for y in [-1, 0, 1]:
for x in [-1, 0, 1]:
if y != 0 and x != 0:
continue
ny = p[1] + y
nx = p[0] + x
if nx < 0 or ny < 0 or nx > size-1 or ny > size-1:
continue
tchr = map[ny][nx]
if tchr != '':
nearby.add((nx,ny))
if len(nearby) == 0:
map[p[1]][p[0]] = '╶'
addNextTo(queue, p, map)
else:
lst = list(nearby)
random.shuffle(lst)
for n in lst:
tchr = map[n[1]][n[0]]
d = None
if n[1] > p[1]:
d = 'U'
if n[1] < p[1]:
d = 'D'
if n[0] > p[0]:
d = 'L'
if n[0] < p[0]:
d = 'R'
if d == None:
continue
extended = extend(tchr, d)
if extended == None:
continue
map[n[1]][n[0]] = extended
addNextTo(queue, p, map)
if d == 'L':
map[p[1]][p[0]] = '╶'
if d == 'R':
map[p[1]][p[0]] = '╴'
if d == 'U':
map[p[1]][p[0]] = '╷'
if d == 'D':
map[p[1]][p[0]] = '╵'
printMap(map, p, n)
break
print("_______")
printMap(map, None, None)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment