文 | 乌鸦

来源:Python 技术「ID: pythonall」

明月几时有,难得的中秋假期,很多码农兄弟经历疫情后终于有机会和家人团聚,也有不少兄弟因为各种原因在他乡度过假期。

无论是怎样的情感,程序员总有自己特别的表达方式。今天就让我们花上几分钟时间用Python写一个小游戏,给中秋假期增加一点不一样的趣味。

首先来看看最终的效果:

游戏所需的所有素材都帮大家整理好了,公众号后台回复“乌鸦”领取。

这次我们要用到pygame这个库,这种简单的玩法用其他语言实现起来也很容易,但大多都需要一些框架的辅助,有一定的学习成本,而pygame就是为这种小游戏场景设计的,使用门槛很薄,相信只要看完这篇文章,你也能学会如何实现一个自己的玩法。

首先我们引入资源,完成初始化,之后就可以开始Coding啦。

# 导入所需模块
import random
import pygame# pygame初始化
pygame.init()# 设置主屏窗口
screen = pygame.display.set_mode((600, 800))# 设置游戏名称
pygame.display.set_caption("明月几时有")font = pygame.font.SysFont("Microsoft YaHei", 40)

我们的玩法设计是移动鼠标,操作屏幕下方的嫦娥接住月饼,所以首先定义同屏中月饼的数量:这里设计为x轴坐标随机,y轴坐标按规律值间隔,以免大量月饼黏在一起出现。

# 控制月饼密度
tar_pos = []for i in range(0, 8):tar_pos.append([random.randint(50, 550),(i - 1) * 100])

然后开始定义游戏的主循环。主循环是在游戏运行的整个过程中一直运行的循环,所有的监听,判断和处理都应当编写进去。

while True:for event in pygame.event.get():if event.type == pygame.QUIT:exit()# 初始菜单screen.blit(bg_menu, (0, 0))screen.blit(word_menu, (0, -70))button.show()if button.click():time = 3score = 0score_num = font.render(str(score), True, (255, 255, 255))time_num = font.render(str(time), True, (255, 255, 255))

这里需要注意的是,pygame中的坐标轴是以左上角为原点,X轴向左递增,Y轴向下递增的,这点可能和习惯性认知不太一样,切记不要闹出乌龙,否则会找不到月饼在哪儿。

然后是运动的处理部分,这里首先要监听鼠标的移动,然后让人物跟随鼠标X轴运动,并加上窗口边界的判断。

# 角色移动if event.type == pygame.MOUSEMOTION:move_x, move_y = pygame.mouse.get_pos()now_pos = move_x - 75if now_pos < 0:now_pos = 0if now_pos > 600:now_pos = 525

然后是游戏中最重要的部分——接到月饼的判断了,这里首先使用最开始创建的月饼位置,通过Y轴坐标值的增加,实现下落的过程。

这里注意,之前创建月饼位置的时候,为了方便数值处理,原本的Y轴值减掉窗口高度后,才是月饼在Y轴的实际坐标,这里的逻辑大家可以根据自己的思维习惯修改。

当月饼的xy轴左边均在人物的坐标范围内,或者月饼掉落出屏幕,即没有被接到时,重置Y轴坐标到窗口顶部,并重新随机x轴坐标,通过这种方式使得月饼不断出现。

for i in range(len(tar_pos)):screen.blit(pygame.transform.scale(target, (50, 50)), (tar_pos[i][0], tar_pos[i][1] - 800))tar_pos[i][1] += speed1if tar_pos[i][1] > 1600:tar_pos[i][1] = 800tar_pos[i][0] = random.randint(50, 550)score -= 2score_num = font.render(str(score), True, (255, 255, 255))# 边界判定if tar_pos[i][0] + 50 > now_pos and tar_pos[i][0]  < now_pos + 75 and tar_pos[i][1] >= 1300 and tar_pos[i][1] <= 1500:tar_pos[i][1] = 800tar_pos[i][0] = random.randint(50, 550)score += 10score_num = font.render(str(score), True, (255, 255, 255))

做到这里,游戏的基本玩法已经完成了————但这样还称不上一个游戏,因为没有限制,也没有挑战。所以我们还需要给游戏加入一些其他的元素。

比如除了月饼之外,给玩家增加树枝的掉落,需要在抢月饼的同时躲避;同时增加生命值限制,如果多次碰到树枝则游戏结束:

# 控制树枝密度
for i in range(0, 2):wro_pos.append([random.randint(50, 550),(i - 1) * 300])while True:# 开始游戏if time > 0 and time < 4 and score >= 0:...# 树枝运动路线for i in range(len(wro_pos)):screen.blit(pygame.transform.scale(wrong, (50, 50)), (wro_pos[i][0], wro_pos[i][1] - 800))wro_pos[i][1] += speed2if wro_pos[i][1] > 1600:wro_pos[i][1] = 800wro_pos[i][0] = random.randint(50, 550)# 边界判定if wro_pos[i][0] + 50 > now_pos and wro_pos[i][0] < now_pos + 75 and wro_pos[i][1] >= 1300 and wro_pos[i][1] <= 1500:wro_pos[i][1]= 800wro_pos[i][0] = random.randint(50, 550)time -= 1time_num = font.render(str(time), True, (255, 255, 255))

仅仅是躲避很容易让人感到厌倦,所以我们可以加入一个难度变化,让节奏不断变快。随着分数的增加,下落的速度会越来越快。

# 速度变化if score <= 30:speed1 = 0.8speed2 = 1.2elif score <= 60:speed1 = 1speed2 = 1.5elif score <= 90:...

至此游戏的整体玩法已经成型了,最后再在结束页面加一个分数展示,整个流程就比较的完整了~

