猫史档案馆


【Python作品分享】打字切水果【作品秀】

用户:赛罗Wuvh赛罗Wuvh查看:0 回复:0 评论:0 创建时间:2021-12-04T16:49:28


【作品展示】

center_image

 

【作品介绍】

嘿嘿嘿

 

【作品源代码】

import pygame
import sys
import random
import time

pygame.init()
screen = pygame.display.set_mode((600, 700))
pygame.display.set_caption("水果忍者")
myFont = pygame.font.SysFont(None, 80)
myFont2 = pygame.font.SysFont("kaiti", 20)
# myFont2 = pygame.font.SysFont("kaittf",20)    # mac系统使用
letterList = ["a", "b", "c", "d", "e", "f", "g", "h",
              "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
letterWait = []
score = 0  # 获得分数
scoreText = "当前分数:0"
chance = 5  # 5次错过字母机会
chanceText = "剩余机会:5"
level = 0
levelText = "当前关卡:1"  # 设置关卡显示内容
letterSpeed = 1  # 字母下落速度
fruitX = 400  # hero位置
fruitY = 0
yellow = (255, 255, 0)

rate = 0  # 正确率
rateTxt = "正确率:"
clickNum = 0  # 点击次数

# 添加图片
bgPic = pygame.image.load("bg.png")
boom1 = pygame.image.load("boom1.png")
boom2 = pygame.image.load("boom2.png")
boom3 = pygame.image.load("boom3.png")
boom = [boom1, boom2, boom3]

# 添加水果图片
fruit1 = pygame.image.load("fruit1.png")
fruit2 = pygame.image.load("fruit2.png")
fruit3 = pygame.image.load("fruit3.png")
fruit4 = pygame.image.load("fruit4.png")
fruit5 = pygame.image.load("fruit5.png")
fruit = [fruit1, fruit2, fruit3, fruit4, fruit5]

# 增加音效
sound1 = pygame.mixer.Sound("boom.wav")
pygame.mixer.music.load("bgmusic.wav")
pygame.mixer.music.play(-1)
t1 = time.time()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            # ============================================
            # 补充61-62行代码,完成音效播放、统计按键总次数clickNum累加1
            sound1.play()
            clickNum = clickNum + 1
            # ============================================
            for letter in letterWait:
                if event.key == ord(letter["word"]):
                    # 消除时获取字母的位置
                    fruitX = letter['x']
                    fruitY = letter['y']
                    letterWait.remove(letter)
                    score = score + 1
                    scoreText = "当前分数:" + str(score)

                    # ===========================================
                    # 补充78-83行代码,实现刀的完整效果
                    screen.blit(boom1, (fruitX-60, fruitY-60))
                    pygame.display.update()
                    time.sleep(0.01)
                    screen.blit(boom2, (fruitX-60, fruitY-60))
                    pygame.display.update()
                    time.sleep(0.01)
                    screen.blit(boom3, (fruitX-60, fruitY-60))
                    pygame.display.update()
                    time.sleep(0.01)
                    # ============================================

    # 生成字母
    t2 = time.time()
    if t2 - 2 > t1:
        t1 = t2
        l1 = random.choice(letterList)
        c1 = (random.randint(0, 255), random.randint(
            0, 255), random.randint(0, 150))  # 颜色随机
        x1 = random.randint(50, 550)  # x坐标从左右边距各100之间随机
        y1 = 10
        index1 = random.randint(0, 4)
        letterDict = {"word": l1, "color": c1,
                      "x": x1, "y": y1, "index1": index1}
        letterWait.append(letterDict)

    # 绘制背景
    screen.blit(bgPic, (0, 0))

    # 绘制字母
    for letter in letterWait:
        x2 = letter["x"]
        y2 = letter["y"]
        l2 = letter["word"]
        c2 = letter["color"]
        index1 = letter["index1"]
        textImage = myFont.render(l2, True, c2)
        # 绘制字母的时候也绘制对应的图片
        screen.blit(fruit[index1], (x2 - 60, y2 - 60))
        screen.blit(textImage, (x2, y2))

    # 字母下移
    for letter in letterWait:
        letter["y"] = letter["y"] + letterSpeed
        if letter["y"] > 800:
            letterWait.remove(letter)
            chance = chance - 1
            chanceText = "剩余机会:" + str(chance)
            # 退出
            if chance <= 0:
                print("机会耗尽,886!最后得分", score)
                pygame.quit()
                sys.exit()

    # 难度晋级
    if score % 10 == 0:
        level = score // 10 + 1
        letterSpeed = level
        levelText = "当前关卡:" + str(level)
    # 显示得分
    scoreShow = myFont2.render(scoreText, True, yellow)
    screen.blit(scoreShow, (450, 30))
    # 显示剩余机会
    chanceShow = myFont2.render(chanceText, True, yellow)
    screen.blit(chanceShow, (450, 60))
    # 显示关卡数
    levelShow = myFont2.render(levelText, True, yellow)
    screen.blit(levelShow, (450, 90))

    # ==============================================
    # 补充143-145行代码,计算并显示正确率
    if clickNum > 0:
        rate = score / clickNum * 100
        rate = round(rate, 2)
        rateTxt = "正确率:" + str(rate) + "%"
    rateShow = myFont2.render(rateTxt, True, yellow)
    screen.blit(rateShow, (450, 120))
    # ==============================================
    pygame.display.update()
    time.sleep(0.02)

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页