用派森编写一个推箱子游戏代码
时间: 2023-08-26 08:03:34 浏览: 89
推箱子游戏代码
推箱子游戏是一种经典的益智游戏,可以用Python编写。以下是一个简单的推箱子游代码:
```python
# -*- coding: utf- -*-
"""
Created on Thu Sep 16 15::34 2021
@author:
"""
# 定义地图
map = [
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '# '#', '#', '#', '#', '#', '#'],
['#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', '#'],
['#', ' ', '#', ' ', '#', ' ', '#', '#', '#', ' ', '#', '#', ' ', '#', ' ', '#', ' ', '#'],
['#', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', ' ', '#'],
['#', ' ', '#', '#', '#', '#', '#', ' ', '#', '#', '#', '#', '#', '#', '#', '#', ' ', '#'],
['#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
['#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
['#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
['#', ' ', '#', '#', '#', '#', '#', ' ', '#', ' ', '#', '#', '#', '#', '#', '#', '#', '#'],
['#', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
['#', ' ', '#', ' ', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', ' ', '#'],
['#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', '#'],
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
]
# 定义箱子和目标的数量
box_num = 3
goal_num = 3
# 随机生成箱子和目标的位置
import random
boxes = []
while len(boxes) < box_num:
i = random.randint(1, len(map) - 2)
j = random.randint(1, len(map[0]) - 2)
if map[i][j] == ' ':
boxes.append((i, j))
map[i][j] = '$'
goals = []
while len(goals) < goal_num:
i = random.randint(1, len(map) - 2)
j = random.randint(1, len(map[0]) - 2)
if map[i][j] == ' ':
goals.append((i, j))
map[i][j] = '.'
# 定义玩家的位置
player = (1, 1)
# 游戏主循环
while True:
# 显示地图
for row in map:
print(''.join(row))
print('')
# 判断是否获胜
if all(box in goals for box in boxes):
print('You win!')
break
# 等待玩家输入移动方向
move = input('Move (w-up, a-left, s-down, d-right): ')
# 根据移动方向更新玩家位置
i, j = player
if move == 'w' and map[i - 1][j] != '#':
player = (i - 1, j)
elif move == 'a' and map[i][j - 1] != '#':
player = (i, j - 1)
elif move == 's' and map[i + 1][j] != '#':
player = (i + 1, j)
elif move == 'd' and map[i][j + 1] != '#':
player = (i, j + 1)
# 根据玩家位置更新箱子位置
for k, box in enumerate(boxes):
if box == player:
box_i, box_j = box
if move == 'w' and map[box_i - 1][box_j] != '#' and (box_i - 1, box_j) not in boxes:
boxes[k] = (box_i - 1, box_j)
elif move == 'a' and map[box_i][box_j - 1] != '#' and (box_i, box_j - 1) not in boxes:
boxes[k] = (box_i, box_j - 1)
elif move == 's' and map[box_i + 1][box_j] != '#' and (box_i + 1, box_j) not in boxes:
boxes[k] = (box_i + 1, box_j)
elif move == 'd' and map[box_i][box_j + 1] != '#' and (box_i, box_j + 1) not in boxes:
boxes[k] = (box_i, box_j + 1)
# 根据箱子位置更新地图
for i in range(len(map)):
for j in range(len(map[0])):
if map[i][j] == '$':
map[i][j] = ' '
elif map[i][j] == '.':
map[i][j] = ' '
elif (i, j) in boxes:
map[i][j] = '$'
elif (i, j) in goals:
map[i][j] = '.'
```
玩家可以使用 w、a、s 和 d 操作键来控制角色的移动,将箱子推到目标位置即可获胜。
阅读全文