Python Curses游戏优化:解决Windows运行问题
import curses
import time
def create_map():
# 创建一个空的地图矩阵
map = [[' ' for _ in range(50)] for _ in range(50)]
return map
def draw_map(map, turtle_pos, dog1_pos, dog2_pos):
for row in range(50):
for col in range(50):
if (row, col) == turtle_pos:
map[row][col] = '乌'
elif (row, col) == dog1_pos or (row, col) == dog2_pos:
map[row][col] = '狗'
print(map[row][col], end='')
print()
def move_turtle(turtle_pos, direction):
# 计算乌龟的新位置
new_row, new_col = turtle_pos
if direction == curses.KEY_UP:
new_row -= 1
elif direction == curses.KEY_DOWN:
new_row += 1
elif direction == curses.KEY_LEFT:
new_col -= 1
elif direction == curses.KEY_RIGHT:
new_col += 1
return new_row, new_col
def main(stdscr):
# 初始化 curses
curses.curs_set(0)
stdscr.nodelay(1)
stdscr.timeout(100)
# 初始化地图和乌龟狗的位置
turtle_pos = (25, 25)
dog1_pos = (10, 10)
dog2_pos = (20, 30)
map = create_map()
while True:
stdscr.clear()
draw_map(map, turtle_pos, dog1_pos, dog2_pos)
stdscr.addstr(50, 0, '请使用方向键控制乌龟移动,按 Q 退出')
key = stdscr.getch()
if key == ord('q') or key == ord('Q'):
break
elif key in {curses.KEY_UP, curses.KEY_DOWN, curses.KEY_LEFT, curses.KEY_RIGHT}:
new_turtle_pos = move_turtle(turtle_pos, key)
if new_turtle_pos[0] < 0 or new_turtle_pos[0] >= 50 or new_turtle_pos[1] < 0 or new_turtle_pos[1] >= 50:
stdscr.addstr(51, 0, '乌龟撞墙了,游戏结束!')
stdscr.refresh()
break
if new_turtle_pos == dog1_pos or new_turtle_pos == dog2_pos:
stdscr.addstr(51, 0, '乌龟被狗抓住了,游戏结束!')
stdscr.refresh()
break
turtle_pos = new_turtle_pos
stdscr.refresh()
time.sleep(3) # 优化:在游戏结束后增加3秒的延迟时间
curses.endwin() # 优化:在游戏结束后调用curses.endwin()以恢复终端设置
# 运行主程序
curses.wrapper(main)
代码优化说明:
- 添加
time.sleep(): 在游戏结束后,添加time.sleep(3)可以暂停 3 秒,以便玩家看到游戏结束信息。 - 调用
curses.endwin(): 在游戏结束后,调用curses.endwin()函数可以重置终端设置,使其恢复到正常状态。
Windows 兼容性:
在 Windows 上运行 curses 程序需要安装 windows-curses 库。可以使用 pip 安装:
pip install windows-curses
总结:
通过添加 time.sleep() 和 curses.endwin(),并确保在 Windows 上安装了 windows-curses 库,可以优化代码并在 Windows 系统上成功运行该 Python Curses 游戏。
原文地址: https://www.cveoy.top/t/topic/CKZ 著作权归作者所有。请勿转载和采集!