Skip to content

Commit 6126723

Browse files
authored
🐍
1 parent ff99ff3 commit 6126723

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

2048 Game.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import tkinter as tk
2+
import random
3+
4+
class Game2048:
5+
def __init__(self, master):
6+
self.master = master
7+
self.master.title("2048")
8+
self.master.geometry("400x400")
9+
self.master.bind("<Key>", self.handle_key)
10+
11+
self.grid_size = 4
12+
self.grid = [[0] * self.grid_size for _ in range(self.grid_size)]
13+
self.score = 0
14+
15+
self.init_grid()
16+
self.add_tile()
17+
self.update_grid()
18+
19+
def init_grid(self):
20+
self.tiles = []
21+
for i in range(self.grid_size):
22+
row = []
23+
for j in range(self.grid_size):
24+
tile = tk.Label(self.master, text="", font=("Helvetica", 32), width=4, height=2, relief="raised")
25+
tile.grid(row=i, column=j, padx=5, pady=5)
26+
row.append(tile)
27+
self.tiles.append(row)
28+
29+
def add_tile(self):
30+
empty_cells = [(i, j) for i in range(self.grid_size) for j in range(self.grid_size) if self.grid[i][j] == 0]
31+
if empty_cells:
32+
i, j = random.choice(empty_cells)
33+
self.grid[i][j] = 2 if random.random() < 0.9 else 4
34+
35+
def update_grid(self):
36+
for i in range(self.grid_size):
37+
for j in range(self.grid_size):
38+
value = self.grid[i][j]
39+
if value == 0:
40+
self.tiles[i][j].configure(text="", bg="lightgray")
41+
else:
42+
self.tiles[i][j].configure(text=str(value), bg="lightblue")
43+
self.master.update_idletasks()
44+
45+
def handle_key(self, event):
46+
if event.keysym in ['Up', 'Down', 'Left', 'Right']:
47+
self.move_tiles(event.keysym)
48+
self.add_tile()
49+
self.update_grid()
50+
if self.check_game_over():
51+
print("Game Over! Score:", self.score)
52+
53+
def move_tiles(self, direction):
54+
if direction == 'Up':
55+
self.grid = self.transpose(self.grid)
56+
self.grid = self.merge_tiles(self.grid)
57+
self.grid = self.transpose(self.grid)
58+
elif direction == 'Down':
59+
self.grid = self.reverse(self.transpose(self.grid))
60+
self.grid = self.merge_tiles(self.grid)
61+
self.grid = self.transpose(self.reverse(self.grid))
62+
elif direction == 'Left':
63+
self.grid = self.merge_tiles(self.grid)
64+
elif direction == 'Right':
65+
self.grid = self.reverse(self.grid)
66+
self.grid = self.merge_tiles(self.grid)
67+
self.grid = self.reverse(self.grid)
68+
69+
def merge_tiles(self, grid):
70+
score = 0
71+
for i in range(self.grid_size):
72+
j = 0
73+
while j < self.grid_size - 1:
74+
if grid[i][j] == grid[i][j+1] and grid[i][j] != 0:
75+
grid[i][j] *= 2
76+
score += grid[i][j]
77+
grid[i][j+1] = 0
78+
j += 2
79+
else:
80+
j += 1
81+
self.score += score
82+
return grid
83+
84+
def check_game_over(self):
85+
for i in range(self.grid_size):
86+
for j in range(self.grid_size):
87+
if self.grid[i][j] == 0:
88+
return False
89+
if j < self.grid_size - 1 and self.grid[i][j] == self.grid[i][j+1]:
90+
return False
91+
if i < self.grid_size - 1 and self.grid[i][j] == self.grid[i+1][j]:
92+
return False
93+
return True
94+
95+
@staticmethod
96+
def transpose(matrix):
97+
return [[row[i] for row in matrix] for i in range(len(matrix[0]))]
98+
99+
@staticmethod
100+
def reverse(matrix):
101+
return [row[::-1] for row in matrix]
102+
103+
def main():
104+
root = tk.Tk()
105+
game = Game2048(root)
106+
root.mainloop()
107+
108+
if __name__ == "__main__":
109+
main()

0 commit comments

Comments
 (0)