废话少说直接上代码,这一波直接稳定大家的心绪。

import pygame, sys, random, time
from pygame.locals import *  # 从pygame模块导入常用的函数和常量
#定义颜色变量
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)
light_colour = pygame.Color(220,220,220)
#定义游戏结束函数
def GameOver(gamesurface):# 设置提示字体的格式GameOver_font = pygame.font.SysFont("MicrosoftYaHei", 45)# 设置提示字体的颜色GameOver_colour = GameOver_font.render('GameOver', True, grey_colour)#只能英文# 设置提示位置GameOver_location = GameOver_colour.get_rect()GameOver_location.midtop = (310, 200)# 绑定以上设置到句柄gamesurface.blit(GameOver_colour, GameOver_location)# 提示运行信息pygame.display.flip()# 休眠5秒time.sleep(3)# 退出游戏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('贪吃蛇 snake')# 初始化变量# 初始化贪吃蛇的起始位置snakeposition = [100, 100]# 初始化贪吃蛇的长度snakelength = [[100, 100], [80, 100], [60, 100]]# 初始化目标方块的位置square_purpose = [300, 300]# 初始化一个数来判断目标方块是否存在square_position = 1# 初始化方向,用来使贪吃蛇移动derection = "right"change_derection = derectionpygame.mixer.music.load("a.mp3")# 进行游戏主循环while True:if pygame.mixer.music.get_busy() == False :pygame.mixer.music.play()# 检测按键等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_derectionif change_derection == 'right' and not derection == 'left':derection = change_derectionif change_derection == 'up' and not derection == 'down':derection = change_derectionif change_derection == 'down' and not derection == 'up':derection = change_derection# 根据方向,改变坐标if derection == 'left':snakeposition[0] -= 20if derection == 'right':snakeposition[0] += 20if derection == 'up':snakeposition[1] -= 20if derection == 'down':snakeposition[1] += 20# 增加蛇的长度snakelength.insert(0, list(snakeposition))# 判断是否吃掉目标方块if snakeposition[0] == square_purpose[0] and snakeposition[1] == square_purpose[1]:square_position = 0else: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(white_colour)for position in snakelength:pygame.draw.rect(gamesurface, light_colour, Rect(position[0], position[1], 20, 20))pygame.draw.rect(gamesurface, red_colour, Rect(square_purpose[0], square_purpose[1], 20, 20))pygame.draw.rect(gamesurface, black_colour, Rect(snakeposition[0], snakeposition[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)# 显示分数# 显示速度score = 0speed = 5if len(snakelength)>3:score = len(snakelength) - 3speed = speed + score/4score_font = pygame.font.Font(None, 36)score_text1 = score_font.render('Score: '+ str(score), True, (0, 0, 0))score_text2 = score_font.render('Speed: '+ str(speed), True, (0, 0, 0))text_rect1 = score_text1.get_rect()text_rect2 = score_text2.get_rect()text_rect1.topleft = [10, 10]text_rect2.topright = [630, 10]gamesurface.blit(score_text1, text_rect1)gamesurface.blit(score_text2, text_rect2)# 更新屏幕(因为分数或者速度及时变化得以屏幕所显改变)pygame.display.update()ticks = pygame.time.get_ticks()ftpsClock.tick(speed)if __name__ == "__main__":main()

对于类似的基础小游戏,可以使用不同的编程语言进行编写,首先确保代码完整性,基于完整性的基础山创造一些属于自己的个性化内容。

首先我们要知道我们要干什么怎么干,明确这些概念之后就理一下思路,着手考虑一下前后写什么,中间写什么。

分享一下我的心路历程以文本形式展示:

