点击蓝字丨关注我们
本期小编用python制作了一个贪吃蛇小游戏送给大家~(文末免费领取完整代码哦)
本期内容: 基于pygame的贪吃蛇小游戏
实验环境:
- python3.11及以上
- pycharm
- pygame
安装pygame的命令:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
pygame是一个开源的Python模块,专门用于编写电子游戏。它使用简单、功能强大,因此非常适合初学者入门。pygame的主要特点包括图像、声音、键盘、鼠标等多种交互功能的支持,以及快速的游戏开发和部署。
首先,pygame具有丰富的图像处理功能。它可以加载和显示各种图像文件,如位图、矢量图等。同时,它还支持图像的缩放、翻转、旋转、剪切等操作,方便开发者对图像进行各种处理。
其次,pygame还提供了强大的声音处理功能。它可以播放各种音频文件,如MP3、WAV等,并支持音量、音调等参数的控制。开发者可以轻松地为游戏添加背景音乐、音效、语音等。
此外,pygame还支持键盘和鼠标的交互。开发者可以通过监听键盘事件来响应玩家的按键操作,实现游戏中角色的移动、攻击等功能。同时,鼠标事件的支持也使得开发者可以处理鼠标点击、移动等操作,为游戏增加更多的交互性。
pygame还具有快速的游戏开发和部署能力。它提供了简单易用的API,开发者只需使用少量的代码就可以实现复杂的游戏功能。此外,pygame可以在多个平台上运行,包括Windows、MacOS、Linux等,使得游戏的部署非常方便。
总之,pygame是一个功能强大且易于学习的游戏开发模块。它提供了丰富的图像、声音、键盘、鼠标等交互功能的支持,同时还具有快速的游戏开发和部署能力。无论是初学者还是有一定编程经验的开发者,都可以使用pygame来编写自己的电子游戏。
背景图片
kenan.jpg
完整程序
import pygame
import sys
import random
# 游戏窗口大小
game_width = 666
game_height = 666
# 蛇类
# 点以25为单位
class Snake(object):
# 初始化各种需要的属性 [开始时默认向右/身体块x5]
def __init__(self):
self.dirction = pygame.K_RIGHT
self.body = []
for x in range(5):
self.addnode()
# 无论何时 都在前端增加蛇块
def addnode(self):
left,top = (0,0)
if self.body:
left,top = (self.body[0].left,self.body[0].top)
node = pygame.Rect(left,top,25,25)
if self.dirction == pygame.K_LEFT:
node.left -= 25
elif self.dirction == pygame.K_RIGHT:
node.left += 25
elif self.dirction == pygame.K_UP:
node.top -= 25
elif self.dirction == pygame.K_DOWN:
node.top += 25
self.body.insert(0,node)
# 删除最后一个块
def delnode(self):
self.body.pop()
# 死亡判断
def isdead(self):
# 撞墙
if self.body[0].x not in range(game_width):
return True
if self.body[0].y not in range(game_height):
return True
# 撞自己
if self.body[0] in self.body[1:]:
return True
return False
# 移动!
def move(self):
self.addnode()
self.delnode()
# 改变方向 但是左右、上下不能被逆向改变
def changedirection(self,curkey):
LR = [pygame.K_LEFT,pygame.K_RIGHT]
UD = [pygame.K_UP,pygame.K_DOWN]
if curkey in LR+UD:
if (curkey in LR) and (self.dirction in LR):
return
if (curkey in UD) and (self.dirction in UD):
return
self.dirction = curkey
class Food:
def __init__(self):
self.rect = pygame.Rect(-25,0,25,25)
def remove(self):
self.rect.x=-25
def set(self):
if self.rect.x == -25:
allpos = []
# 不靠墙太近 25 ~ game_width-25 之间
for pos in range(25,game_width-25,25):
allpos.append(pos)
self.rect.left = random.choice(allpos)
self.rect.top = random.choice(allpos)
def show_text(screen, pos, text, color, 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(text, 1, color)
#绘制文字
screen.blit(text_fmt, pos)
def main():
pygame.init()
screen_size = (game_width,game_height)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('贪吃蛇')
clock = pygame.time.Clock()
scores = 0
isdead = False
image = pygame.image.load("kenan.jpg")
img = pygame.transform.scale(image, (game_width,game_width))
# 蛇/食物
snake = Snake()
food = Food()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
snake.changedirection(event.key)
# 死后按space重新
if event.key == pygame.K_SPACE and isdead:
return main()
screen.fill((255,255,255))
screen.blit(img,(0,0))
# 画蛇身 / 每一步+1分
if not isdead:
scores+=1
snake.move()
for rect in snake.body:
pygame.draw.rect(screen,"pink",rect,0)
# 食物处理 / 吃到+50分
# 当食物rect与蛇头重合,吃掉 -> Snake增加一个Node
if food.rect == snake.body[0]:
scores+=50
food.remove()
snake.addnode()
# 食物投递
food.set()
pygame.draw.rect(screen,"yellow",food.rect,0)
# 显示分数文字
show_text(screen,(44,44),'Scores: '+str(scores),"black")
# 显示死亡文字
isdead = snake.isdead()
if isdead:
show_text(screen,(135,300),'Game failed!',"red",False,100)
show_text(screen,(222,600),'Press space to try again...',"black",False,50)
pygame.display.update()
clock.tick(10)
if __name__ == '__main__':
main()
程序分析
这段代码是一个简单的贪吃蛇游戏的实现。下面对代码进行分析: 首先,代码导入了pygame、sys和random模块。pygame模块用于游戏的开发,sys模块用于退出游戏,random模块用于生成随机数。
接下来定义了游戏窗口的大小,宽度为666,高度为666。然后定义了蛇类和食物类。
蛇类包括了蛇的方向、身体块的列表等属性和方法。初始化时默认向右移动,并生成初始的蛇身体块。addnode方法在蛇的头部添加一个新的身体块,delnode方法删除最后一个身体块,isdead方法判断蛇是否死亡,move方法控制蛇的移动,changedirection方法改变蛇的方向。蛇的方向只能在左右或上下之间改变,不能逆向改变。
食物类包括了食物的矩形对象和相关的方法。set方法用于随机生成食物的位置,remove方法将食物移出游戏界面。
接下来定义了一个show_text函数,用于在屏幕上显示文字。
main函数是游戏的主循环。首先初始化pygame和屏幕,设置窗口标题和帧率。然后定义了一些游戏所需要的变量,如分数、是否死亡等。
然后创建了一个蛇对象和食物对象。
进入主循环,处理各种事件。如果用户按下了退出按钮,则退出游戏。如果用户按下了其他键,则改变蛇的方向。如果用户按下了空格键,并且游戏结束,重新开始游戏。
接下来进行游戏的绘制。首先清空屏幕,然后绘制背景图像。然后绘制蛇的身体和食物。
接着显示分数和死亡文字,如果蛇死亡,则显示游戏失败的字样和重新开始的提示。
最后更新屏幕,并控制游戏的帧率。通过判断是否在__main__函数中运行来调用主函数开始游戏。
总之,这段代码实现了一个简单的贪吃蛇游戏。它使用pygame模块进行游戏的开发,包括绘制图像、处理事件等功能。通过控制蛇的方向和吃食物来增加分数,判断蛇是否死亡并重新开始游戏。这是一个适合初学者入门的pygame示例代码。
运行结果
贪吃蛇
下载代码
公众号对话框回复" python104 "并输入提取码" 3lzq "即可免费领取完整代码哦~
如遇到问题"no module named pygame ",请在终端输入"pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame",等待pygame库安装完成后再运行程序哦
我是一只有趣的兔子,感谢你的喜欢!