当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 游戏设计 1、游戏背景 2、功能设计 效果展示 代码素材 代码 素材 山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏。八月十五中秋夜晚,让
目录
  • 游戏设计
    • 1、游戏背景
    • 2、功能设计
  • 效果展示
    • 代码素材
      • 代码
      • 素材

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

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

    中秋节的起源

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

    游戏设计

    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嫦娥投食游戏内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    上一篇:Python三百行代码实现飞机大战
    下一篇:没有了
    网友评论