简易版贪吃蛇小游戏

什么是pygame

Pygame是一个用于开发2D游戏的Python库。它提供了一系列功能丰富的模块,用于处理图形、声音、输入设备和游戏逻辑等方面,使开发者能够快速地创建和部署游戏。

具体来说,Pygame可以帮助开发者完成以下任务:

  1. 图形渲染:Pygame提供了强大的图形绘制功能,可以绘制各种形状、颜色和纹理。开发者可以使用它创建游戏角色、场景背景和特效等。

  2. 音效和音乐:Pygame支持在游戏中播放音效和音乐。开发者可以加载和控制声音文件,为游戏增添音乐、音效和声音效果。

  3. 键盘和鼠标输入:Pygame可以检测和响应键盘和鼠标事件,以实现游戏的交互。开发者可以监听并处理用户的输入,实现角色移动、射击和互动等功能。

  4. 物理引擎:Pygame提供了简单的物理引擎功能,可以模拟游戏中的重力、碰撞和摩擦等物理效果。通过使用物理引擎,开发者可以实现更真实和有趣的游戏体验。

  5. 游戏逻辑和状态管理:Pygame提供了用于管理游戏逻辑和状态的工具和函数。开发者可以使用它们来处理游戏逻辑、更新游戏状态、切换游戏关卡和场景等。

总的来说,Pygame提供了一套完整的工具和函数,帮助开发者轻松创建2D游戏。它简化了游戏开发的过程,使开发者能够专注于游戏的创意和设计,而不必过多关注底层技术和复杂的实现细节。

游戏代码

该游戏需要使用三个包,分别为pygame,sys和random

初始化pygame

pygame.init()
设置屏幕大小
screen_width = 640
screen_height = 480
screen = pygame.display.set_mode((screen_width, screen_height))
设置游戏标题
pygame.display.set_caption("贪吃蛇")
定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
定义蛇和食物的大小
snake_size = 20
food_size = 20
定义初始位置
# 定义蛇的初始位置
snake_pos = [[100, 100], [80, 100], [60, 100]]

# 定义食物的初始位置
food_pos = [300, 300]

# 定义蛇的移动方向
move_direction = "RIGHT"

设置游戏循环

# 游戏主循环
while True:
    # 处理游戏事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and move_direction != "DOWN":
                move_direction = "UP"
            elif event.key == pygame.K_DOWN and move_direction != "UP":
                move_direction = "DOWN"
            elif event.key == pygame.K_LEFT and move_direction != "RIGHT":
                move_direction = "LEFT"
            elif event.key == pygame.K_RIGHT and move_direction != "LEFT":
                move_direction = "RIGHT"

    # 更新蛇的位置
    if move_direction == "UP":
        new_pos = [snake_pos[0][0], snake_pos[0][1] - snake_size]
    elif move_direction == "DOWN":
        new_pos = [snake_pos[0][0], snake_pos[0][1] + snake_size]
    elif move_direction == "LEFT":
        new_pos = [snake_pos[0][0] - snake_size, snake_pos[0][1]]
    elif move_direction == "RIGHT":
        new_pos = [snake_pos[0][0] + snake_size, snake_pos[0][1]]

    snake_pos.insert(0, new_pos)
    if snake_pos[0] == food_pos:
        food_pos = [random.randrange(1, screen_width // food_size) * food_size,
                    random.randrange(1, screen_height // food_size) * food_size]
    else:
        snake_pos.pop()

    # 检查蛇是否撞到墙或自己
    if (snake_pos[0][0] < 0 or snake_pos[0][0] >= screen_width or
            snake_pos[0][1] < 0 or snake_pos[0][1] >= screen_height or
            snake_pos[0] in snake_pos[1:]):
        pygame.quit()
        sys.exit()

    # 绘制蛇和食物
    screen.fill(WHITE)
    for pos in snake_pos:
        pygame.draw.rect(screen, GREEN, (pos[0], pos[1], snake_size, snake_size))
    pygame.draw.rect(screen, RED, (food_pos[0], food_pos[1], food_size, food_size))

    # 更新屏幕
    pygame.display.flip()

    # 控制游戏速度
    pygame.time.Clock().tick(10)

完整代码

import pygame
import sys
import random

# 初始化pygame
pygame.init()

# 设置屏幕大小
screen_width = 640
screen_height = 480
screen = pygame.display.set_mode((screen_width, screen_height))

# 设置游戏标题
pygame.display.set_caption("贪吃蛇")

# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 定义蛇和食物的大小
snake_size = 20
food_size = 20

# 定义蛇的初始位置
snake_pos = [[100, 100], [80, 100], [60, 100]]

# 定义食物的初始位置
food_pos = [300, 300]

# 定义蛇的移动方向
move_direction = "RIGHT"

# 游戏主循环
while True:
    # 处理游戏事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and move_direction != "DOWN":
                move_direction = "UP"
            elif event.key == pygame.K_DOWN and move_direction != "UP":
                move_direction = "DOWN"
            elif event.key == pygame.K_LEFT and move_direction != "RIGHT":
                move_direction = "LEFT"
            elif event.key == pygame.K_RIGHT and move_direction != "LEFT":
                move_direction = "RIGHT"

    # 更新蛇的位置
    if move_direction == "UP":
        new_pos = [snake_pos[0][0], snake_pos[0][1] - snake_size]
    elif move_direction == "DOWN":
        new_pos = [snake_pos[0][0], snake_pos[0][1] + snake_size]
    elif move_direction == "LEFT":
        new_pos = [snake_pos[0][0] - snake_size, snake_pos[0][1]]
    elif move_direction == "RIGHT":
        new_pos = [snake_pos[0][0] + snake_size, snake_pos[0][1]]

    snake_pos.insert(0, new_pos)
    if snake_pos[0] == food_pos:
        food_pos = [random.randrange(1, screen_width // food_size) * food_size,
                    random.randrange(1, screen_height // food_size) * food_size]
    else:
        snake_pos.pop()

    # 检查蛇是否撞到墙或自己
    if (snake_pos[0][0] < 0 or snake_pos[0][0] >= screen_width or
            snake_pos[0][1] < 0 or snake_pos[0][1] >= screen_height or
            snake_pos[0] in snake_pos[1:]):
        pygame.quit()
        sys.exit()

    # 绘制蛇和食物
    screen.fill(WHITE)
    for pos in snake_pos:
        pygame.draw.rect(screen, GREEN, (pos[0], pos[1], snake_size, snake_size))
    pygame.draw.rect(screen, RED, (food_pos[0], food_pos[1], food_size, food_size))

    # 更新屏幕
    pygame.display.flip()

    # 控制游戏速度
    pygame.time.Clock().tick(10)

游戏运行结果

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值