目录
综述
Pygame是一个简单而强大的Python库,用于开发2D游戏。它提供了一系列工具和函数,帮助开发者轻松实现游戏的图形渲染、鼠标键盘事件处理、音频播放等功能。
而笔者今天分享的就是一个简单的贪吃蛇小游戏,也是适合很多python新手刚开始做的项目实践。
笔者python能力有限,主要更多的是学习c#和unity相关,可能会有一些考虑不周全的地方,希望大家批评指正。
另外就是代码管理上确实有很大的问题,希望大家见谅,因为这是初学的时候弄的,有些习惯没养成好。
制作前的分析
编程之前我们先来了解一下什么事面向过程和面向对象的区别。
面向对象和面向过程
面向对象和面向过程是两种不同的编程思想。面向对象是一种以对象为中心的编程方式,它将程序视为一组相互作用的对象,每个对象都有自己的属性和方法。面向过程则是一种以过程为中心的编程方式,它将程序视为一系列的步骤或者过程,通过控制流来实现功能。
具体来说,面向对象的编程语言(如Java、C++)提供了类和对象的概念,允许开发者通过定义类来创建对象,并以对象之间的交互来实现程序的功能。面向对象编程的特点包括封装、继承和多态,它能够更好地模拟和解决现实世界中的问题。
而面向过程的编程语言(如C)则更加注重算法和步骤的流程,通过函数或过程来实现功能。面向过程的特点包括过程的顺序执行和数据的共享,它更适合处理一些简单的、线性的问题。
总体而言,面向对象的编程方式更加灵活、可扩展,能够更好地应对大型项目的开发,而面向过程则更加简单、直观,适用于一些简单的问题。不同的编程任务和需求会决定选择哪种编程方式。
而我们在本次项目的开展的时候也会运用到一些面向对象的思路,面相对象的本质其实是提高写代码和分析需求的效率。
对象相关(地图,蛇,食物)
地图和墙体的绘制
对于这样一个游戏,我们肯定要优先构造一个画布,也就是背景板,然后我们再来进行不管是墙体还是蛇或者食物的绘制。
学习了python我们自然而然就会联想到turtle函数,那样当然也可以,但是相对pygame来说有些功能就不能轻松实现。
蛇的绘制
然后就是我们的主人公蛇,它需要达到的功能有哪些:首先是移动,然后是能够吃食物,吃食物还会变长,如果可能我们还可以引入计分,撞墙或者撞自己会死。
食物的绘制
食物需要实现的功能比较简单:要能出现在地图上,要能被吃,吃了要随机生成。如果你想我们还可以加入不同的果子进行游戏性的提高。
总结
不难发现,其实我们从一开始就可以把地图分为一个个方块,然后将每一个方块当成组成所有东西的元素。
那么我们要开发的思路就有了:
1.游戏开始,生成地图并生成墙;
2.生成蛇,包括初始化蛇位置、长度和初始运动方向;
3.生成食物,可以加入几种不同的食物;
4.接收到玩家改变运动方向的指令;
5.当蛇头下一步就要吃到食物时,蛇的长度加一,同时生成新的食物;
6.引入计分板还有提示板,可以让玩家重启游戏,和暂停游戏。
代码
游戏的基础(gamebase.py)
引用
import pygame
from time import sleep
一些基础参数的设置
颜色
具体要用什么颜色也可以自己去查一查
bg_color=(255,255,255) #背景颜色 白色
apple_color=(255,0,0) #红色
snake_color=(200,200,200) #灰
blueberry_color=(0,0,255) #蓝色
score_text_color=(0,0,0)
orange_color=(255,166,0)
head_color=(0,0,0) #黑色
tip_text_color=(255,10,10)#不一样的红
点类(方块元素)
设置方块的长宽,以及拷贝的基础行为
class Point:
row=0
col=0
def __init__(self,row,col):
self.row=row
self.col=col
def copy(self):#拷贝,跟蛇的复制有关
return Point(row=self.row,col=self.col)
文本类
既然我们要使用计分板和提示信息这种东西,必然有一个写文字的需求,所以我们一并在这里设置了。
关于那个字体,你想用啥就用啥,可能很多朋友没有我用的这种字体。
class Label(object):
###标签文本###
def __init__(self,size=40,score=True):
###初始化标签信息###
self.font = pygame.font.SysFont('方正仿宋gbk',size,italic=True)
self.score = score
def draw(self,window,text):
###绘制当前对象的内容###
###渲染字体,形成图片
color = score_text_color if self.score else tip_text_color
text_surface = self.font.render(text,True,color)
###获取文本矩形
text_rect=text_surface.get_rect()
###获取窗口矩形
window_rect=window.get_rect()
###修改位置
'''text_rect.y=window_rect.height-text_rect.height
text_rect.x=window_rect.width-text_rect.width
意思相同
'''
if self.score:
text_rect.bottomright=window_rect.bottomright
else:
text_rect.center=window_rect.center
###true对应的抗锯齿,一般文本的抗锯齿对现在的电脑要求不大,所以开启
window.blit(text_surface,text_rect)
游戏主体(snake.py)
引用
import pygame
import random
from gamebase import *
from time import sleep
基础参数(其实可以加到gamebase里)
snake用的是一个数组在装,然后相关的特殊函数如果有不理解建议去查询一下,或者多看注释。
###初始化,定义,或者参数
pygame.init()
W=800
H=600
#定义坐标
Row=60
Col=80
score_label=Label()
score=0
t=20##运行速度相关
is_run=True###游戏是否正常运行的判断
is_pause=False###游戏是否暂停的判断
tip_label=Label(50,False)
dead=False
berry_jugement=0###蓝莓的生成判定
orange_jugement=0###橘子的生成判定
FOOD_UPDATE_EVENT=pygame.USEREVENT###蓝莓更新事件标志
Orange_UPDATE_EVENT=pygame.USEREVENT+1####
size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇 0.03')
direct='left' ###left,right,up,down
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
一些函数
食物生成
食物生成的时候应该和蛇的身体遍历判断一下是否重合,如果重合,就应该重新生成
###食物生成
def gen_food():
while 1:
pos=Point(row=random.randint(0,Row-1),col=random.randint(0,Col-1))
is_coll=False
if head.row==pos.row and head.col==pos.col:
is_coll=True
for snake in snakes:
if snake.row==pos.row and snake.col==pos.col:
is_coll=True
break
if not is_coll:
break
return pos
###下面的不是函数,但是也是和食物生成相关的,所以都放在这里了
apple=gen_food()
orange=gen_food()
pygame.time.set_timer(FOOD_UPDATE_EVENT,8000)
pygame.time.set_timer(Orange_UPDATE_EVENT,2000)
画图
使用类进行一些基础的构造便于使用
方块
##画图函数定义
def rect(point,color):
cell_width=(W/Col)
cell_hegiht=(H/Row)
left=point.col*cell_width
top=point.row*cell_hegiht
pygame.draw.rect(window,color,(left,top,cell_width,cell_hegiht))
圆形
def rect_circle(point,color):
width=5
radius=5
cell_width=(W/Col)
cell_hegiht=(H/Row)
left=point.col*cell_width
top=point.row*cell_hegiht
pygame.draw.circle(window,color,(left+5,top+5), radius,width)
初始化函数
可以写清楚一点变量,我这里偷了懒,只有一些赋值。
def reset_game():
a = 0
b = 0
c = True
d = False
e = 0
return a,b,c,d,e
游戏主体
大致分为三个版块开发,接下来笔者会每个版块都进行讲解,其实这些都可以适当封装成函数,不过因为笔者的管理能力不够,导致当初开发的时候没有注意到这个问题,见谅。
clock=pygame.time.Clock()#用于时间事件的监控
while True:
if is_pause:...
if dead:...
while not is_pause and not dead:...
暂停功能
if is_pause:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")#用于调试
quit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_SPACE:
is_pause=not is_pause
死亡判断
if dead:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_SPACE:#游戏结束后的初始化
dead= not dead
berry_jugement,score,is_run,is_pause,orange_jugement=reset_game()#
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
direct='left'
正常游戏操作
while not is_pause and not dead:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
print(event)
#移动的键盘控制
if event.key==pygame.K_ESCAPE:
print("按下了ESC键")
quit()
if event.key==pygame.K_SPACE:
if is_run==False:
print("按下空格游戏重新开始")
###重置原始数据
berry_jugement,score,is_run,is_pause,orange_jugement=reset_game()
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
direct='left'
else:
is_pause=not is_pause
if event.key==119 or event.key==1073741906:
if direct=='left' or direct=='right':
direct='up'
if event.key==115 or event.key==1073741905:
if direct=='left' or direct=='right':
direct='down'
if event.key==97 or event.key==1073741904:
if direct=='up' or direct=='down':
direct='left'
if event.key==100 or event.key==1073741903:
if direct=='up' or direct=='down':
direct='right'
if is_run and not is_pause and berry_jugement==4:
if event.type==FOOD_UPDATE_EVENT:
apple=gen_food()
berry_jugement=0
if is_run and not is_pause and orange_jugement==9:
if event.type==Orange_UPDATE_EVENT:
orange=gen_food()
#暂停的键盘控制和鼠标控制
###elif pygame.MOUSEBUTTONDOWN:
#吃东西
eat=(head.row==apple.row and head.col==apple.col)
eat_orange=(head.row==orange.row and head.col==orange.col)
if eat:
score+=1
berry_jugement+=1
if orange_jugement<9:
orange_jugement+=1
if berry_jugement==5:
score+=5
berry_jugement=0
apple=gen_food()
if orange_jugement==9:
orange=gen_food()
if eat_orange:
score+=15
orange_jugement=0
#先处理身子
#1.把原来点头插入到snake的头上
snakes.insert(0,head.copy())
#2.尾巴删掉
if not eat:
snakes.pop()
#移动
if direct=='left':
head.col-=1
elif direct=='right':
head.col+=1
elif direct=='up':
head.row-=1
elif direct=='down':
head.row+=1
#检测
#1.撞墙(日后可能要修改成程序设定的墙体,而不是程序边框,而当蛇到达边框的时候,应该从另一头出来)
if head.col<0 or head.col>=Col or head.row<0 or head.row>=Row:
dead=True
#2.撞自己
for snake in snakes:
if head.col==snake.col and head.row==snake.row:
dead=True
break
if dead:
is_run=False
dead=True
#渲染——画出来
#背景
pygame.draw.rect(window,bg_color,(0,0,W,H))
###绘制得分板
score_label.draw(window,"得分:%d"%score)
###绘制暂停标签
if is_run==False:
tip_label.draw(window,"按下空格游戏重新开始")
if is_pause:
tip_label.draw(window,"游戏暂停,按下空格,游戏重新开始")
#蛇
for snake in snakes:
rect(snake,snake_color)
if not dead:
rect(head,head_color)
else:
rect(head,apple_color)
#生成食物
if berry_jugement<=3:
rect_circle(apple,apple_color)
#蓝莓会在一定的时间后消失然后重新生成,需要加入一个时钟来判断和计分,属于奖励机制,如果可能,需要学习闪烁或者缩放的表现形式
else:
rect_circle(apple,blueberry_color)
if orange_jugement==9:
rect_circle(orange,orange_color)
#更新画面到屏幕上
pygame.display.flip()
#设置帧频
clock.tick(20) #
因为这一块的东西最多,接下来做细节的拆解
按键监听相关
目前暂时只能实现关闭还有暂停以及基本的移动,如果考虑改良,可以加入加速还有鼠标控制。
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
print(event)
#移动的键盘控制
if event.key==pygame.K_ESCAPE:
print("按下了ESC键")
quit()
if event.key==pygame.K_SPACE:
if is_run==False:
print("按下空格游戏重新开始")
###重置原始数据
berry_jugement,score,is_run,is_pause,orange_jugement=reset_game()
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
direct='left'
else:
is_pause=not is_pause
#键盘↑,↓,←,→,w,s,a,d的设置
if event.key==119 or event.key==1073741906:
if direct=='left' or direct=='right':
direct='up'
if event.key==115 or event.key==1073741905:
if direct=='left' or direct=='right':
direct='down'
if event.key==97 or event.key==1073741904:
if direct=='up' or direct=='down':
direct='left'
if event.key==100 or event.key==1073741903:
if direct=='up' or direct=='down':
direct='right'
###特殊食物;蓝莓和橘子的判断
if is_run and not is_pause and berry_jugement==4:
if event.type==FOOD_UPDATE_EVENT:#如果超时,蓝莓会消失
apple=gen_food()
berry_jugement=0
if is_run and not is_pause and orange_jugement==9:
if event.type==Orange_UPDATE_EVENT:
orange=gen_food()
#鼠标控制思路:
###elif pygame.MOUSEBUTTONDOWN:
吃东西相关
#吃东西
eat=(head.row==apple.row and head.col==apple.col)#判断位置是否重合
eat_orange=(head.row==orange.row and head.col==orange.col)
if eat:#分数相关
score+=1
berry_jugement+=1
if orange_jugement<9:
orange_jugement+=1
if berry_jugement==5:
score+=5
berry_jugement=0
apple=gen_food()
if orange_jugement==9:
orange=gen_food()
if eat_orange:
score+=15
orange_jugement=0
#先处理身子
#1.把原来点头插入到snake的头上
snakes.insert(0,head.copy())
#2.尾巴删掉
if not eat:
snakes.pop()
移动和检测
移动思路其实就是变换坐标,然后死亡机制有两种,一种是撞你设定的墙(我们这里没有就用的边界,如果以后你要自己绘制地图可以重新用类定义一个墙出来),一种是撞自己,就是通过遍历检测头的坐标是否和身体重合。
如果你想实现切换模式,其实很简单,做一个菜单供选择,然后无墙体模式需要考虑的就是穿墙,其实就是把头的坐标移到屏幕最左侧。
模式切换相当于一个分支。
#移动
if direct=='left':
head.col-=1
elif direct=='right':
head.col+=1
elif direct=='up':
head.row-=1
elif direct=='down':
head.row+=1
#检测
#1.撞墙(日后可能要修改成程序设定的墙体,而不是程序边框,而当蛇到达边框的时候,应该从另一头出来)
if head.col<0 or head.col>=Col or head.row<0 or head.row>=Row:
dead=True
#2.撞自己
for snake in snakes:
if head.col==snake.col and head.row==snake.row:
dead=True
break
if dead:
is_run=False
dead=True
渲染和绘制
目前为止我们只是在逻辑上实现贪吃蛇的行为,但是还没有画出来,而最后这个版块就是关键的显示。
#渲染——画出来
#背景
pygame.draw.rect(window,bg_color,(0,0,W,H))
###绘制得分板
score_label.draw(window,"得分:%d"%score)
###绘制暂停标签
if is_run==False:
tip_label.draw(window,"按下空格游戏重新开始")
if is_pause:
tip_label.draw(window,"游戏暂停,按下空格,游戏重新开始")
#蛇
for snake in snakes:
rect(snake,snake_color)
if not dead:
rect(head,head_color)
else:
rect(head,apple_color)
#生成食物
if berry_jugement<=3:
rect_circle(apple,apple_color)
#蓝莓会在一定的时间后消失然后重新生成,需要加入一个时钟来判断和计分,属于奖励机制,如果可能,需要学习闪烁或者缩放的表现形式
else:
rect_circle(apple,blueberry_color)
if orange_jugement==9:
rect_circle(orange,orange_color)
#更新画面到屏幕上
pygame.display.flip()
#设置帧频
clock.tick(20) #
#收尾工作
完整代码
到了你们最喜欢的环节
tips:因为我是进行了迭代的开发,之前用的turtle库写的,所以有些部分是老版本的,你要学会自己辨析。
gamebase.py
from turtle import *
import pygame
from time import sleep
###turtle 函数初代版本,留作纪念
def square(x,y,size,color_name):
up()
goto(x,y)
down()
color(color_name)
begin_fill()
forward(size)
left(90)
forward(size)
left(90)
forward(size)
left(90)
forward(size)
left(90)
end_fill()
"""填充"""
#gamepy 贪吃蛇主要函数
bg_color=(255,255,255) #背景颜色 白色
apple_color=(255,0,0) #红色
snake_color=(200,200,200) #灰
blueberry_color=(0,0,255) #蓝色
score_text_color=(0,0,0)
orange_color=(255,166,0)
head_color=(0,0,0) #黑色
tip_text_color=(255,10,10)#不一样的红
class Point:
row=0
col=0
def __init__(self,row,col):
self.row=row
self.col=col
def copy(self):#拷贝,跟蛇的复制有关
return Point(row=self.row,col=self.col)
class Label(object):
###标签文本###
def __init__(self,size=40,score=True):
###初始化标签信息###
self.font = pygame.font.SysFont('方正仿宋gbk',size,italic=True)
self.score = score
def draw(self,window,text):
###绘制当前对象的内容###
###渲染字体,形成图片
color = score_text_color if self.score else tip_text_color
text_surface = self.font.render(text,True,color)
###获取文本矩形
text_rect=text_surface.get_rect()
###获取窗口矩形
window_rect=window.get_rect()
###修改位置
'''text_rect.y=window_rect.height-text_rect.height
text_rect.x=window_rect.width-text_rect.width
意思相同
'''
if self.score:
text_rect.bottomright=window_rect.bottomright
else:
text_rect.center=window_rect.center
###true对应的抗锯齿,一般文本的抗锯齿对现在的电脑要求不大,所以开启
window.blit(text_surface,text_rect)
snake.py
import pygame
import random
from gamebase import *
from time import sleep
###初始化,定义,或者参数
pygame.init()
W=800
H=600
#定义坐标
Row=60
Col=80
score_label=Label()
score=0
t=20
is_run=True###游戏是否正常运行的判断
is_pause=False###游戏是否暂停的判断
tip_label=Label(50,False)
dead=False
berry_jugement=0
orange_jugement=0###等待开发
FOOD_UPDATE_EVENT=pygame.USEREVENT###蓝莓更新事件标志
Orange_UPDATE_EVENT=pygame.USEREVENT+1####
size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇 0.03')
direct='left' ###left,right,up,down
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
###食物生成
def gen_food():
while 1:
pos=Point(row=random.randint(0,Row-1),col=random.randint(0,Col-1))
is_coll=False
if head.row==pos.row and head.col==pos.col:
is_coll=True
for snake in snakes:
if snake.row==pos.row and snake.col==pos.col:
is_coll=True
break
if not is_coll:
break
return pos
apple=gen_food()
orange=gen_food()
pygame.time.set_timer(FOOD_UPDATE_EVENT,8000)
pygame.time.set_timer(Orange_UPDATE_EVENT,2000)
##画图函数定义
def rect(point,color):
cell_width=(W/Col)
cell_hegiht=(H/Row)
left=point.col*cell_width
top=point.row*cell_hegiht
pygame.draw.rect(window,color,(left,top,cell_width,cell_hegiht))
def rect_circle(point,color):
width=5
radius=5
cell_width=(W/Col)
cell_hegiht=(H/Row)
left=point.col*cell_width
top=point.row*cell_hegiht
pygame.draw.circle(window,color,(left+5,top+5), radius,width)
def reset_game():
a = 0
b = 0
c = True
d = False
e = 0
return a,b,c,d,e
###游戏循环
clock=pygame.time.Clock()
while True:
#处理事件,事件监听
if is_pause:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_SPACE:
is_pause=not is_pause
if dead:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_SPACE:
dead= not dead
berry_jugement,score,is_run,is_pause,orange_jugement=reset_game()
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
direct='left'
while not is_pause and not dead:
for event in pygame.event.get():
if event.type==pygame.QUIT:
print("点击了关闭按钮")
quit()
elif event.type==pygame.KEYDOWN:
print(event)
#移动的键盘控制
if event.key==pygame.K_ESCAPE:
print("按下了ESC键")
quit()
if event.key==pygame.K_SPACE:
if is_run==False:
print("按下空格游戏重新开始")
###重置原始数据
berry_jugement,score,is_run,is_pause,orange_jugement=reset_game()
head=Point(row=int(Row/2),col=int(Col/2))
snakes=[Point(row=head.row,col=head.col+1),Point(row=head.row,col=head.col+2),Point(row=head.row,col=head.col+2)]
direct='left'
else:
is_pause=not is_pause
if event.key==119 or event.key==1073741906:
if direct=='left' or direct=='right':
direct='up'
if event.key==115 or event.key==1073741905:
if direct=='left' or direct=='right':
direct='down'
if event.key==97 or event.key==1073741904:
if direct=='up' or direct=='down':
direct='left'
if event.key==100 or event.key==1073741903:
if direct=='up' or direct=='down':
direct='right'
if is_run and not is_pause and berry_jugement==4:
if event.type==FOOD_UPDATE_EVENT:
apple=gen_food()
berry_jugement=0
if is_run and not is_pause and orange_jugement==9:
if event.type==Orange_UPDATE_EVENT:
orange=gen_food()
#暂停的键盘控制和鼠标控制
###elif pygame.MOUSEBUTTONDOWN:
#吃东西
eat=(head.row==apple.row and head.col==apple.col)
eat_orange=(head.row==orange.row and head.col==orange.col)
if eat:
score+=1
berry_jugement+=1
if orange_jugement<9:
orange_jugement+=1
if berry_jugement==5:
score+=5
berry_jugement=0
apple=gen_food()
if orange_jugement==9:
orange=gen_food()
if eat_orange:
score+=15
orange_jugement=0
#先处理身子
#1.把原来点头插入到snake的头上
snakes.insert(0,head.copy())
#2.尾巴删掉
if not eat:
snakes.pop()
#移动
if direct=='left':
head.col-=1
elif direct=='right':
head.col+=1
elif direct=='up':
head.row-=1
elif direct=='down':
head.row+=1
#检测
#1.撞墙(日后可能要修改成程序设定的墙体,而不是程序边框,而当蛇到达边框的时候,应该从另一头出来)
if head.col<0 or head.col>=Col or head.row<0 or head.row>=Row:
dead=True
#2.撞自己
for snake in snakes:
if head.col==snake.col and head.row==snake.row:
dead=True
break
if dead:
is_run=False
dead=True
#渲染——画出来
#背景
pygame.draw.rect(window,bg_color,(0,0,W,H))
###绘制得分板
score_label.draw(window,"得分:%d"%score)
###绘制暂停标签
if is_run==False:
tip_label.draw(window,"按下空格游戏重新开始")
if is_pause:
tip_label.draw(window,"游戏暂停,按下空格,游戏重新开始")
#蛇
for snake in snakes:
rect(snake,snake_color)
if not dead:
rect(head,head_color)
else:
rect(head,apple_color)
#生成食物
if berry_jugement<=3:
rect_circle(apple,apple_color)
#蓝莓会在一定的时间后消失然后重新生成,需要加入一个时钟来判断和计分,属于奖励机制,如果可能,需要学习闪烁或者缩放的表现形式
else:
rect_circle(apple,blueberry_color)
if orange_jugement==9:
rect_circle(orange,orange_color)
#更新画面到屏幕上
pygame.display.flip()
#设置帧频
clock.tick(20) #
#收尾工作
总结
其实有很多大的小的问题,代码冗杂也好还是开发思路不完整,其实都是因为初学的原因,希望大家也能从我这个不太完善的小项目里得到一点收获吧。如果有什么问题也欢迎在评论区和我讨论。
后续我可能更多会更新面向游戏的一些代码帖子(比如c#),主要还是想通过告诉别人来提升自己,能力有限。
当然我还是希望你们在写这些项目的时候,除了思考怎么实现的,更多的是去思考怎么做的更好,那样才会有真正的水平提高。
如果感觉很难,可以看我另一个博客,里面有一个turtle函数做的相对简单的贪吃蛇。
标签:head,event,贪吃蛇,pygame,制作,col,###,row From: https://blog.csdn.net/a6s686/article/details/136441049