山河远阔,烟火人间,又一年,千里婵娟~

今天给大家带来的是给玉兔投喂月饼的小游戏。八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退、百事无忌、平安喜乐、万事胜意。提前祝大家中秋节快乐。

中秋节的起源

中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。

游戏设计

1、游戏背景

故事的开始,中秋佳节至,玉兔因为贪玩被赶下人间,抬头望向天际,总是不自觉的会想起苏轼的词:“但愿人久,千里共婵娟”。这是一年中,最温柔又最有诗意的节日,可惜玉兔与嫦娥今年不能相聚,但嫦娥为了不让玉兔饿肚子,在八月十五中秋节的晚上,嫦娥在月球为玉兔投食月饼……为了让玉兔吃到更多,嫦娥开启全民投食,只要给博主三连,就能给玉兔投食月饼啦!难道你忍心看到可爱的玉兔饿肚子吗?

2、功能设计

人物:玉兔使用鼠标来控制左右运动

月饼:随机从上界降落至下界,当碰到玉兔时,加10分,落到下界减5分。

月亮:随机从上界降落至下界,当碰到玉兔时,减5分,且血条减一格。

血条:HP

值为3格时,生命为满值,当碰到月亮时减1格。减为0格时,游戏结束。

开始:开始按钮,鼠标点击即开始游戏

重来:重来按钮,鼠标点击即重新开始

效果展示

兔兔是不是很可爱嘞!

代码素材

环境如下

python 3.8.0

pygame 2.1.0

代码

看看素材地址是否一致,不一致要改成素材本地的地址。

import pygame
import random
 
pygame.init()
sc = pygame.display.set_mode((600, 695))
pygame.display.set_caption("玉兔吃月饼——猿童学祝大家中秋节快乐!")
basket = pygame.image.load("pic/basket.png")
bj = pygame.image.load("pic/bj.jpg")
bomb = pygame.image.load("pic/bomb.png")
coin = pygame.image.load("pic/coin.png")
start = pygame.image.load("pic/start.jpg")
over = pygame.image.load("pic/over.jpg")
ihp = pygame.image.load("pic/hp.png")
btn_up = pygame.image.load("pic/btn_up.png")
btn_down = pygame.image.load("pic/btn_down.png")
bbtn_up = pygame.image.load("pic/bbtn_up.png")
bbtn_down = pygame.image.load("pic/bbtn_down.png")
word = "HP"
font = pygame.font.SysFont("", 32)
text = font.render(word, True, (75, 217, 65))
score = 0
text1 = font.render(str(score), True, (255, 255, 255))
bx = 0
lx, ly = [], []
fx, fy = [], []
speedy = 1
hp = 4
# 月饼生成的序列,通过序列可以源源不断生成月饼
for i in range(0, 4):
    tx = random.randint(0, 586)
    ty = (i - 1) * 150
    lx.append(tx)
    ly.append(ty)
 
# 月亮生成的序列
for i in range(0, 2):
    x = random.randint(0, 586)
    y = (i - 1) * 300
    fx.append(x)
    fy.append(y)
 
 
# 按钮类和按钮点击事件
class Button(object):
    def __init__(self, btn_up, btn_down, position):
        self.btn_up = btn_up
        self.btn_down = btn_down
        self.position = position
 
    def isOver(self):
        point_x, point_y = pygame.mouse.get_pos()
        x, y = self.position
        w, h = self.btn_down.get_size()
 
        in_x = x - w / 2 < point_x < x   w / 2
        in_y = y - h / 2 < point_y < y   h / 2
        return in_x and in_y
 
    def isPressed(self):
        if event.type == pygame.MOUSEBUTTONDOWN:
            point_x, point_y = pygame.mouse.get_pos()
            x, y = self.position
            w, h = self.btn_down.get_size()
            in_x = x - w / 2 < point_x < x   w / 2
            in_y = y - h / 2 < point_y < y   h / 2
            return True
 
    def render(self):
        w, h = self.btn_up.get_size()
        x, y = self.position
 
        if self.isOver():
            sc.blit(self.btn_down, (x - w / 2, y - h / 2))
        else:
            sc.blit(self.btn_up, (x - w / 2, y - h / 2))
 
 
