Skip to content

Instantly share code, notes, and snippets.

@komly
Created August 10, 2015 19:14
Show Gist options
  • Save komly/978175f58ab9e975d164 to your computer and use it in GitHub Desktop.
Save komly/978175f58ab9e975d164 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import random
def seed(grid):
for i in range(3, 0, -1):
if 0 in grid[i]:
r = random.randrange(4)
while grid[i][r] != 0:
r = random.randrange(4)
grid[i][r] = random.randrange(1, 3)
return False
else:
return True
def left(grid, reverse=False):
moved = 0
for i in range(len(grid)):
grid[i] = list(filter(lambda a: a, grid[i]))
if reverse:
grid[i] = (4 - len(grid[i])) * [0] + grid[i]
else:
grid[i] += (4 - len(grid[i])) * [0]
for j in range(len(grid[i])):
if j < len(grid[i]) - 1 and grid[i][j] == grid[i][j + 1] and grid[i][j]:
if reverse:
grid[i][j + 1] *= 2
grid[i][j] = 0
else:
grid[i][j] *= 2
grid[i][j + 1] = 0
moved += 1
return left(grid, reverse) if moved else grid
def up(grid, reverse=False):
grid = [list(row) for row in list(zip(*grid))]
grid = left(grid, reverse)
grid = [list(row) for row in list(zip(*grid))]
return grid
def print_grid(grid):
for row in grid:
print(row)
grid = [[0 for i in range(4)] for j in range(4)]
while True:
final = seed(grid)
if final:
print("Game over")
break
print_grid(grid)
command = input()
if command == 'up':
grid = up(grid)
elif command == 'down':
grid = up(grid, True)
elif command == 'left':
grid = left(grid)
else:
grid = left(grid, True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment