ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pygame小游戏开发 - 贪吃蛇

2021-12-25 20:30:34  阅读:58  来源: 互联网

标签:food SCREEN WIDTH 小游戏 pygame 贪吃蛇 SCOPE SIZE


版权声明:原创不易,本文禁止抄袭、转载,侵权必究!

目录

一、开发环境&需求分析

开发环境 :Windows10 Python3.6.4
第三方库 :Pygame1.9.6
IDE :PyCharm/Sublime Text

需求分析:

  • UI界面
  • 速度、游戏得分
  • 游戏逻辑
  • 蛇的方向、食物
  • 网格线、背景色

二、功能模块

第三方库的导入:

import random
import sys
import time
import pygame
from pygame.locals import *
from collections import deque

游戏初始化及全局变量定义:

SCREEN_WIDTH = 600      # 屏幕宽度
SCREEN_HEIGHT = 480     # 屏幕高度
SIZE = 20               # 小方格大小
LINE_WIDTH = 1          # 网格线宽度

# 游戏区域的坐标范围
SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)

# 食物的分值及颜色
FOOD_STYLE_LIST = [(10, (255, 100, 100)), (20, (100, 255, 100)), (30, (100, 100, 255))]

LIGHT = (100, 100, 100)
DARK = (200, 200, 200)      # 蛇的颜色
BLACK = (0, 0, 0)           # 网格线颜色
RED = (200, 30, 30)         # 红色,GAME OVER 的字体颜色
BGCOLOR = (40, 40, 60)      # 背景色

初始化蛇:

# 初始化蛇
def init_snake():
    snake = deque()
    snake.append((2, SCOPE_Y[0]))
    snake.append((1, SCOPE_Y[0]))
    snake.append((0, SCOPE_Y[0]))
    return snake

食物创建:

def create_food(snake):
    food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
    food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
    while (food_x, food_y) in snake:
        # 如果食物出现在蛇身上,则重来
        food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
        food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
    return food_x, food_y

背景色:

# 填充背景色
screen.fill(BGCOLOR)

网格线:

# 画网格线 竖线
for x in range(SIZE, SCREEN_WIDTH, SIZE):
    pygame.draw.line(screen, BLACK, (x, SCOPE_Y[0] * SIZE), (x, SCREEN_HEIGHT), LINE_WIDTH)

# 画网格线 横线
for y in range(SCOPE_Y[0] * SIZE, SCREEN_HEIGHT, SIZE):
    pygame.draw.line(screen, BLACK, (0, y), (SCREEN_WIDTH, y), LINE_WIDTH)

游戏精灵绘制:

# 画食物
if not game_over:
    # 避免 GAME OVER 的时候把 GAME OVER 的字给遮住了
    pygame.draw.rect(screen, food_style[1], (food[0] * SIZE, food[1] * SIZE, SIZE, SIZE), 0)

# 画蛇
for s in snake:
    pygame.draw.rect(screen, DARK, (s[0] * SIZE + LINE_WIDTH, s[1] * SIZE + LINE_WIDTH,
                                    SIZE - LINE_WIDTH * 2, SIZE - LINE_WIDTH * 2), 0)

print_text(screen, font1, 30, 7, f'速度: {score//100}')
print_text(screen, font1, 450, 7, f'得分: {score}')

主程序运行:

def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('贪吃蛇')

    font1 = pygame.font.SysFont('SimHei', 24)  # 得分的字体
    font2 = pygame.font.Font(None, 72)  # GAME OVER 的字体
    fwidth, fheight = font2.size('GAME OVER')



三、游戏效果

在这里插入图片描述

四、完整源码下载

pygame游戏开发源码下载:

  • 关注我的原创微信公众号:『小鸿星空科技』,回复『贪吃蛇』获取源码

五、作者Info

作者:小鸿的摸鱼日常,Goal:让编程更有趣!

原创微信公众号:『小鸿星空科技』,专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

标签:food,SCREEN,WIDTH,小游戏,pygame,贪吃蛇,SCOPE,SIZE
来源: https://blog.csdn.net/qq_44000141/article/details/122148019

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有