导入系统
随机导入
# 全局定义
屏幕_X=600
屏幕_Y=600
# 蛇
# 积分以25为单位
蛇类(对象):
# 初始化各种需要的属性[默认右/身体块x5开头]
def __init__(self):
self.direction=pygame.K_RIGHT
self.body=[]
对于范围(5): 内的x
self.addnode()
# 尽可能将蛇块添加到前端
def addnode(自身):
左、上=(0,0)
如果是self.body:
左,上=(self.body[0].left,self.body[0].top)
节点=pygame.Rect(左,上,25,25)
如果self.direction==pygame.K_LEFT:
节点.left -=25
elif self.direction==pygame.K_RIGHT:
节点.left +=25
elif self.direction==pygame.K_UP:
节点.top -=25
elif self.direction==pygame.K_DOWN:
节点.top +=25
self.body.insert(0,节点)
# 删除最后一个块
def delnode(自身):
self.body.pop()
#死亡审判
def isdead(自我):
#撞墙
如果self.body[0].x 不在范围内(SCREEN_X):
返回真
如果self.body[0].y 不在范围内(SCREEN_Y):
返回真
# 撞一下自己
如果self.body[0] 在self.body[1:]: 中
返回真
返回错误
移动!
def 移动(自身):
self.addnode()
self.delnode()
# 改变方向,但左、右、上、下不能反向改变。
def 改变方向(自我,curkey):
LR=[pygame.K_LEFT,pygame.K_RIGHT]
UD=[pygame.K_UP,pygame.K_DOWN]
if curkey in LR+UD:
if (LR 中的curkey) 和(LR 中的self.direction):
返回
if (UD 中的curkey) 和(UD 中的self.direction):
返回
self.direction=curkey
# 食品类别
# 方法:放置/移除
# 积分以25为单位
食品类:
def __init__(self):
self.rect=pygame.Rect(-25,0,25,25)
def 删除(自身):
self.rect.x=-25
def 设置(自身):
如果self.rect.x==-25:
所有位置=[]
# 不要离墙太近。 25 ~ SCREEN_X-25 之间
对于范围内的位置(25,SCREEN_X-25,25):
allpos.append(pos)
self.rect.left=random.choice(allpos)
self.rect.top=random.choice(allpos)
打印(自我.矩形)
def show_text(屏幕、位置、文本、颜色、font_bold=False、font_size=60、font_italic=False):
#获取系统字体并设置文字大小
cur_font=pygame.font.SysFont('宋体', font_size)
#设置是否加粗属性
cur_font.set_bold(font_bold)
#设置属性是否斜体
cur_font.set_italic(font_italic)
#设置文本内容
text_fmt=cur_font.render(文本, 1, 颜色)
#绘制文字
screen.blit(text_fmt, pos)
def main():
pygame.init()
屏幕大小=(SCREEN_X,SCREEN_Y)
屏幕=pygame.display.set_mode(screen_size)
pygame.display.set_caption('蛇')
时钟=pygame.time.Clock()
分数=0
已死=假
#蛇/食物
蛇=蛇()
食物=食物()
而True:
对于pygame.event.get(): 中的事件
if event.type==pygame.QUIT:
sys.exit()
if event.type==pygame.KEYDOWN:
蛇.changedirection(event.key)
# 死亡后按空格重新启动
如果event.key==pygame.K_SPACE 且isdead:
返回主函数()
屏幕.填充((255,255,255))
# 画出蛇身/每走一步+1分
如果不是就死了:
分数+=1
蛇.move()
对于snake.body:中的矩形
pygame.draw.rect(屏幕,(20,220,39),矩形,0)
# 显示死亡文本
isdead=蛇.isdead()
如果死了:
show_text(屏幕,(100,200),'你死了!',(227,29,18),False,100)
show_text(屏幕,(150,260),'按空格重试.',(0,0,22),False,30)
# 食物处理/吃到+50分
# 当食物矩形与蛇头重合时,吃掉它-Snake 添加一个Node
如果food.rect==Snake.body[0]:
分数+=50
食物.remove()
蛇.addnode()
#食品配送
食物.set()
pygame.draw.rect(屏幕,(136,0,21),food.rect,0)
# 显示分数文本
show_text(屏幕,(50,500),'Scores: '+str(scores),(223,223,223))
pygame.display.update()
时钟滴答声(10)
如果__name__=='__main__':
用户评论
小时候玩贪吃蛇可是玩到手抽筋了!这个Python版的好像还可以试试看啊,希望能还原当年那种简单粗暴的游戏乐趣。
有17位网友表示赞同!
我超想学习编程!这个Python版贪吃蛇看起来特别适合新手入门,代码逻辑应该很简单吧?有视频教程吗?
有5位网友表示赞同!
玩这个 Python 版的贪吃蛇感觉和小时候的不太一样,画面有点简陋,操作也更像是键盘操控的感觉,不如当年那种鼠标控制更方便。
有16位网友表示赞同!
学习Python玩游戏真是超级厉害!这款贪吃蛇做的还行,可以根据代码来修改一些特性,比如加变长蛇身、食物数量等等,很有潜力~
有14位网友表示赞同!
这个 Python 版的贪吃蛇居然还能自定义地图?!感觉太酷了!我试着设计一下一个迷宫风格的地图,看看效果怎么样。
有5位网友表示赞同!
看了下代码,python版确实比我之前用C++实现的简洁好多。不过这款游戏的画面还是有点老土啊,希望能加入一些特效、音效等等。
有18位网友表示赞同!
Python 版的贪吃蛇能让我在学习编程的过程中得到乐趣,这个想法真的太棒了!我决定好好研究一下这边的代码,也许也能写出自己的一款游戏呢。
有6位网友表示赞同!
这个Python版贪吃蛇有点怀旧了,但玩着玩着就发现控制不太灵敏,很多时候想要调整方向却很难做到流畅,不知道是不是我的电脑问题?
有5位网友表示赞同!
Python真的太强大了吧!一款基本的贪吃蛇游戏都能用它来实现,感觉以后学习编程能玩到更多有趣的游戏。
有15位网友表示赞同!
Python 版的贪吃蛇代码看起来挺清晰易懂的,适合作为入門者的入门案例吧,不过我建议开发团队可以添加一些教程和文档,这样更方便新手学习。
有18位网友表示赞同!
这个游戏玩起来有点卡顿, 不知道是我的电脑的问题还是游戏的优化问题?感觉画面特效也没那么丰富啊
有16位网友表示赞同!
我一直觉得游戏编程太难了,没想到python版贪吃蛇这么简单!我突然对Python学习有了兴趣,可以试试自己动手造个游戏。
有20位网友表示赞同!
这个Python版的贪吃蛇有点过于简单,缺少一些挑战性,我希望它能加入更多关卡、道具和敌人!
有5位网友表示赞同!
代码结构很清晰易懂,学习用python做游戏的参考效果很好
有18位网友表示赞同!
感觉这个 Python 版的贪吃蛇就仅仅像一个演示案例吧,缺乏趣味性和挑战性。玩起来也没有什么特别的感觉。
有9位网友表示赞同!
这款游戏确实挺有趣的,在Python基础上实现了一个经典的游戏,适合学习者练习一下代码编写和游戏逻辑设计。
有5位网友表示赞同!
Python 版的贪吃蛇虽然没有太多华丽的效果,但是操作流畅,回归游戏本真,让人感受到童年回忆的味道.
有16位网友表示赞同!