1.前期思考、准备部分
对于这类小游戏当我们第一次接触手机,也就是老版的诺基亚,当时这款游戏逐步成为日常娱乐必选,但是随着智能手机的普及以及互联网时代的到来,贪吃蛇也逐步进化,但是我们应该了解贪吃蛇的本质。
我们可以试着回忆一下贪吃蛇进入游戏之后的页面,比如先是条小蛇,它是类似于一个Python的列表,这个列表里边顺序可以没有规则,是显示长度len,然后随着随机生成一个点(有键值),通过控制方向键对蛇进行控制,使小蛇靠近该点最终对于该点的进行"收取"也就是整合,使得小蛇长度增长,随着小蛇身体的增长就是列表len长度边长,如果操作不慎会使得小蛇接触自己的身体或者四边窗口,这时记做小蛇"死亡"可以显示"game over"
第一步,小蛇出现
建立一个新框,确定窗口标识,给定一个窗口内的一个固定位置(x,y,z)假设小蛇出现在该点,确定小蛇形状:方块,小蛇头可以是列表,可随意添加元素,
第二步,出现点
该点可随机
第三步,移动小蛇
通过“w,a,s,d”或者“up,down,right,left”对小蛇进行移动,书写代码的时候可以试着按下某一个键直接执行不需要再enter确定,限制:小蛇不可反向移动
第四步,小蛇融合点
小蛇头部添加一个列表,对列表进行增加元素,随着小蛇步入该点该点的键值会进入列表内,使得len(列表)增加,从而让小蛇看着变长了
第五步,小蛇死亡
通过游戏过程我们知道,小蛇死亡会有四种情况,1、接触墙壁此时也是窗口四边缘,2、接触‘自己身体’,3、填满所创建的整个窗口,此时提示“game over”,4、当我们先按下‘up’键或者‘w’时下一步紧接着按了‘down’或‘s’键那就可以理解为小蛇接触自己的身体,死亡

细节:窗口黑底,小蛇白身,随机点(可多个)红色,蛇吃食物即列表融合元素记录,最后通过初始长度len和最终死亡长度len得出此局游戏获取的分数。小蛇头可以是列表,可随意添加元素。

以上所述均在同一个窗口执行

2.代码展示部分(上面的代码)

其中的背景音乐部分可以随便选一首,这里博主无法上传。

3.解释部分
① 我的作品是:贪吃蛇(以下简称蛇)
② 我实现的功能是:窗口内通过给定坐标先生成一个固定长度的蛇神、蛇头,然后随机生成一个树莓或者说一个坐标点,然后通过控制上下左右方向键或者w、a、s、d键对蛇进行方向的改变,每次改变方向之后就按照所改方向进行直线移动,在蛇头坐标点与随机生成树莓点进行重合时,判断此时蛇吃到食物,之后再随机生成食物,随着蛇吃到食物的的同时蛇身逐渐增长速度逐渐增加分数也随之增加,通过运行代码生成窗口这些东西都能直接看到。作品用到的核心是第三方库-pygame库、创建窗口、绘制及刷新pygame显示层、窗口内部显示分数和速度和屏幕的更新。(提示一下当我们用到第三方库时尽量去IDLE窗口键入"import 库名"进行检查,键入之后按下enter键出现库的版本号就是已安装此库否则就需要在连网状态下手动去命令窗口键入"pip install 库名"进行安装)
③ 作品特色之处:(部分去还原原始出现在"老年机"上面的贪吃蛇)对于贪吃蛇这款小游戏,我小时候是接触的比较多的,未普及智能手机之前可能就类似贪吃蛇这类的小游戏伴随我们童年,我印象中那时候的游戏并不像现在这么复杂多变,但是那就是那个时候的主流娱乐项目,包括推箱子、俄罗斯方块、连连看等。这款游戏的代码很开放,所以对于方向键的实现就很普遍相同了,这个作品的特色之处可能就只是速度随着蛇吃到食物开始加快(速度可调)和在窗口界面显示分数和速度,既视感带来的紧张和刺激随着可视的速度而增加,同时屏幕刷新使得分数显示让我们随时知道自己游戏的进行程度。最后就是背景音乐的出现(可改变),玩游戏吗就是放松娱乐消磨时间,我们可以调慢游戏速度的同时去听一首舒缓的歌或者调快的速度同时背景音乐改成节奏感快的歌曲让我们眼睛、耳朵、大脑三方面同时感受,更有助于体会游戏的乐趣。
④ 遇到的问题:很多但是好在都被解决了,比如为了使游戏速度加快改变原先套路加一个if判断语句,比如分数和速度在窗口显示和最后的更新屏幕的代码,也是在同学的帮助下得以完成。解决问题的方法一个就是不断地试错、查资料、同学讨论,其中同学讨论最为直接,因为写程序的过程中都有自己的见解以及遇到问题的解决方法,所以你遇到的不能解决的问题他可能就不是问题。还有就是我们查阅资料或者粘贴代码的时候一定要明白其中意思,不能只是"粘食",那样课程设计就违背了初衷。

