Update Gradio app.py
Browse files- Gradio app.py +90 -0
Gradio app.py
CHANGED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import numpy as np
|
3 |
+
|
4 |
+
# 初始化游戏板
|
5 |
+
def initialize_board():
|
6 |
+
board = np.zeros((4, 4), dtype=int)
|
7 |
+
add_new_tile(board)
|
8 |
+
add_new_tile(board)
|
9 |
+
return board
|
10 |
+
|
11 |
+
# 添加新的数字块
|
12 |
+
def add_new_tile(board):
|
13 |
+
zeros = list(zip(*np.where(board == 0)))
|
14 |
+
if zeros:
|
15 |
+
x, y = zeros[np.random.choice(len(zeros))]
|
16 |
+
board[x, y] = np.random.choice([2, 4], p=[0.9, 0.1])
|
17 |
+
|
18 |
+
# 移动数字块
|
19 |
+
def move(board, direction):
|
20 |
+
if direction == 'left':
|
21 |
+
board = np.rot90(board, 1)
|
22 |
+
board = move_left(board)
|
23 |
+
board = np.rot90(board, -1)
|
24 |
+
elif direction == 'right':
|
25 |
+
board = np.rot90(board, -1)
|
26 |
+
board = move_left(board)
|
27 |
+
board = np.rot90(board, 1)
|
28 |
+
elif direction == 'up':
|
29 |
+
board = move_left(board)
|
30 |
+
elif direction == 'down':
|
31 |
+
board = np.rot90(board, 2)
|
32 |
+
board = move_left(board)
|
33 |
+
board = np.rot90(board, 2)
|
34 |
+
return board
|
35 |
+
|
36 |
+
# 向左移动数字块
|
37 |
+
def move_left(board):
|
38 |
+
new_board = np.zeros((4, 4), dtype=int)
|
39 |
+
for i in range(4):
|
40 |
+
row = board[i, :]
|
41 |
+
row = row[row != 0]
|
42 |
+
row = merge(row)
|
43 |
+
new_board[i, :len(row)] = row
|
44 |
+
return new_board
|
45 |
+
|
46 |
+
# 合并相同的数字块
|
47 |
+
def merge(row):
|
48 |
+
for i in range(len(row) - 1):
|
49 |
+
if row[i] == row[i + 1]:
|
50 |
+
row[i] *= 2
|
51 |
+
row[i + 1] = 0
|
52 |
+
row = row[row != 0]
|
53 |
+
return row
|
54 |
+
|
55 |
+
# 游戏主循环
|
56 |
+
def game_loop(board, direction):
|
57 |
+
if direction:
|
58 |
+
board = move(board, direction)
|
59 |
+
add_new_tile(board)
|
60 |
+
return board
|
61 |
+
|
62 |
+
# 初始化游戏板
|
63 |
+
board = initialize_board()
|
64 |
+
|
65 |
+
# 创建Gradio界面
|
66 |
+
def update_board(direction):
|
67 |
+
global board
|
68 |
+
board = game_loop(board, direction)
|
69 |
+
return board
|
70 |
+
|
71 |
+
with gr.Blocks() as demo:
|
72 |
+
gr.Markdown("# 2048 Game")
|
73 |
+
with gr.Row():
|
74 |
+
with gr.Column(scale=1):
|
75 |
+
gr.Markdown("## Controls")
|
76 |
+
up_button = gr.Button("Up")
|
77 |
+
down_button = gr.Button("Down")
|
78 |
+
left_button = gr.Button("Left")
|
79 |
+
right_button = gr.Button("Right")
|
80 |
+
with gr.Column(scale=2):
|
81 |
+
gr.Markdown("## Game Board")
|
82 |
+
board_display = gr.Dataframe(board, headers=["", "", "", ""], datatype=["number", "number", "number", "number"])
|
83 |
+
|
84 |
+
up_button.click(update_board, "up", board_display)
|
85 |
+
down_button.click(update_board, "down", board_display)
|
86 |
+
left_button.click(update_board, "left", board_display)
|
87 |
+
right_button.click(update_board, "right", board_display)
|
88 |
+
|
89 |
+
de
|
90 |
+
mo.launch()
|