三分钟写出一个“贪吃蛇”,只有python能这么轻松做到(附源码)
ztj100 2024-10-29 18:21 25 浏览 0 评论
贪吃蛇大家都玩过吧,今天手把手教你们自己写一个贪吃蛇游戏。
1.有关游戏的项目我们需要用到pygame库,用win+s输入cmd窗口,用 pip install pygame 命令安装就好了。
2.如果出现了这种版本过低的警告,可以输入 easy_install -U pip 命令进行版本升级,等待一段时间就可以了。
3.输入 pip list 可以查看当前版本。
4.下面就是完整的代码:
import pygame, sys, random, time
# 从pygame模块导入常用的函数和常量
from pygame.locals import *
# 定义颜色变量
black_colour = pygame.Color(0, 0, 0)
white_colour = pygame.Color(255, 255, 255)
red_colour = pygame.Color(255, 0, 0)
grey_colour = pygame.Color(150, 150, 150)
# 定义游戏结束函数
def GameOver(gamesurface):
# 设置提示字体的格式
GameOver_font = pygame.font.SysFont("MicrosoftYaHei", 16)
# 设置提示字体的颜色
GameOver_colour = GameOver_font.render('Game Over', True, grey_colour)
# 设置提示位置
GameOver_location = GameOver_colour.get_rect()
GameOver_location.midtop = (320, 10)
# 绑定以上设置到句柄
gamesurface.blit(GameOver_colour, GameOver_location)
# 提示运行信息
pygame.display.flip()
# 休眠5秒
time.sleep(5)
# 退出游戏
pygame.quit()
# 退出程序
sys.exit()
# 定义主函数
def main():
# 初始化pygame,为使用硬件做准备
pygame.init()
pygame.time.Clock()
ftpsClock = pygame.time.Clock()
# 创建一个窗口
gamesurface = pygame.display.set_mode((640, 480))
# 设置窗口的标题
pygame.display.set_caption('tanchishe snake')
# 初始化变量
# 初始化贪吃蛇的起始位置
snakeposition = [100, 100]
# 初始化贪吃蛇的长度
snakelength = [[100, 100], [80, 100], [60, 100]]
# 初始化目标方块的位置
square_purpose = [300, 300]
# 初始化一个数来判断目标方块是否存在
square_position = 1
# 初始化方向,用来使贪吃蛇移动
derection = "right"
change_derection = derection
# 进行游戏主循环
while True:
# 检测按键等pygame事件
for event in pygame.event.get():
if event.type == QUIT:
# 接收到退出事件后,退出程序
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
# 判断键盘事件,用w,s,a,d来表示上下左右
if event.key == K_RIGHT or event.key == ord('d'):
change_derection = "right"
if event.key == K_LEFT or event.key == ord('a'):
change_derection = "left"
if event.key == K_UP or event.key == ord('w'):
change_derection = "up"
if event.key == K_DOWN or event.key == ord('s'):
change_derection = "down"
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 判断移动的方向是否相反
if change_derection == 'left' and not derection == 'right':
derection = change_derection
if change_derection == 'right' and not derection == 'left':
derection = change_derection
if change_derection == 'up' and not derection == 'down':
derection = change_derection
if change_derection == 'down' and not derection == 'up':
derection = change_derection
# 根据方向,改变坐标
if derection == 'left':
snakeposition[0] -= 20
if derection == 'right':
snakeposition[0] += 20
if derection == 'up':
snakeposition[1] -= 20
if derection == 'down':
snakeposition[1] += 20
# 增加蛇的长度
snakelength.insert(0, list(snakeposition))
# 判断是否吃掉目标方块
if snakeposition[0] == square_purpose[0] and snakeposition[1] == square_purpose[1]:
square_position = 0
else:
snakelength.pop()
# 重新生成目标方块
if square_position == 0:
# 随机生成x,y,扩大二十倍,在窗口范围内
x = random.randrange(1, 32)
y = random.randrange(1, 24)
square_purpose = [int(x * 20), int(y * 20)]
square_position = 1
# 绘制pygame显示层
gamesurface.fill(black_colour)
for position in snakelength:
pygame.draw.rect(gamesurface, white_colour, Rect(position[0], position[1], 20, 20))
pygame.draw.rect(gamesurface, red_colour, Rect(square_purpose[0], square_purpose[1], 20, 20))
# 刷新pygame显示层
pygame.display.flip()
# 判断是否死亡
if snakeposition[0] < 0 or snakeposition[0] > 620:
GameOver(gamesurface)
if snakeposition[1] < 0 or snakeposition[1] > 460:
GameOver(gamesurface)
for snakebody in snakelength[1:]:
if snakeposition[0] == snakebody[0] and snakeposition[1] == snakebody[1]:
GameOver(gamesurface)
# 控制游戏速度
ftpsClock.tick(5)
if __name__ == "__main__":
main()
5.下面是游戏界面:
最后:感谢每一个读完我文章的人,你们的点赞和关注是我最大的鼓舞和动力。我给大家整理了一些资料和小游戏,供大家白嫖。只是由于这些文件较多,用链接其实也可以,但是链接公开之后容易被封,需要的可以私信我“学习”即可
相关推荐
- Jquery 详细用法
-
1、jQuery介绍(1)jQuery是什么?是一个js框架,其主要思想是利用jQuery提供的选择器查找要操作的节点,然后将找到的节点封装成一个jQuery对象。封装成jQuery对象的目的有...
- 前端开发79条知识点汇总
-
1.css禁用鼠标事件2.get/post的理解和他们之间的区别http超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。HTTP的工作方式是客户机与服务器之间的请求-应答协议。...
- js基础面试题92-130道题目
-
92.说说你对作用域链的理解参考答案:作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。...
- Web前端必备基础知识点,百万网友:牛逼
-
1、Web中的常见攻击方式1.SQL注入------常见的安全性问题。解决方案:前端页面需要校验用户的输入数据(限制用户输入的类型、范围、格式、长度),不能只靠后端去校验用户数据。一来可以提高后端处理...
- 事件——《JS高级程序设计》
-
一、事件流1.事件流描述的是从页面中接收事件的顺序2.事件冒泡(eventbubble):事件从开始时由最具体的元素(就是嵌套最深的那个节点)开始,逐级向上传播到较为不具体的节点(就是Docu...
- 前端开发中79条不可忽视的知识点汇总
-
过往一些不足的地方,通过博客,好好总结一下。1.css禁用鼠标事件...
- Chrome 开发工具之Network
-
经常会听到比如"为什么我的js代码没执行啊?","我明明发送了请求,为什么反应?","我这个网站怎么加载的这么慢?"这类的问题,那么问题既然存在,就需要去解决它,需要解决它,首先我们得找对导致问题的原...
- 轻量级 React.js 虚拟美化滚动条组件RScroll
-
前几天有给大家分享一个Vue自定义滚动条组件VScroll。今天再分享一个最新开发的ReactPC端模拟滚动条组件RScroll。...
- 一文解读JavaScript事件对象和表单对象
-
前言相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScrip...
- Python函数参数黑科技:*args与**kwargs深度解析
-
90%的Python程序员不知道,可变参数设计竟能决定函数的灵活性和扩展性!掌握这些技巧,让你的函数适应任何场景!一、函数参数设计的三大进阶技巧...
- 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
-
在现代计算领域,信息安全逐渐成为焦点话题。密码学,作为信息保护的关键技术之一,允许我们加密(保密)和解密(解密)数据。...
- 阿里Nacos惊爆安全漏洞,火速升级!(附修复建议)
-
前言好,我是threedr3am,我发现nacos最新版本1.4.1对于User-Agent绕过安全漏洞的serverIdentitykey-value修复机制,依然存在绕过问题,在nacos开启了...
- Python模块:zoneinfo时区支持详解
-
一、知识导图二、知识讲解(一)zoneinfo模块概述...
- Golang开发的一些注意事项(一)
-
1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...
- Python鼠标与键盘自动化指南:从入门到进阶——键盘篇
-
`pynput`是一个用于控制和监控鼠标和键盘的Python库...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)