已经接近此次分享结尾,希望大家有所收益,最后想说:多上手多思考,计算机行业天赋无从谈起,只有努力努力再努力,加油,共勉。

贪吃蛇小游戏(基于Python)相关推荐

  1. python 贪吃蛇小游戏代码_10分钟再用Python编写贪吃蛇小游戏

    Python编写贪吃蛇 前不久我们公众号发布了一篇C++编写贪吃蛇小游戏的推文,反响空前.看来大家对这类简单易上手小游戏还是很喜爱的. 恰逢2018年IEEE Spectrum编程语言排行榜新鲜出炉, ...

  2. Python 简单实现贪吃蛇小游戏

    文章目录 1. pygame库的简介2. pygame库的安装3. python代码实现贪吃蛇小游戏4. pyinstaller打包成exe 很多人学习python,不知道从何学起. 很多人学习pyt ...

  3. python快速实现简易贪吃蛇小游戏

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长.  贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式.赏金模 ...

  4. 用Python做贪吃蛇小游戏

    用Python做贪吃蛇小游戏 简介 引言 游戏预览 结构图 代码框架图 代码讲解 main主函数-开始工作 show_start_info()欢迎进入游戏 running_game-让我们开始游戏吧 ...

  5. 学生学python编程---实现贪吃蛇小游戏+源码

    学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...

  6. Python实现贪吃蛇小游戏(双人模式)

    这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...

  7. python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  8. python小游戏编程实例-10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    另外要注意:光理论是不够的.这里顺便总大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交 ...

  9. python编程小游戏-10分钟用Python编写一个贪吃蛇小游戏,简单

    贪吃蛇,大家应该都玩过.小编当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最 ...

  10. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

最新文章

  1. R语言使用ggpubr包可视化分组条形图(grouped bar plot)、并添加误差条(error bar、误差条显示平均值+/-sd)、添加分组填充色、添加jitter、自定义分组抖动数据点形状
  2. 初始化CISCO路由器和交换机密码
  3. php调用c windows,php:在WINDOWS中设置计划任务执行PHP文件_PHP教程
  4. 猴子吃桃问题(南阳ACM324)
  5. centos7安装最新版node
  6. springboot, thymeleaf 教你快速搭建网站
  7. Java项目构建管理Maven的安装与配置
  8. matlab求解含两个累加公式的方程,使用fsolve 函数求解含两个参数的多个方程问题,希望有会的人帮...
  9. LINQ 学习路程 -- 查询操作 ElementAt, ElementAtOrDefault
  10. 三个linux系统共存,修改默认启动
  11. android dp转px的公式_dp与px的转换对照表
  12. SEO优化之alt属性和title属性
  13. Call to a member function display() on a non-object。。。。
  14. Waited long enough for: ServiceRecord 问题解决
  15. 笔记本计算机声音小,笔记本电脑没声音小喇叭不见了怎么恢复电脑
  16. 基于LabVIEW的基带NRZ矩形波形产生模块以及二进制数字调制系统(2ASK、2FSK、2PSK)以及抗噪声分析(含工程源码、设计报告)
  17. openflow初学者入门笔记一(openflow 1.0 and openflow 1.3)
  18. 通过movie_id来查询数据库获取电影名字和平均得分
  19. 常见的树形结构(一)
  20. Java环境搭建及JAVA-jdk环境变量配置

热门文章

  1. 网络规划设计和具体实施
  2. Android手机avi转换为mp4手机,手机视频格式转换器(3gp mp4 avi converter)
  3. php mysql 连接池_php 如何实现 数据库 连接池
  4. AutoJs学习-QQ聊天机器人
  5. JConsole详解
  6. U盘防病毒从七方面做起
  7. 0基础小白,如何入门数学建模?
  8. windows - Hook技术介绍
  9. 安装MyEclipse10 并且破解(附带软件包)
  10. 计算机网络管理员操作技能考试试卷操作,计算机网络管理员高级工操作技能考核试卷(第一套)...