-
Notifications
You must be signed in to change notification settings - Fork 1
/
2048_Merge_Advanced.py
84 lines (79 loc) · 2.55 KB
/
2048_Merge_Advanced.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"""
Merge function for 2048 game.
"""
def merge(line):
"""
Function that merges a single row or column in 2048.
"""
# move all the empty tiles to the end of the line
line = move_empty(line)
# merge adjacent tiles with equal value
for num in range(len(line)-1):
if line[num] == line[num+1]:
line[num] *= 2
line[num+1] = 0
# move all the empty tiles to the end of the line
line = move_empty(line)
return line
def move_empty(line):
"""
Function that moves all empty tiles to the end of the list.
"""
new_line = []
count_zero = 0
for num in range(len(line)):
if line[num] == 0:
count_zero += 1
else:
new_line.append(line[num])
# vul aan met nullen
for num in range(count_zero):
new_line.append(0)
return new_line
def merge2(line):
"""
Advanced function to merge a single row or column in 2048.
"""
# Initialize variables for this function
new_line = []
merged = False
# Copy and merge existing numbers to new_line
for num in range(len(line)):
if line[num] != 0:
if len(new_line) == 0:
new_line.append(line[num])
elif merged | (new_line[-1] != line[num]):
new_line.append(line[num])
merged = False
else:
new_line[-1] *= 2
merged = True
# Make new_line the same length of line by adding zeroes.
count_zeroes = len(line) - len(new_line)
for num in range(count_zeroes):
new_line.append(0)
return new_line
# Test to do intermediate tests on code
def run_test():
"""
Function that runs tests for merge/merge2
"""
# my_list = [0, 2, 0, 2, 4, 0, 0, 8]
# my_list = [2, 2, 4, 8]
# my_list = []
my_list = [2, 0, 2, 4]
print "my_list before merge =", my_list
print "returned by merge =", merge2(my_list), "expected [4, 4, 0, 0]"
my_list = [0, 0, 2, 2]
print "my_list before merge =", my_list
print "returned by merge =", merge2(my_list), "expected [4, 0, 0, 0]"
my_list = [2, 2, 0, 0]
print "my_list before merge =", my_list
print "returned by merge =", merge2(my_list), "expected [4, 0, 0, 0]"
my_list = [2, 2, 2, 2, 2]
print "my_list before merge =", my_list
print "returned by merge =", merge2(my_list), "expected [4, 4, 2, 0, 0]"
my_list = [8, 16, 16, 8]
print "my_list before merge =", my_list
print "returned by merge =", merge2(my_list), "expected [8, 32, 8, 0]"
run_test()