Python贪吃蛇游戏实例代码:直接复制使用指南

简单的Python贪吃蛇游戏示例代码

以下是一个简单的Python贪吃蛇游戏示例代码,使用了pygame库来实现图形界面和交互,在运行代码前请确保已经安装了pygame库(可以通过pip install pygame命令进行安装)

import pygame
import random

# 初始化pygame
pygame.init()

# 游戏窗口大小
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("贪吃蛇游戏")

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)

# 蛇的相关参数
snake_block_size = 10
snake_speed = 15
snake_list = []
snake_length = 1
# 初始蛇头位置
x1, y1 = width / 2, height / 2
x1_change, y1_change = 0, 0

# 食物的位置
while True:
    foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
    foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
    if [foodx, foody] not in snake_list:
        break

# 游戏结束标志
game_over = False

# 积分
score = 0

# 游戏主循环
clock = pygame.time.Clock()
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        # 控制蛇的移动方向
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block_size
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block_size
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block_size
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = snake_block_size
                x1_change = 0

    # 先检查是否撞墙或者撞到自己
    if x1 + x1_change >= width or x1 + x1_change < 0 or y1 + y1_change >= height or y1 + y1_change < 0 or [x1 + x1_change, y1 + y1_change] in snake_list[1:]:
        game_over = True
    else:
        # 更新蛇头位置
        x1 += x1_change
        y1 += y1_change
        snake_head = []
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)
        if len(snake_list) > snake_length:
            del snake_list[0]

    # 判断蛇是否吃到食物
    if x1 == foodx and y1 == foody:
        score += 1
        while True:
            foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
            foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
            if [foodx, foody] not in snake_list:
                break
        snake_length += 1

    # 绘制背景
    screen.fill(black)
    # 绘制食物
    pygame.draw.rect(screen, green, [foodx, foody, snake_block_size, snake_block_size])
    # 绘制蛇
    for segment in snake_list:
        pygame.draw.rect(screen, white, [segment[0], segment[1], snake_block_size, snake_block_size])

    # 在窗口左上角显示积分
    font_style = pygame.font.SysFont(None, 30)
    score_text = font_style.render("积分: " + str(score), True, white)
    screen.blit(score_text, (10, 10))

    pygame.display.update()

    # 设置游戏帧率
    clock.tick(snake_speed)

# 游戏结束,显示最终得分
font_style = pygame.font.SysFont(None, 50)
score_text = font_style.render("最终得分: " + str(score), True, white)
screen.blit(score_text, [width / 2 - 100, height / 2])
pygame.display.update()
pygame.time.delay(2000)

# 退出游戏
pygame.quit()
quit()

这个代码实现了一个基本的贪吃蛇游戏逻辑,具体功能如下:

游戏基本功能

  1. 界面展示:通过pygame创建了一个固定大小的游戏窗口,设置了窗口标题,定义了黑、白、红、绿几种颜色,用于后续绘制游戏中的不同元素,如蛇身、食物、背景等
  2. 蛇的控制:蛇初始在屏幕中间位置,玩家可以通过键盘上的方向键(上、下、左、右)来控制蛇的移动方向,蛇每次移动一个固定的方块大小(由snake_block_size定义)
  3. 食物生成:食物会随机出现在游戏窗口内的某个坐标位置(坐标是snake_block_size的整数倍,保证位置规整),以绿色方块表示
  4. 游戏规则判定
  5. 吃到食物:当蛇头碰到食物时,蛇的长度会增加一节,同时食物会重新在新的随机位置生成
  6. 游戏结束:如果蛇头撞到游戏窗口的边界(墙壁)或者蛇头碰到了蛇身自身,游戏就会结束

代码结构

  1. 初始化部分
  2. 首先调用pygame.init()pygame库进行初始化
  3. 然后定义了游戏窗口的大小、设置了窗口标题,并定义了后续要用到的几种颜色。接着初始化了蛇的一些参数,如蛇身方块大小、初始移动速度、初始位置、初始长度等,以及食物的初始位置,同时将游戏结束标志设置为False
  4. 主循环部分
  5. 通过while not game_over循环不断处理游戏中的各种事件和逻辑更新,比如获取用户的键盘输入事件来控制蛇的移动方向,不断更新蛇头的位置,判断蛇是否吃到食物、是否撞墙或者撞到自己等情况,并根据不同情况做出相应处理(如更新蛇身长度、结束游戏等)
  6. 在每次循环中,还会进行界面的绘制,包括填充背景颜色、绘制食物和蛇身等元素,最后通过pygame.display.update()来更新显示画面,并且使用clock.tick(snake_speed)来控制游戏的帧率,保证游戏以合适的速度运行
  7. 结束部分:当游戏结束循环结束后,调用pygame.quit()来关闭pygame库的相关资源,并使用quit()退出程序

这只是一个简单的示例,你可以进一步扩展和优化它,比如添加计分功能、游戏难度调节、音效等,使其更加完善和有趣

作者:常家壮

物联沃分享整理
物联沃-IOTWORD物联网 » Python贪吃蛇游戏实例代码:直接复制使用指南

发表回复