button = Button(btn_up, btn_down, (288, 460))
 
bbutton = Button(bbtn_up, bbtn_down, (288, 460))
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    # 游戏开始界面
    sc.blit(start, (0, 0))
    bbutton.render()
    if bbutton.isPressed():
        hp = 3
        score = 0
        text1 = font.render(str(score), True, (255, 255, 255))
    # 进入游戏
    if hp > 0 and hp < 4 and score >= 0:
        sc.blit(bj, (0, 0))
        sc.blit(text, (10, 583))
        sc.blit(text1, (570, 570))
        sc.blit(basket, (bx, 540))
        # 难度变化
        if score <= 50:
            speedy = 0.4
        if score > 100:
            speedy = 0.8
        if score > 150:
            speedy = 1.2
        if score > 200:
            speedy = 1.6
        for i in range(len(lx)):
            sc.blit(coin, (lx[i], ly[i] - 600))
            ly[i]  = speedy
            if ly[i] > 610   600:
                ly[i] = 600
                lx[i] = random.randint(0, 540)
                score -= 5
                text1 = font.render(str(score), True, (255, 255, 255))
            # 玉兔的宽62 高 48
            # 碰撞判断
            if lx[i]   24 > bx and \
                    lx[i]   24 < bx   62 and \
                    ly[i] >= 1120 and \
                    ly[i] <= 1140:
                ly[i] = 600
                lx[i] = random.randint(0, 586)
                score  = 10
                text1 = font.render(str(score), True, (255, 255, 255))
        for i in range(len(fx)):
            sc.blit(bomb, (fx[i], fy[i] - 600))
            fy[i]  = speedy
            if fy[i] > 610   600:
                fy[i] = 600
                fx[i] = random.randint(0, 545)
 
            if fx[i]   24 > bx and \
                    fx[i]   24 < bx   62 and \
                    fy[i] >= 1120 and \
                    fy[i] <= 1140:
                hp -= 1
                fy[i] = 600
                fx[i] = random.randint(0, 586)
 
        # 篮子跟随鼠标运动
        if event.type == pygame.MOUSEMOTION:
            mx, my = pygame.mouse.get_pos()
            bx = mx - 24
        if bx < 0:
            bx = 0
        if bx > 610 - 62:
            bx = 548
        # 通过键盘控制篮子
        keys = pygame.key.get_pressed()
        if keys[pygame.K_a] or \
                keys[pygame.K_RIGHT]:
            bx  = 5
        if keys[pygame.K_d] or \
                keys[pygame.K_LEFT]:
            bx  = -5
        for i in range(0, hp):
            sc.blit(ihp, (22 * i   40, 585))
 
    # 重新开始游戏
    if hp == 0 or score < 0:
        # 重新初始化游戏
        bx = 0
        speedy = 1
        # 月饼生成的序列
        for i in range(len(lx)):
            lx[i] = random.randint(0, 586)
            ly[i] = (i - 1) * 150
 
        # 月亮生成的序列
        for i in range(len(fx)):
            fx[i] = random.randint(0, 586)
            fy[i] = (i - 1) * 300
        sc.blit(over, (0, 0))
        button.render()
        # 点击按钮后重新开始游戏
        if button.isPressed():
            hp = 3
            score = 0
            text1 = font.render(str(score), True, (255, 255, 255))
    pygame.display.update()

素材

框框里的是图片的名字,可以在网上找自己喜欢的素材替换,名字一致即可,下面有一些也提供了多个选择。

素材放在pic文件夹中,有如下材料:

basket.png

bj.jpg

bomb.png

coin.png

start.jpg

over.jpg

这里不想找了,所以就一样了,大家可以更换成自己喜欢的背景。

hp.png

btn_up.png

btn_down.png

bbtn_up.png

bbtn_down.png

到此这篇关于基于Python编写一个中秋节嫦娥投食小游戏的文章就介绍到这了,更多相关Python嫦娥投食游戏内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

基于Python编写一个中秋节嫦娥投食小游戏的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部