猫史档案馆


【Python作品分享】新的作品【作业帖】

用户:柴智翔_嘉兴编程少年柴智翔_嘉兴编程少年查看:0 回复:0 评论:0 创建时间:2020-03-04T15:48:08


【作品展示】

center_image

 

【作品介绍】

 

【作品源代码】

import pygame
import sys
import random
import time
pygame.init()
screen = pygame.display.set_mode((600, 800))
pygame.display.set_caption("打字游戏")
myFont = pygame.font.SysFont(None, 80)
myFont2 = pygame.font.SysFont("kaiti", 20)
# myFont2 = pygame.font.SysFont("stxihei",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  # 字母下落速度
planeX = 400  # hero位置
planeY = 0
yellow = (255, 255, 0)

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

#添加图片
bgPic = pygame.image.load("bg.png")
hero = pygame.image.load("hero.png")
enemy = pygame.image.load("enemy.png")
# 添加爆照效果图片
boom1 = pygame.image.load("boom1.png")
boom2 = pygame.image.load("boom2.png")
boom3 = pygame.image.load("boom3.png")
boom = [boom1, boom2, boom3]

# 增加音效
#sound1 = pygame.mixer.Sound("boom.wav")
#pygame.mixer.music.load("bgmusic.wav")
#pygame.mixer.music.play(-1)

index = 3        # 索引值
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:
            sound1.play()
            # 统计按键总数
            clickNum = clickNum + 1
            for letter in letterWait:
                if event.key == ord(letter["word"]):
                    # 消除时获取字母的位置
                    planeX = letter['x']
                    planeY = letter['y']
                    letterWait.remove(letter)
                    score = score + 1
                    scoreText = "当前分数:" + str(score)
                    index = 0

                    # 爆炸效果
                    # screen.blit(boom1, (letter['x']-60, letter['y']-60))
                    # pygame.display.update()
                    # time.sleep(0.05)
                    # screen.blit(boom2, (letter['x']-60, letter['y']-60))
                    # pygame.display.update()
                    # time.sleep(0.05)
                    # screen.blit(boom3, (letter['x']-60, letter['y']-60))
                    # pygame.display.update()
                    # time.sleep(0.05)

    # 生成字母
    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
        letterDict = {"word": l1, "color": c1, "x": x1, "y": y1}
        letterWait.append(letterDict)

    # 绘制背景和我方战舰
    screen.blit(bgPic, (0, 0))
    screen.blit(hero, (planeX-100, 600))

    # 爆照效果(连续三次)
    if index < 3:
        screen.blit(boom[index], (planeX-60, planeY-60))
        time.sleep(0.05)
        index += 1

    # 绘制字母
    for letter in letterWait:
        x2 = letter["x"]
        y2 = letter["y"]
        l2 = letter["word"]
        c2 = letter["color"]
        textImage = myFont.render(l2, True, c2)
        # 绘制字母的时候也绘制对应的图片
        screen.blit(enemy, (x2 - 60, y2 - 80))
        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, (400, 670))
    # 显示剩余机会
    chanceShow = myFont2.render(chanceText, True, yellow)
    screen.blit(chanceShow, (400, 700))
    # 显示关卡数
    levelShow = myFont2.render(levelText, True, yellow)
    screen.blit(levelShow, (400, 730))

    # 显示正确率
    if clickNum > 0:
        rate = score/clickNum
        a = round(rate*100, 2)
        rateTxt = "正确率:"+str(a)+"%"
    rateShow = myFont2.render(rateTxt, True, yellow)
    screen.blit(rateShow, (400, 760))

    pygame.display.update()
    time.sleep(0.02)

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页