贪吃蛇python代码分析

本文详细分析了使用Python和pygame库实现贪吃蛇游戏的关键知识点,包括pygame.time.Clock.tick()用于限制游戏帧率,pygame.font.Font()创建字体对象,pygame.locals引入常量,pygame.font.Font.render()绘制文本,pygame.transform.rotate()旋转图像,pygame.Surface.blit()绘制图像,pygame.event.get()处理事件,pygame.key键盘处理,pygame.display.update()更新显示,pygame.draw.line()和pygame.draw.rect()绘制图形,以及if name == 'main':确保主代码块的执行。这些知识点构成了贪吃蛇游戏的基础框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##知识点 分析
1,pygame.time.Clock.tick()
tick(framerate=0) -> milliseconds
作用:更新帧显示速率(即图像移动速度),限制游戏的运行速度,若clock.tick(40),则程序运行速度<=每秒40帧。一般放在图像更新函数update后

2,字体模块中的pygame.font.Font()
Font(filename, size) -> Font
Font(object, size) -> Font
pygame.font.SysFont() :可从系统加载字体,在windows/Font下
none:使用pygame带有内置的默认字体
pygame.font.Font(‘freesansbold.ttf’, 18) #freesansbold字体,.ttf字体文件格式

3,from pygame.locals import * :引入pygame中的所有常量
pygame.locals模块包含pygame使用的各种常量,会自动放置在PyGame模块名称空间中。但是,应用程序可以使用模块中仅包含带有from pygame.locals import*的pygame常量(pygame中定义的常量)。

4,pygame.font.Font.render()
render(text, antialias, color, background=None) -> Surface
text:
在新Surface上绘制文本,pygame不提供直接在现有surface上绘制文本,相反,必须使用font.render()创建文本的图像(表面),然后将此图像快速放到另一个surface上
文本只能是单行:不呈现换行符。空字符(“x00”)会引发类型错误。
在这里插入图片描述
在这里插入图片描述
接受unicode和char(byte)字符串。对于Unicode字符串,只识别ucs-2字符(“u0001”到“uffff”)。任何更大的值都会引发一个unicode错误。
如果呈现’\n’,将呈现未知字符。通常是一个矩形。相反,需要自己处理新行
在这里插入图片描述
返回的表面将具有容纳文本所需的尺寸。(与FONT.SIZE()返回的相同)。如果为文本传递空字符串,将返回一个宽度为一个像素和字体高度的空白表面

antialias:平滑的边缘(true),false表示带有锯齿
background:用于文本背景的颜色(新创建的surface的颜色)。如果没有背景通过,文本之外的区域将是透明的。

5,pygame.transform.rotate()
rotate(Surface, angle) -> Surface
旋转图像
angle:表示度数,可以是任意浮点数,正角度逆时针,逆角度顺时针。
除非以90度的增量旋转,否则图像将被填充得更大以保持新的大小。如果图像有像素alphas,填充区域将是透明的。否则,pygame将选择与表面颜色键或左上角像素值匹配的颜色。

6,pygame.Surface.blit()
blit(source, dest, area=None, special_flags=0) -> Rect
将一个图像绘制到另一个图像上

7,pygame.event.get()
get(eventtype=None) -> Eventlist
get(eventtype=None, pump=True) -> Eventlist
punp=true:调用pygame.event.pump()内部进程pygame事件处理程序。
作用:获取所有消息并将其从队列中删除。如果给定了类型或类型序列,则只会从队列中删除这些消息。

8,pygame.key
模块包含处理键盘的功能.

9,pygame.display.update()
update(rectangle=None) -> None
update(rectangle_list) -> None
类似于软件显示的pygame.display.flip()的优化版本。它只允许更新屏幕的一部分,而不允许更新整个区域。如果没有传递任何参数,它将更新整个表面积,如pygame.display.flip()。

10,pygame.draw.line()
line(surface, color, start_pos, end_pos, width) -> Rect
line(surface, color, start_pos, end_pos, width=1) -> Rect
在给定的曲面上绘制一条直线。没有端盖。粗线的两端是方形的。
width:线条厚度。如果宽度大于等于1,则用于线条厚度(默认值为1)。如果宽度小于1,则不会绘制任何内容。
start_pos, end_pos:起末位置 (x, y)

11,pygame.Rect()
Rect(left, top, width, height) -> Rect
Rect((left, top), (width, height)) -> Rect
Rect(object) -> Rect
用于存储直角坐标的PyGame对象

12,pygame.draw.rect()
rect(surface, color, rect) -> Rect
rect(surface, color, rect, width=0) -> Rect
绘制矩形

13,if name == ‘main’:
name :当前模块名
当模块被直接运行时,代码块将被运行,模块名为 main,当模块被导入时,代码块不被运行。即自己眼中还是main,别人眼中则_name_不再是_main_,是你的名字。

14,assert断言:测试表示式,true的话ok,false就会触发异常

代码

import random, pygame
from pygame.locals import *
#import pygame.locals

FPS = 10 #循环频率()
WINDOWWIDTH = 640 #窗口宽度
WINDOWHEIGHT = 480 #窗口高度
CELLSIZE = 20 #单元格大小,即正方形边长
assert WINDOWWIDTH % CELLSIZE == 0, "窗口宽度必须是单元格大小的倍数,防止有空余"
assert WINDOWHEIGHT % CELLSIZE == 0, "窗口高度必须是单元格大小的倍数"
CELLWIDTH = int(WINDOWWIDTH / CELLSIZE) #单元格个数
CELLHEIGHT = int(WINDOWHEIGHT / CELLSIZE)

#             R    G    B
WHITE     = (255, 255, 255) #白
BLACK     = (  0,   0,   0) #黑
RED       = (255,   0,   0) #红
GREEN     = (  0, 255,   0) #绿
DARKGREEN = (  0, 155,   0) #深绿
DARKGRAY  = ( 40,  40,  40) #深灰
BGCOLOR = BLACK #背景颜色:黑

UP = 'up'
DOWN = 'down'
LEFT = 'left'
RIGHT = 'right'

HEAD = 0 # 头部,列表

def main():
    global FPSCLOCK, DISPLAYSURF, BASICFONT #可一个一个套进去
    pygame.init()
    #创建游戏时钟对象,控制游戏循环频率
    FPSCLOCK = pygame.time.Clock()
    #设置游戏窗口
    DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT)) #显示界面
    #BASICFONT = pygame.font.SysFont('sylfaen.ttf', 18) #系统的
    #BASICFONT = pygame.font.SysFont('Open Sans.ttf', 18) #创建字体对象
    BASICFONT = pygame.font.Font('fr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值