贪吃蛇代码

yumo6662个月前 (03-09)技术文章98

以下是一个使用Python curses库实现的简单贪吃蛇游戏代码,包含详细注释:

```python

import curses

from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN

from random import randint

# 初始化curses

curses.initscr()

win = curses.newwin(20, 60, 0, 0) # 创建新窗口(高度20,宽度60)

win.keypad(1) # 启用键盘输入

curses.noecho() # 关闭输入回显

curses.curs_set(0) # 隐藏光标

win.nodelay(1) # 非阻塞输入模式

# 初始化颜色

curses.start_color()

curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK)

curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK)

# 游戏初始化

snake = [[4, 10], [4, 9], [4, 8]] # 初始蛇身位置

food = [10, 20] # 初始食物位置

score = 0 # 初始得分

win.addch(food[0], food[1], 'O', curses.color_pair(1)) # 绘制食物

key = KEY_RIGHT # 初始方向向右

# 游戏主循环

while True:

win.border(0) # 绘制边框

win.addstr(0, 2, 'Score: ' + str(score) + ' ') # 显示分数


# 获取输入(非阻塞)

event = win.getch()

key = key if event == -1 else event

# 计算新蛇头位置

head = [snake[0][0], snake[0][1]]

if key == KEY_DOWN:

head[0] += 1

elif key == KEY_UP:

head[0] -= 1

elif key == KEY_LEFT:

head[1] -= 1

elif key == KEY_RIGHT:

head[1] += 1

# 插入新蛇头

snake.insert(0, head)

# 碰撞检测

if (

head[0] == 0 or head[0] == 19 or # 撞墙检测

head[1] == 0 or head[1] == 59 or

head in snake[1:] # 自撞检测

):

break

# 吃食物检测

if head == food:

score += 1

# 生成新食物(不在蛇身上)

while food in snake:

food = [randint(1, 18), randint(1, 58)]

win.addch(food[0], food[1], 'O', curses.color_pair(1))

else:

# 移动蛇尾(没吃到食物时)

tail = snake.pop()

win.addch(tail[0], tail[1], ' ')

# 绘制蛇身

win.addch(snake[0][0], snake[0][1], '@', curses.color_pair(2))

for segment in snake[1:]:

win.addch(segment[0], segment[1], '#', curses.color_pair(2))

win.refresh()

curses.napms(150) # 控制游戏速度(毫秒)

# 游戏结束

curses.endwin()

print(f"游戏结束!最终得分:{score}")

```

运行说明:

1. 需要安装Python的curses库(Windows用户需先安装`windows-curses`包)

2. 使用方向键控制蛇的移动

3. 吃食物(O)可以增长身体并得分

4. 避免撞墙和自撞

安装依赖(Windows):

```bash

pip install windows-curses

```

游戏规则:

- 每次吃到食物得1分

- 蛇身会随着吃食物变长

- 撞墙或碰到自己身体游戏结束

- 游戏速度固定(150ms/帧)

这个实现包含了:

- 彩色界面显示

- 分数统计

- 碰撞检测

- 食物生成逻辑

- 基本的游戏循环结构

你可以通过调整以下参数自定义游戏:

- 修改`curses.newwin(20, 60, 0, 0)`改变窗口大小

- 调整`curses.napms(150)`改变游戏速度

- 修改初始蛇身位置`snake`和食物位置`food`

- 修改符号颜色(修改color_pair参数)