写出2048游戏的Python代码
时间: 2023-08-31 12:33:57 浏览: 58
### 回答1:
2048 游戏是一款由 Gabriele Cirulli 创建的经典游戏,它的目标是通过滑动网格中的数字方块,使得相同数字的方块在合并时相加,最终达到 2046 或更高的分数。
下面是一个使用 Python 实现 2048 游戏的示例代码:
```
class Game:
def __init__(self, rows, cols):
self.rows = rows
self.cols = cols
self.grid = [[0 for _ in range(cols)] for _ in range(rows)]
self.add_random_tile()
self.add_random_tile()
def add_random_tile(self):
empty_cells = [(i, j) for i in range(self.rows) for j in range(self.cols) if self.grid[i][j] == 0]
if not empty_cells:
return False
i, j = empty_cells[randint(0, len(empty_cells) - 1)]
self.grid[i][j] = 2 if randint(0, 1) else 4
return True
def transpose(self):
self.grid = [[self.grid[j][i] for j in range(self.rows)] for i in range(self.cols)]
def flip(self):
self.grid = [self.grid[i][::-1] for i in range(self.rows)]
def move_left(self):
moved = False
for i in range(self.rows):
row = self.merge_left(self.grid[i])
moved = moved or (row != self.grid[i])
self.grid[i] = row
return moved
def move_right(self):
self.flip()
moved = self.move_left()
self.flip()
return moved
def move_up(self):
self.transpose()
moved = self.move_left()
self.transpose()
return moved
def move_down(self):
self.transpose()
moved = self.move_right()
self.transpose()
return moved
def merge_left(self, row):
merged = [0 for _ in range(self.cols)]
i = 0
for j in range(self.cols):
if row[j] == 0:
continue
if i > 0 and merged[i - 1] == row[j]:
merged[i - 1] *= 2
else:
merged[i] = row[j]
i += 1
return merged
def game_over(self):
if any(self.move_left()) or any(self.move_up()):
### 回答2:
2048游戏是一款数字拼图游戏,目标是将相同数字的方块合并在一起,直到获得2048这个数字方块。下面是一个简单的Python代码示例实现:
```python
import random
# 初始化游戏棋盘
def init_board():
board = [[0 for _ in range(4)] for _ in range(4)]
add_random_num(board)
return board
# 在游戏棋盘的随机空格子中添加一个2或4
def add_random_num(board):
empty_cells = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
if empty_cells:
cell = random.choice(empty_cells)
board[cell[0]][cell[1]] = random.choice([2, 4])
# 打印游戏棋盘
def print_board(board):
for row in board:
print(' '.join(str(num) for num in row))
print()
# 检查游戏是否结束
def is_game_over(board):
for row in board:
if 2048 in row:
return True
for i in range(4):
for j in range(3):
if board[i][j] == board[i][j+1] or board[j][i] == board[j+1][i]:
return False
return True
# 合并相同数字的方块
def merge_tiles(line):
merged = [False] * len(line)
for i in range(len(line) - 1):
if line[i] == line[i + 1] and not merged[i]:
line[i] *= 2
line[i + 1] = 0
merged[i] = True
return [tile for tile in line if tile != 0]
# 移动方向
def move(board, direction):
if direction == 'left':
for i in range(4):
board[i] = merge_tiles(board[i])
elif direction == 'right':
for i in range(4):
board[i] = list(reversed(merge_tiles(list(reversed(board[i])))))
elif direction == 'up':
for i in range(4):
col = [board[j][i] for j in range(4)]
new_col = merge_tiles(col)
for j in range(4):
board[j][i] = new_col[j]
elif direction == 'down':
for i in range(4):
col = [board[j][i] for j in range(4)]
new_col = list(reversed(merge_tiles(list(reversed(col)))))
for j in range(4):
board[j][i] = new_col[j]
# 游戏主循环
def game_loop():
board = init_board()
while True:
print_board(board)
if is_game_over(board):
print("Game Over")
break
direction = input("Enter direction (left, right, up, down): ").lower()
move(board, direction)
add_random_num(board)
# 启动游戏
game_loop()
```
该代码使用二维列表来表示游戏棋盘,初始化棋盘、打印棋盘、检查游戏是否结束、合并方块和移动方块的功能函数实现了游戏的基本逻辑。游戏循环中,用户根据提示输入方向来移动方块,并在每次移动后随机在空格子中添加一个新的数字方块。游戏循环直到游戏结束。
### 回答3:
2048游戏是一款益智类的数字合并游戏,下面是一个简单的Python代码实现:
```
import random
def initialize_grid(n):
grid = []
for i in range(n):
row = [0] * n
grid.append(row)
return grid
def generate_new_number(grid):
n = len(grid)
empty_cells = [(i, j) for i in range(n) for j in range(n) if grid[i][j] == 0]
if empty_cells:
x, y = random.choice(empty_cells)
grid[x][y] = random.choice([2, 4])
def print_grid(grid):
for row in grid:
for num in row:
print(num, end='\t')
print()
def move_left(grid):
n = len(grid)
for row in range(n):
# 合并相邻的相同数字,并移动到最左侧
for col in range(n - 1):
if grid[row][col] == grid[row][col + 1]:
grid[row][col] *= 2
grid[row][col + 1] = 0
# 移动非零数字到最左侧
for col in range(n - 1):
if grid[row][col] == 0:
grid[row][col], grid[row][col + 1] = grid[row][col + 1], grid[row][col]
def game_over(grid):
n = len(grid)
for row in range(n):
for col in range(n):
if grid[row][col] == 0:
return False
if col < n - 1 and grid[row][col] == grid[row][col + 1]:
return False
if row < n - 1 and grid[row][col] == grid[row + 1][col]:
return False
return True
def play_2048():
n = 4
grid = initialize_grid(n)
print("欢迎来到2048游戏!")
while True:
generate_new_number(grid)
print_grid(grid)
if game_over(grid):
print("游戏结束!")
break
move = input("请输入移动方向(上:w,下:s,左:a,右:d):")
if move == 'a':
move_left(grid)
# 其他移动方向的实现类似,此处省略
elif move == 'q':
print("退出游戏!")
break
play_2048()
```
以上代码实现了一个简单的2048游戏,其中包括了初始化网格、生成新数字、打印网格、向左移动、游戏结束判断等功能。可以通过输入移动方向来进行游戏,输入q可退出游戏。