From acd0b049631317c0a014b508c1c828de1bd8d365 Mon Sep 17 00:00:00 2001 From: Babis Trapalis Date: Fri, 24 Apr 2020 13:25:19 +0300 Subject: [PATCH] Not moving doesn't add number --- g2048.py | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/g2048.py b/g2048.py index 324a45c..304148a 100755 --- a/g2048.py +++ b/g2048.py @@ -6,8 +6,9 @@ def game_logic(l): oldHash = hash(tuple(l)) line_state = True - moved=0 - ls=1 + global moved + ls=0 + #TODO: Should I double merge eg 4 2 2->8 0 0 or 4 4 0 while line_state: for i in range(board_line-1): if l[i+1] == None: @@ -22,48 +23,47 @@ def game_logic(l): l.insert(i,int(mi)*2) mi=l.pop(i+1) l.insert(i+1,None) - oldHash = hash(tuple(l)) elif l[i] > l[+1]: pass newHash = hash(tuple(l)) - #TODO: don't move when there is no chage - if oldHash == newHash and ls==1: - moved=moved+1 - print('Moved in line',moved) - ls=i+1 - - # print (oldHash,newHash) if oldHash == newHash: line_state = False + # print('Exiting: Boxes moved',ls) else: + ls=ls+1 + moved=moved+ls oldHash = newHash + # print('Boxes moved',ls,'Repeating') - # return l,moved return l def movement(): m = input('\nMove the numbers: ') + global moved + moved=0 + #TOOO: Implement undo function + #TODO: Simplify movement # board_reset = board if m == 'h': for i in range(0,board_size,board_line): + # print('line',i) board[i:i+board_line]=game_logic(board[i:i+board_line]) elif m == 'j': for i in range(board_line): rl = board[i::board_line] - print(rl) - print(rl[::-1]) + # print('column',i) board[i::board_line]=game_logic(rl[::-1])[::-1] elif m == 'k': for i in range(board_line): + # print('column',i) rl = board[i::board_line] board[i::board_line]=game_logic(rl) elif m == 'l': for i in range(0,board_size,board_line): + # print('line',i) rl = board[i:i+board_line] - print(rl) - print(rl[::-1]) board[i:i+board_line]=game_logic(rl[::-1])[::-1] # elif m == 'u': # board=board_reset @@ -81,6 +81,7 @@ def print_board(): for i in range(0,board_size,board_line): print(board[i:i+board_line]) +#TODO: Make a class so i can remove globals and simplify code # class Game(): # def init(): game_state = True @@ -94,13 +95,13 @@ for i in range(board_size): indices = [i for i, x in enumerate(board) if x == None] p = random.choice(indices) board[p] = random.choices([2,4],weights=[80,20])[0] -board_reset=copy.deepcopy(board) +# board_reset=copy.deepcopy(board) # def run(): +global moved while game_state: - print('') - print('new choice') + print('\nnew choice') print_board() try: @@ -110,7 +111,10 @@ while game_state: #board=copy.deepcopy(board_reset) # continue pass - # print('coumbagia') + + if moved == 0: + continue + try: indices = [i for i, x in enumerate(board) if x == None] p = random.choice(indices)