Not moving doesn't add number

This commit is contained in:
2020-04-24 13:25:19 +03:00
parent 57a57bc26c
commit acd0b04963
+23 -19
View File
@@ -6,8 +6,9 @@ def game_logic(l):
oldHash = hash(tuple(l)) oldHash = hash(tuple(l))
line_state = True line_state = True
moved=0 global moved
ls=1 ls=0
#TODO: Should I double merge eg 4 2 2->8 0 0 or 4 4 0
while line_state: while line_state:
for i in range(board_line-1): for i in range(board_line-1):
if l[i+1] == None: if l[i+1] == None:
@@ -22,48 +23,47 @@ def game_logic(l):
l.insert(i,int(mi)*2) l.insert(i,int(mi)*2)
mi=l.pop(i+1) mi=l.pop(i+1)
l.insert(i+1,None) l.insert(i+1,None)
oldHash = hash(tuple(l))
elif l[i] > l[+1]: elif l[i] > l[+1]:
pass pass
newHash = hash(tuple(l)) 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: if oldHash == newHash:
line_state = False line_state = False
# print('Exiting: Boxes moved',ls)
else: else:
ls=ls+1
moved=moved+ls
oldHash = newHash oldHash = newHash
# print('Boxes moved',ls,'Repeating')
# return l,moved
return l return l
def movement(): def movement():
m = input('\nMove the numbers: ') m = input('\nMove the numbers: ')
global moved
moved=0
#TOOO: Implement undo function
#TODO: Simplify movement
# board_reset = board # board_reset = board
if m == 'h': if m == 'h':
for i in range(0,board_size,board_line): for i in range(0,board_size,board_line):
# print('line',i)
board[i:i+board_line]=game_logic(board[i:i+board_line]) board[i:i+board_line]=game_logic(board[i:i+board_line])
elif m == 'j': elif m == 'j':
for i in range(board_line): for i in range(board_line):
rl = board[i::board_line] rl = board[i::board_line]
print(rl) # print('column',i)
print(rl[::-1])
board[i::board_line]=game_logic(rl[::-1])[::-1] board[i::board_line]=game_logic(rl[::-1])[::-1]
elif m == 'k': elif m == 'k':
for i in range(board_line): for i in range(board_line):
# print('column',i)
rl = board[i::board_line] rl = board[i::board_line]
board[i::board_line]=game_logic(rl) board[i::board_line]=game_logic(rl)
elif m == 'l': elif m == 'l':
for i in range(0,board_size,board_line): for i in range(0,board_size,board_line):
# print('line',i)
rl = board[i:i+board_line] rl = board[i:i+board_line]
print(rl)
print(rl[::-1])
board[i:i+board_line]=game_logic(rl[::-1])[::-1] board[i:i+board_line]=game_logic(rl[::-1])[::-1]
# elif m == 'u': # elif m == 'u':
# board=board_reset # board=board_reset
@@ -81,6 +81,7 @@ def print_board():
for i in range(0,board_size,board_line): for i in range(0,board_size,board_line):
print(board[i:i+board_line]) print(board[i:i+board_line])
#TODO: Make a class so i can remove globals and simplify code
# class Game(): # class Game():
# def init(): # def init():
game_state = True game_state = True
@@ -94,13 +95,13 @@ for i in range(board_size):
indices = [i for i, x in enumerate(board) if x == None] indices = [i for i, x in enumerate(board) if x == None]
p = random.choice(indices) p = random.choice(indices)
board[p] = random.choices([2,4],weights=[80,20])[0] board[p] = random.choices([2,4],weights=[80,20])[0]
board_reset=copy.deepcopy(board) # board_reset=copy.deepcopy(board)
# def run(): # def run():
global moved
while game_state: while game_state:
print('') print('\nnew choice')
print('new choice')
print_board() print_board()
try: try:
@@ -110,7 +111,10 @@ while game_state:
#board=copy.deepcopy(board_reset) #board=copy.deepcopy(board_reset)
# continue # continue
pass pass
# print('coumbagia')
if moved == 0:
continue
try: try:
indices = [i for i, x in enumerate(board) if x == None] indices = [i for i, x in enumerate(board) if x == None]
p = random.choice(indices) p = random.choice(indices)