用Python做一个贪吃蛇小游戏

import pygame
import random

# 定义窗口尺寸
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600

# 定义方格尺寸
CELL_SIZE = 20

# 初始化pygame
pygame.init()

# 创建窗口
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

# 设置窗口标题
pygame.display.set_caption('Greedy Snake')

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

# 定义字体
font = pygame.font.SysFont(None, 30)

# 定义蛇的方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4

# 定义蛇的初始位置和长度
snake_x = [100, 80, 60]
snake_y = [100, 100, 100]
snake_direction = RIGHT

# 定义食物的位置
food_x = random.randint(0, (WINDOW_WIDTH - CELL_SIZE) // CELL_SIZE) * CELL_SIZE
food_y = random.randint(0, (WINDOW_HEIGHT - CELL_SIZE) // CELL_SIZE) * CELL_SIZE

# 定义分数
score = 0

# 游戏主循环
while True:
    # 处理游戏退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # 处理键盘事件
    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP] and snake_direction != DOWN:
        snake_direction = UP
    elif keys[pygame.K_DOWN] and snake_direction != UP:
        snake_direction = DOWN
    elif keys[pygame.K_LEFT] and snake_direction != RIGHT:
        snake_direction = LEFT
    elif keys[pygame.K_RIGHT] and snake_direction != LEFT:
        snake_direction = RIGHT

    # 移动蛇的位置
    if snake_direction == UP:
        snake_y.insert(0, snake_y[0] - CELL_SIZE)
        snake_x.insert(0, snake_x[0])
    elif snake_direction == DOWN:
        snake_y.insert(0, snake_y[0] + CELL_SIZE)
        snake_x.insert(0, snake_x[0])
    elif snake_direction == LEFT:
        snake_x.insert(0, snake_x[0] - CELL_SIZE)
        snake_y.insert(0, snake_y[0])
    elif snake_direction == RIGHT:
        snake_x.insert(0, snake_x[0] + CELL_SIZE)
        snake_y.insert(0, snake_y[0])

    # 判断蛇是否碰到边界
    if snake_x[0] < 0 or snake_x[0] >= WINDOW_WIDTH or snake_y[0] < 0 or snake_y[0] >= WINDOW_HEIGHT:
        pygame.quit()
        exit()

    # 判断蛇是否碰到自身
    if (snake_x[0], snake_y[0]) in zip(snake_x[1:], snake_y[1:]):
        pygame.quit()
        exit()

    # 判断蛇是否吃到食物
    if snake_x[0] == food_x and snake_y[0] == food_y:
        food_x = random.randint(0, (WINDOW_WIDTH - CELL_SIZE) // CELL_SIZE) * CELL_SIZE
        food_y = random.randint(0, (WINDOW_HEIGHT - CELL_SIZE) // CELL_SIZE) * CELL_SIZE
        score += 1
    else:
        snake_x.pop()
        snake_y.pop()

    # 绘制游戏界面
    screen.fill(WHITE)
    pygame.draw.rect(screen, GREEN, (food_x, food_y, CELL_SIZE, CELL_SIZE))
    for i in range(len(snake_x)):
        pygame.draw.rect(screen, BLACK, (snake_x[i], snake_y[i], CELL_SIZE, CELL_SIZE))
    score_text = font.render('Score: ' + str(score), True, RED)
    screen.blit(score_text, (10, 10))
    pygame.display.update()

    # 控制游戏帧率
    pygame.time.Clock().tick(10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值