基于Python编写一个中秋节嫦娥投食小游戏

作者:轻松学Python 时间:2022-12-27 10:46:34 

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

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

中秋节的起源

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

游戏设计

1、游戏背景

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

2、功能设计

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

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

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

血条:HP

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

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

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

效果展示

基于Python编写一个中秋节嫦娥投食小游戏

兔兔是不是很可爱嘞!

代码素材

环境如下

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

基于Python编写一个中秋节嫦娥投食小游戏

基于Python编写一个中秋节嫦娥投食小游戏

bj.jpg

基于Python编写一个中秋节嫦娥投食小游戏

bomb.png

基于Python编写一个中秋节嫦娥投食小游戏

coin.png

基于Python编写一个中秋节嫦娥投食小游戏

基于Python编写一个中秋节嫦娥投食小游戏

start.jpg

基于Python编写一个中秋节嫦娥投食小游戏

over.jpg

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

基于Python编写一个中秋节嫦娥投食小游戏

hp.png

基于Python编写一个中秋节嫦娥投食小游戏

btn_up.png

基于Python编写一个中秋节嫦娥投食小游戏

btn_down.png

基于Python编写一个中秋节嫦娥投食小游戏

bbtn_up.png

基于Python编写一个中秋节嫦娥投食小游戏

bbtn_down.png

基于Python编写一个中秋节嫦娥投食小游戏

来源:https://blog.csdn.net/ooowwq/article/details/126652638

标签:Python,中秋,游戏
0
投稿

猜你喜欢

  • ROS机器人底盘坐标像素变换操作方法

    2023-11-08 20:15:43
  • php curl选项列表(超详细)

    2023-07-18 15:19:32
  • Python函数参数基础介绍及示例

    2021-02-03 03:11:04
  • Python中shutil模块的常用文件操作函数用法示例

    2022-10-16 07:10:08
  • 18个Python脚本可加速你的编码速度(提示和技巧)

    2022-11-09 16:54:34
  • Javascript 动画初探(原理)

    2009-02-06 15:53:00
  • Python合并多个装饰器小技巧

    2022-05-31 04:51:45
  • python3图片转换二进制存入mysql

    2023-05-18 07:06:50
  • 打包发布Python模块的方法详解

    2021-04-03 06:10:56
  • 讲解如何利用 Python完成 Saga 分布式事务

    2021-08-19 00:03:48
  • numpy拼接矩阵的实现

    2021-02-09 06:35:07
  • Python全景系列之数据类型大盘点

    2021-01-10 15:29:19
  • Python检测和防御DOS攻击的最简单方法

    2022-04-12 17:23:19
  • Laravel配置全局公共函数的方法步骤

    2023-11-15 01:20:42
  • 写给新手同学的vuex快速上手指北小结

    2024-04-27 16:03:33
  • python关键字and和or用法实例

    2023-12-19 20:07:40
  • win10从零安装配置pytorch全过程图文详解

    2022-07-01 20:54:55
  • 详解Python中Sync与Async执行速度快慢对比

    2023-02-06 13:26:45
  • SqlServer备份数据库的4种方式介绍

    2024-01-17 09:58:15
  • Python 实现数据库更新脚本的生成方法

    2024-01-15 22:35:43
  • asp之家 网络编程 m.aspxhome.com