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

这篇具有很好参考价值的文章主要介绍了中秋假期,回不了家的程序员,竟然用Python做了这件事...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

文 | 乌鸦

来源:Python 技术「ID: pythonall」

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

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

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

首先来看看最终的效果:

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

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

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

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

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

首先我们引入资源,完成初始化,之后就可以开始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 = 3
        score = 0
        score_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 - 75
  if now_pos < 0:
      now_pos = 0
  if 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] += speed1
      if tar_pos[i][1] > 1600:
          tar_pos[i][1] = 800
          tar_pos[i][0] = random.randint(50, 550)
          score -= 2
          score_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] = 800
          tar_pos[i][0] = random.randint(50, 550)
          score += 10
          score_num = font.render(str(score), True, (255, 255, 255))

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

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

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

# 控制树枝密度
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] += speed2
            if wro_pos[i][1] > 1600:
                wro_pos[i][1] = 800
                wro_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]= 800
                wro_pos[i][0] = random.randint(50, 550)
                time -= 1
                time_num = font.render(str(time), True, (255, 255, 255))

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

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

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

# 重新开始游戏
    if time == 0 or score < 0:
        # 初始化游戏
        now_pos = 0
        speed = 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) * 300
        end_text = font.render(end_word.format(score), True, (255, 255, 255))
        screen.blit(bg_menu, (0, 0))
        screen.blit(end_text, (50, 220))

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

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

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

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

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

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

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

代码获取方式

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

中秋假期,回不了家的程序员,竟然用Python做了这件事...文章来源地址https://www.toymoban.com/news/detail-403606.html

到了这里,关于中秋假期,回不了家的程序员,竟然用Python做了这件事...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [学习笔记]黑马程序员python教程

    [学习笔记]黑马程序员python教程

    1.9.1异常的捕获 1.9.1.1 为什么要捕获异常 1.9.1.2 捕获常规的异常 1.9.1.3 捕获指定的异常 e是接受异常信息的变量 1.9.1.4 捕获多个异常 1.9.1.5 捕获全部异常 1.9.1.6 异常的else 1.9.1.7 异常的finally 1.9.2 异常的传递 如果异常是在某一层产生,但是没有被catch,那么会继续往上层抛出,此

    2024年02月07日
    浏览(54)
  • Python黑马程序员(Spark实战)笔记

    Python黑马程序员(Spark实战)笔记

     pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark 注意:字符串返回的是[\\\'a\\\',\\\'b\\\',\\\'c\\\',\\\'d\\\',\\\'e\\\',\\\'f\\\',\\\'g\\\']   字典返回的是[\\\'key1\\\',\\\'key2\\\']   读取hello.txt的内容: 注意: 如果没有添加上行代码程序会报出错误! Caused by: org.apache.spark.SparkException: Python worker failed to connect back.  解释器的位置

    2024年02月05日
    浏览(43)
  • Flink原理解析,Python程序员必看

    Flink原理解析,Python程序员必看

    容错机制 ​ 分布式环境下的流式处理平台相对于批处理平台而言,一个非常重要的问题是如何 保证分布式计算节点在发生故障并恢复后最终的计算结果是正确的 。在批处理的模式下,数据有界,在任务开始前我们就可以得到需要计算的所有数据,如果节点出错,最坏的情况

    2024年04月09日
    浏览(9)
  • python算法指南程序员经典,python算法教程pdf百度云

    python算法指南程序员经典,python算法教程pdf百度云

    大家好,小编来为大家解答以下问题,你也能看懂的python算法书 pdf,python算法教程这本书怎么样,现在让我们一起来看看吧!   给大家带来的一篇关于算法相关的电子书资源,介绍了关于算法、详解、算法基础方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大

    2024年02月14日
    浏览(10)
  • python程序员的浪漫-千行生日祝福代码

    📆 Date: 2022年12月16日修改 🎬 Author: 小 y 同 学 📃 Classify: 花里胡哨区 🔖 Language : Python 🍀 花哨简介     使用python的turtle库进行绘图,先是绘制“一只大熊”送上祝福,随后绘制三层蛋糕送上浪漫!近千行的生日祝福代码还不赶快去试试!     小提示:python3的tu

    2024年02月05日
    浏览(10)
  • Python制作爱心跳动代码,你也是天才程序员

    Python制作爱心跳动代码,你也是天才程序员

    前端时间电视剧《点燃我,温暖你》正在热播中,里面的天才程序员李峋制作的爱心跳动代码是不是震撼了你的心,今天我们用Python来尝试一下制作爱心跳动代码吧! 怎么说呢,用这个表白也可以的,万一她也看这个剧呢,万一就成了呢 哈哈 冲啊,兄弟们 okok 话不多说,现

    2024年02月09日
    浏览(10)
  • 井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条线的人为胜利方。如图1所示为画圈的一方为胜利者。   图1 井字棋 本实

    2024年02月04日
    浏览(59)
  • 刮刮乐--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

    刮刮乐的玩法多种多样,彩民只要刮去刮刮乐上的银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖区,每个兑奖区对应着不同的获奖信息,包括“一等奖”、“二等奖”、“三等奖”和“谢谢惠顾”。假设现在有一张刮刮乐,该卡片上面共有8个刮奖区,每个刮奖区对应

    2024年02月06日
    浏览(205)
  • Python程序员常用的IDE和其它开发工具

    “工欲善其事,必先利其器”,如果说 编程 是程序员的手艺,那么IDE就是程序员的吃饭家伙了。 IDE的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系列周边组件和附属功能。一个优秀的IDE,最重要的就是在普通文本编辑之外,提供

    2024年01月18日
    浏览(11)
  • 【python快速编程入门(第二版)黑马程序员课后编程题】

    第二章  python基础 1、课本33页练习:求圆的半径和面积; 用户输入圆的半径,输出圆的直径和面积。面积公式:s=π*r*r 2、#课本33页练习:计算运输次数; #煤场有29.5t,4t运了3次,其余用2.5t车运,还需几次才能运完 第三章  流程控制 1、#课本44页练习:用while循环输出100以内

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包