python贪吃蛇代码及功能描述

Python 贪吃蛇游戏通常是一个控制台程序,玩家通过键盘上的方向键来控制蛇的移动方向,吃到食物可以让蛇变长,如果蛇头碰到了自己的身体或者碰到了墙壁,则游戏结束。下面是一个简单的 Python 贪吃蛇游戏的代码示例,其中包括了基本的游戏逻辑:

import random
import curses

# 初始化屏幕
s = curses.initscr()
curses.curs_set(0)

# 设置屏幕大小
sh, sw = s.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
w.keypad(1)
w.timeout(100)

# 初始化蛇和食物
snake_x = sw // 4
snake_y = sh // 2
snake = [
    [snake_y, snake_x],
    [snake_y, snake_x - 1],
    [snake_y, snake_x - 2]
]
food = [sh // 2, sw // 2]
w.addch(food[0], food[1], curses.ACS_PI)

# 初始化游戏分数
score = 0

# 设置移动方向
key = curses.KEY_RIGHT

# 游戏循环
while True:
    # 获取键盘输入
    next_key = w.getch()
    key = key if next_key == -1 else next_key

    # 计算蛇头的下一个位置
    snake_head = [snake[0][0], snake[0][1]]
    if key == curses.KEY_DOWN:
        snake_head[0] += 1
    if key == curses.KEY_UP:
        snake_head[0] -= 1
    if key == curses.KEY_LEFT:
        snake_head[1] -= 1
    if key == curses.KEY_RIGHT:
        snake_head[1] += 1

    # 更新蛇的位置
    snake.insert(0, snake_head)
    if snake[0] == food:
        # 如果蛇头碰到了食物,蛇变长,重新生成食物
        score += 1
        food = None
        while food is None:
            nf = [
                random.randint(1, sh - 1),
                random.randint(1, sw - 1)
            ]
            food = nf if nf not in snake else None
        w.addch(food[0], food[1], curses.ACS_PI)
    else:
        # 如果蛇没有碰到食物,删除蛇尾
        tail = snake.pop()
        w.addch(tail[0], tail[1], ' ')

    # 检查蛇头是否碰到了墙壁或者自己的身体
    if (
        snake_head[0] in [0, sh - 1] or
        snake_head[1] in [0, sw - 1] or
        snake_head in snake[1:]
    ):
        curses.endwin()
        print("Game over!")
        print(f"Score: {score}")
        break

    # 更新屏幕显示
    w.addch(snake[0][0], snake[0][1], curses.ACS_C
for i in range(1, len(snake)):
    w.addch(snake[i][0], snake[i][1], curses.ACS_BLOCK)
w.addch(snake[0][0], snake[0][1], curses.ACS_DIAMOND)

# 更新屏幕显示
w.refresh()
//关闭屏幕
curses.endwin()
这个示例代码使用了 Python 的 curses 库来实现控制台界面,同时通过不断更新屏幕上蛇的位置和食物的位置来模拟蛇的移动。在游戏循环中,首先获取玩家的键盘输入,然后根据输入更新蛇头的位置,并检查蛇是否吃到了食物或者碰到了墙壁或者自己的身体。如果蛇吃到了食物,则蛇变长,并在新的位置上生成新的食物。如果蛇碰到了墙壁或者自己的身体,则游戏结束,输出分数并退出游戏循环。最后,关闭屏幕并结束游戏。