# 重新开始游戏if time == 0 or score < 0:# 初始化游戏now_pos = 0speed = 1# 月饼运动路线for i in range(len(tar_pos)):tar_pos[i][0] = random.randint(50, 550)tar_pos[i][1] = (i - 1) * 100# 树枝运动路线for i in range(len(wro_pos)):wro_pos[i][0] = random.randint(50, 550)wro_pos[i][1] = (i - 1) * 300end_text = font.render(end_word.format(score), True, (255, 255, 255))screen.blit(bg_menu, (0, 0))screen.blit(end_text, (50, 220))

至此这个抢月饼的游戏就完成了,文章篇幅有限,我已经将完整的源码和游戏素材上传,大家可以在公众号后台回复“乌鸦”获取下载链接,直接在本地运行体验。

我自己玩了几次,不得不说到后面还是需要眼疾手快的,一番操作之后,我拿到了这样的分数~你们拿到了多少分呢?

最后祝大家中秋假期愉快,生活幸福美满~!

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式】

识别文末二维码,回复:乌鸦

中秋假期,回不了家的程序员,竟然用Python做了这件事...相关推荐

  1. 程序员可以在周末做的 8 件事

    转自:http://www.runoob.com/w3cnote/8-things-programmers-can-do-at-weekends.html 在过去的几十年里已经有许多国家有一二天的周末 ...

  2. 程序员可以在周末做的8件事

    本文转载自 IT江湖,原文链接:Click me,译文链接:Click me 在过去的几十年里已经有许多国家有一二天的周末.周末是拔掉的日常工作得到充电的重要时刻.他们也提供了更深入地思考事情的好机会 ...

  3. 程序员在周末可以做的8件事

    在过去的几十年,许多国家已经采取了为期两天的周末.周末是脱离朝九晚五的工作环境并可以为自己充充电的一个重要的时间.他们也是一个很好的机会来更深刻地思考一些事情.跟他职业相比,程序员(开发者或软件工程师 ...

  4. 程序员2018年应该做的8件事,别再等到中年危机了~ 莫等闲秃了少年头。

    2018年过去三个月了,你给自己定个小目标没?不说赚它几个亿,以下8件都值得我们每个程序员去做. 1.学习一门新的不同风格的编程语言 这是很需要的一件事,因为如果你只了解一种语言,它就会局限你解决问题 ...

  5. 傲慢与偏见——程序员想让HR知道的七件事

    傲慢与偏见 --程序员想让HR知道的七件事 一切都是从一次不成功的电话面试开始的.正在学车的我刚刚通过了桩考,心情不错,正在大厅里悠哉游哉地等着刷卡.忽然一个陌生的电话打进来,对面介绍说是一家S开头的 ...

  6. 转行程序员?你可能忽略了一件事。

    程序 = 数据结构 + 算法 --图灵奖得主,计算机科学家N.Wirth(沃斯) 作为程序员,我们做机器学习也好,做python开发也好,java开发也好,有一种对所有程序员无一例外的刚需 -- 算法 ...

  7. OSChina 周五乱弹 ——程序员竟然对服务员做了这样的事情!!!

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @挖红薯 :分享中島みゆき的单曲<やまねこ> <やまね ...

  8. 转行做程序员之前你应该考虑的三件事

    2013-2014年间,全世界吹起一阵写代码的风潮,各大媒体疯狂报导,鼓吹年轻人不管所学为何,一定要学写程序.时不时就会看到「程序员是最有钱途的工作之一!」或者「连奥巴马都开始写代码,你能不开始吗?」 ...

  9. 程序员刚入职很痛苦_程序员做梦都会笑醒的10件事

    最近两年,996.内卷.青年秃头.中年失业-已经成为程序员以及广大"打工人"普遍关丧心的问题.但就像鲁迅所说(并没有):今年可能是未来十年中最好的一年. 为了更好的面对" ...

最新文章

  1. 1067: [SCOI2007]降雨量 - BZOJ
  2. 02 jmeter 简单发送http请求
  3. 20135115臧文君---实验2
  4. Dubbo服务治理(一):限流策略
  5. GDB 调试器使用手册
  6. 腾讯云服务器利用镜像部署WordPress个人网站
  7. 正在存储windows支持软件_ibm/lenovoDS3500扩展柜存储管理软件-北京瑞腾世纪科技有限公司...
  8. 上海证券综合指数昨天成功击破1000点
  9. java数组逆序_Java 数组的排序、逆序
  10. C# Excel命名区域(一)-创建命名区域
  11. oracle 修改lsnrctl,Oracle中 lsnrctl命令使用总结(推荐)
  12. Randy Pausch_卡内基梅隆大学演讲--真正实现你的梦想
  13. 用Matlab画散点图
  14. 云服务器搭建好,出现 拒绝了我们的连接请求。
  15. 安全协议设计与分析-32学时 考试复习
  16. 给你100万条数据的一张表,你将如何查询优化?
  17. CDS — 数据管理分析平台
  18. 微信公众号 - 网页服务 - 分享接口
  19. Ajax页面缓存问题分析与解决办法
  20. css自定义字体font-face的兼容和使用

热门文章

  1. obs可以装手机吗?_iphonexs max可以装两个微信吗
  2. IOS几种常见的实现扫描、生成二维码的方式(一、使用ZBar SDK)
  3. Bert时代的创新:Bert在NLP各领域的应用进展 | 技术头条
  4. 百度LSS视频直播Android版Demo详细注释
  5. 高音质高性价比蓝牙音箱解决方案
  6. 小学数学学习的思想方法
  7. python房价_用python进行房价预测
  8. 手表怎么升级鸿蒙系统,华为手表watch3将搭载鸿蒙系统,你关注的升级点都在这!...
  9. oracle 多值更新,oracle 同时更新(update)多个字段多个值
  10. 关于matplotlib下载和使用的tips