python小游戏推箱子代码
时间: 2023-07-22 07:43:03 浏览: 101
以下是基于Python的推箱子小游戏代码:
```python
import copy
# 地图
map = [
[1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1]
]
# 人的初始位置
man = [1, 1]
# 箱子的初始位置
boxes = [[3, 3], [4, 3], [5, 3]]
# 终点的位置
dests = [[3, 4], [4, 4], [5, 4]]
# 按键处理函数
def handle_input(key):
global man, boxes
new_man = copy.copy(man)
new_boxes = copy.copy(boxes)
if key == 'w':
new_man[0] -= 1
elif key == 's':
new_man[0] += 1
elif key == 'a':
new_man[1] -= 1
elif key == 'd':
new_man[1] += 1
else:
return
# 判断人是否能够移动
if map[new_man[0]][new_man[1]] == 0:
for box in new_boxes:
if box == new_man:
# 判断箱子是否能够移动
new_box = copy.copy(box)
if key == 'w':
new_box[0] -= 1
elif key == 's':
new_box[0] += 1
elif key == 'a':
new_box[1] -= 1
elif key == 'd':
new_box[1] += 1
if map[new_box[0]][new_box[1]] == 0 and new_box not in new_boxes:
box[0], box[1] = new_box[0], new_box[1]
man[0], man[1] = new_man[0], new_man[1]
break
else:
return
else:
man[0], man[1] = new_man[0], new_man[1]
else:
return
# 判断箱子是否到达终点
for i, box in enumerate(new_boxes):
if box in dests:
dests.remove(box)
new_boxes[i] = None
boxes = [box for box in new_boxes if box is not None]
# 渲染函数
def render():
for i in range(len(map)):
for j in range(len(map[i])):
if [i, j] in boxes:
print('B', end='')
elif [i, j] == man:
print('M', end='')
elif [i, j] in dests:
print('D', end='')
elif map[i][j] == 1:
print('#', end='')
else:
print(' ', end='')
print()
# 主循环
while True:
render()
key = input()
handle_input(key)
if not dests:
print('Congratulations!')
break
```
在这个小游戏中,我们使用了一个二维数组来表示地图,1表示障碍物,0表示空地,人和箱子的位置以列表形式表示。我们使用了一个handle_input函数来处理按键,使用了一个render函数来渲染游戏界面。每次按下一个按键之后,我们首先判断人是否能够移动到新位置,然后再判断箱子是否能够移动到新位置,最后更新人和箱子的位置。如果所有箱子都到达了终点,游戏就结束。
阅读全文