一分钟不到覆写完的代码
当然可以!以下是2048小游戏的Python代码,希望对你有帮助:
```python
import random
import curses
# 初始化窗口
s = curses.initscr()
curses.curs_set(0)
sh, sw = s.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
w.keypad(1)
w.timeout(100)
# 初始化游戏状态
score = 0
game_over = False
# 初始化游戏板
board = [[0 for x in range(4)] for y in range(4)]
# 插入两个随机数字(2或4)
def insert_random():
i = random.randint(0, 3)
j = random.randint(0, 3)
while board[i][j] != 0:
i = random.randint(0, 3)
j = random.randint(0, 3)
board[i][j] = random.choice([2, 4])
# 初始化游戏板
insert_random()
insert_random()
# 绘制游戏板
def draw_board():
global game_over
for y in range(4):
for x in range(4):
w.addstr(y * 2, x * 4, str(board[y][x]).center(3))
if board[y][x] == 2048:
game_over = True
w.addstr(10, 0, f"Score: {score}")
# 移动游戏板
def move_up():
for x in range(4):
for y in range(1, 4):
if board[y][x] != 0:
i = y - 1
while i >= 0 and board[i][x] == 0:
i -= 1
if i >= 0 and board[i][x] == board[y][x]:
board[i][x] *= 2
board[y][x] = 0
global score
score += board[i][x]
elif i < 0:
board[0][x] = board[y][x]
board[y][x] = 0
elif i + 1 < y:
board[i + 1][x] = board[y][x]
board[y][x] = 0
def move_down():
for x in range(4):
for y in range(2, -1, -1):
if board[y][x] != 0:
i = y + 1
while i <= 3 and board[i][x] == 0:
i += 1
if i <= 3 and board[i][x] == board[y][x]:
board[i][x] *= 2
board[y][x] = 0
global score
score += board[i][x]
elif i > 3:
board[3][x] = board[y][x]
board[y][x] = 0
elif i - 1 > y:
board[i - 1][x] = board[y][x]
board[y][x] = 0
def move_left():
for y in range(4):
for x in range(1, 4):
if board[y][x] != 0:
i = x - 1
while i >= 0 and board[y][i] == 0:
i -= 1
if i >= 0 and board[y][i] == board[y][x]:
board[y][i] *= 2
board[y][x] = 0
global score
score += board[y][i]
elif i < 0:
board[y][0] = board[y][x]
board[y][x] = 0
elif i + 1 < x:
board[y][i + 1] = board[y][x]
board[y][x] = 0
def move_right():
for y in range(4):
for x in range(2, -1, -1):
if board[y][x] != 0:
i = x + 1
while i <= 3 and board[y][i] == 0:
i += 1
if i <= 3 and board[y][i] == board[y][x]:
board[y][i] *= 2
board[y][x] = 0
global score
score += board[y][i]
elif i > 3:
board[y][3] = board[y][x]
board[y][x] = 0
elif i - 1 > x:
board[y][i - 1] = board[y][x]
board[y][x] = 0
# 主循环
while True:
draw_board()
key = w.getch()
if key == curses.KEY_UP:
move_up()
elif key == curses.KEY_DOWN:
move_down()
elif key == curses.KEY_LEFT:
move_left()
elif key == curses.KEY_RIGHT:
move_right()
elif key == 27:
break
if not any(0 in row for row in board):
game_over = True
if game_over:
w.addstr(12, 0, "Game Over!")
w.getch()
break
insert_random()
curses.endwin()
print(f"Final Score: {score}")
```
以上是简单的2048小游戏实现。当用户按下键盘中的箭头,游戏板会移动相应的数字,并在必要时合并它们。如果没有可以移动的数字了,游戏就结束了。如果某个数字达到了2048,游戏也会结束。 |