Skip to content

Instantly share code, notes, and snippets.

@retrage
Last active August 29, 2015 14:00
Show Gist options
  • Save retrage/966384f8467d7cde8126 to your computer and use it in GitHub Desktop.
Save retrage/966384f8467d7cde8126 to your computer and use it in GitHub Desktop.
This script is a command-line 2048 game.
import random
import copy
import curses
table = [[0 for j in range(4)] for i in range(4)]
def init(table):
table[0][0] = random.randint(1,2)*2
table[0][2] = random.randint(1,2)*2
return table
def manipulate(table):
new_table = copy.deepcopy(table)
nnt = []
for row in new_table:
new_row = [n for n in row if n!=0]
i = 0
reversed_row = list(reversed(new_row))
while i < len(reversed_row)-1:
if reversed_row[i] == reversed_row[i+1]:
reversed_row[i] = reversed_row[i] + reversed_row[i+1]
del reversed_row[i+1]
i += 1
new_row = [0 for n in range(4-len(reversed_row))] + list(reversed(reversed_row))
nnt.append(new_row)
empty_cell = []
for i in range(4):
for j in range(4):
if nnt[i][j] == 0:
empty_cell.append([i,j])
if empty_cell:
add_cell = empty_cell[random.randint(0, len(empty_cell)-1)]
nnt[add_cell[0]][add_cell[1]] = random.randint(1,2)*2
return nnt
def routate(table, degree):
new_table = [[0 for j in range(4)] for i in range(4)]
for i in range(len(table)):
for j in range(len(table[i])):
if degree == 0 or degree == 360:
new_table[i][j] = table[i][j]
elif degree == 180:
new_table[i][j] = table[3-i][3-j]
elif degree == 90:
new_table[i][j] = table[j][3-i]
elif degree == 270:
new_table[i][j] = table[3-j][i]
return new_table
def move(table, key):
new_table = copy.deepcopy(table)
degree = 0
if key == 'h':
degree = 180
elif key == 'l':
degree = 0
elif key == 'j':
degree = 90
elif key == 'k':
degree = 270
new_table = routate(table, degree)
new_table = manipulate(new_table)
new_table = routate(new_table, abs(360-degree))
return new_table
def can_continue(table):
def can_move(table):
for i in range(len(table)):
for j in range(len(table[i])-1):
if table[i][j] == table[i][j+1]:
return True
return False
if can_move(table) or can_move(routate(table, 90)):
return True
else:
return False
if __name__ == '__main__':
init(table)
while can_continue(table):
for row in table:
print '%4d %4d %4d %4d\n' % (row[0],row[1],row[2],row[3])
key = raw_input('--> ')
table = move(table, key)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment