pygame 捡金币小游戏

import pygame
import random
import time

MAIN = True


def show_score():
    num = str(SCORE)
    x = 0
    y = 0
    for i in num:
        i = int(i)
        screen.blit(number_list[i], (x, y))
        x += 20


def manage():
    global SCORE
    global BLOOD
    for i in range(NUMBER):
        if (golds[i][0] >= RELX_X and golds[i][0] <= RELX_X + relx_wide) or (
                golds[i][0] + gold_wide >= RELX_X and golds[i][0] + gold_wide <= RELX_X + relx_wide):
            if (golds[i][1] >= RELX_Y and golds[i][1] <= RELX_Y + relx_high) or (
                    golds[i][1] + gold_high >= RELX_Y and golds[i][1] + gold_high <= RELX_Y + relx_high):
                SCORE += seeps[i]
                init_gold(i)
    for i in range(command()):
        if (booms[i][0] >= RELX_X and booms[i][0] <= RELX_X + relx_wide) or (
                booms[i][0] + BOOM_SIDE >= RELX_X and booms[i][0] + BOOM_SIDE <= RELX_X + relx_wide):
            if (booms[i][1] >= RELX_Y and booms[i][1] <= RELX_Y + relx_high) or (
                    booms[i][1] + BOOM_SIDE >= RELX_Y and booms[i][1] + BOOM_SIDE <= RELX_Y + relx_high):
                BLOOD -= 1
                init_boom(i)

    if SCORE >= 500:
        global blood_xy
        x, y = blood_xy
        if (x >= RELX_X and x <= RELX_X + relx_wide) or (
                x + BLOOD_SIDE >= RELX_X and x + BLOOD_SIDE <= RELX_X + relx_wide):
            if (y >= RELX_Y and y <= RELX_Y + relx_high) or (
                    y + BLOOD_SIDE >= RELX_Y and y + BLOOD_SIDE <= RELX_Y + relx_high):
                BLOOD += 1
                x = random.randint(0, wide - BLOOD_SIDE)
                y = random.randint(-100, -BLOOD_SIDE)
                blood_xy = (x, y)


def show_hp():
    x = wide - 20
    y = 0
    for i in range(BLOOD):
        screen.blit(blood, (x, y))
        if x - 20 <= 400:
            x = wide - 20
            y += 20
        else:
            x -= 20


def relx_move():
    if STAND:
        if DIRECTION:
            screen.blit(relx_right, (RELX_X, RELX_Y))
        else:
            screen.blit(relx_left, (RELX_X, RELX_Y))
    else:
        if DIRECTION:
            if RIGHT:
                screen.blit(right_right, (RELX_X, RELX_Y))
            else:
                screen.blit(right_left, (RELX_X, RELX_Y))
        else:
            if LEFT:
                screen.blit(left_right, (RELX_X, RELX_Y))
            else:
                screen.blit(left_left, (RELX_X, RELX_Y))


def command():
    num = 0
    times = SCORE / 100
    if times > NUMBER_BOOMS:
        times = NUMBER_BOOMS
    num += int(times)
    return num


def show_clock():
    global TIME, START_TIME
    x = wide / 2
    y = 0
    if TIME >= 100:
        number = int(TIME / 100)
        number = str(number)
        for i in number:
            i = int(i)
            a = number_list[i]
            a = pygame.transform.scale(a, (10, 10))
            screen.blit(a, (x, y))
            x += 10
    c = pygame.time.get_ticks()
    if c / 10000 >= START_TIME:
        TIME += 1
        START_TIME = c / 10000


def judge():
    keys = True
    if DIRECTION:
        if (RELX_X + SEEP) + relx_wide >= wide:
            keys = False
    else:
        if RELX_X - SEEP <= 0:
            keys = False
    return keys


def main_game():
    updates()
    if DIFFICULTY_MODE:
        show_hp()
    relx_move()
    manage()
    show_score()
    show_clock()
    pygame.display.update()
    CLOCK.tick(60)


def init_gold(i):
    golds[i][1] = -50
    golds[i][0] = random.randint(0, 550)
    seeps[i] = random.randint(3, 8)


def init_boom(i):
    booms[i][1] = -50
    booms[i][0] = random.randint(0, 550)
    booms_seeps[i] = random.randint(3, 10)


def updates():
    screen.blit(bk, (0, 0))
    for i in range(NUMBER):
        screen.blit(gold, golds[i])
    fall()
    if DIFFICULTY_MODE:
        for i in range(command()):
            screen.blit(boom, booms[i])
        fall_booms()
        screen.blit(blood, blood_xy)
        if SCORE >= 500:
            fall_blood()


def fall():
    for i in range(NUMBER):
        if golds[i][1] + gold_wide >= 850:
            init_gold(i)
        else:
            golds[i][1] += seeps[i]


def fall_booms():
    for i in range(command()):
        if booms[i][1] + BOOM_SIDE >= high + BOOM_SIDE:
            init_boom(i)
        else:
            booms[i][1] += booms_seeps[i]


def fall_blood():
    global blood_xy
    x, y = blood_xy
    if y + BOOM_SIDE >= high + BLOOD_SIDE:
        x = random.randint(0, wide - BLOOD_SIDE)
        y = random.randint(-100, -BLOOD_SIDE)
    else:
        y += 10
    blood_xy = (x, y)

while MAIN:
    size = wide, high = 600, 800
    relx_size = relx_wide, relx_high = 50, 80
    gold_size = gold_wide, gold_high = 50, 50
    START_TIME = pygame.time.get_ticks() / 10000
    TIME = 0
    NUMBER = 10  # 金币数量
    NUMBER_BOOMS = 20  # 炸弹数量
    FONT_SIZE = 50
    BOOM_SIDE = 30
    SCORE_SIZE = (20, 20)
    RECT_X = 100
    RELX_X = 250
    RELX_Y = 720
    SCORE = 0
    BLOOD = 5
    BLOOD_SIDE = 20
    RIGHT = True
    LEFT = True
    SEEP = 5
    START_KEY = False
    START_KEY1 = False
    START_KEY2 = False
    STAND = True
    DIRECTION = True
    KEEP_ON = False
    key = True
    DIFFICULTY_MODE = False
    pygame.init()
    screen = pygame.display.set_mode(size)
    # 加载图片
    icon = pygame.image.load("金币.png").convert()
    game_over = pygame.image.load("game over.png").convert()
    boom = pygame.image.load("炸弹.png")
    gold = pygame.image.load("金币.png")
    bk = pygame.image.load("背景.png")
    blood = pygame.image.load("爱心.png")
    relx_right = pygame.image.load("right.png")
    relx_left = pygame.image.load("left.png")
    right_right = pygame.image.load("right_right.png")
    right_left = pygame.image.load("right_left.png")
    left_right = pygame.image.load("left_right.png")
    left_left = pygame.image.load("left_left.png")
    number_list = []
    effects = []
    for i in range(10):
        x = pygame.image.load("{}.png".format(i))
        x = pygame.transform.scale(x, SCORE_SIZE)
        number_list.append(x)
    for i in range(4):
        x = pygame.image.load("boom{}.png".format(i))
        x = pygame.transform.scale(x, gold_size)
        effects.append(x)
    # 设置大小
    bk = pygame.transform.scale(bk, size)
    game_over = pygame.transform.scale(game_over, size)
    icon = pygame.transform.scale(icon, (50, 50))
    gold = pygame.transform.scale(gold, gold_size)
    boom = pygame.transform.scale(boom, (BOOM_SIDE, BOOM_SIDE))
    blood = pygame.transform.scale(blood, SCORE_SIZE)
    relx_right = pygame.transform.scale(relx_right, relx_size)
    relx_left = pygame.transform.scale(relx_left, relx_size)
    right_right = pygame.transform.scale(right_right, relx_size)
    right_left = pygame.transform.scale(right_left, relx_size)
    left_right = pygame.transform.scale(left_right, relx_size)
    left_left = pygame.transform.scale(left_left, relx_size)
    pygame.display.set_caption("gold game")
    CLOCK = pygame.time.Clock()
    # 加载
    pygame.display.set_icon(icon)
    pygame.font.init()
    font = pygame.font.Font("text.ttf", FONT_SIZE)
    golds = []
    seeps = []
    booms = []
    booms_seeps = []
    blood_xy = (random.randint(0, wide - BLOOD_SIDE), random.randint(-100, -BLOOD_SIDE))
    for i in range(NUMBER):
        x = random.randint(0, 550)
        y = random.randint(-1000, -50)
        seep = random.randint(3, 8)
        seeps.append(seep)
        golds.append([x, y])
    for i in range(NUMBER_BOOMS):
        x = random.randint(0, 550)
        y = random.randint(-2000, -50)
        boom_seep = random.randint(3, 10)
        booms_seeps.append(boom_seep)
        booms.append([x, y])
    # 界面
    color_font = (0, 255, 0)
    color_bk = (255, 0, 0)
    text = font.render("轻松模式", True, color_font, color_bk)
    text2 = font.render("困难模式", True, color_font, color_bk)
    screen.blit(text, (RECT_X, RECT_X))
    screen.blit(text2, (RECT_X, RECT_X + 51))
    pygame.display.flip()
    while key:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                MAIN = False
                key = False
            if event.type == pygame.MOUSEBUTTONDOWN:
                x, y = pygame.mouse.get_pos()
                if x >= RECT_X and x <= RECT_X + 156:
                    if y >= RECT_X and y <= RECT_X + 50:
                        START_KEY = True
                if x >= RECT_X and x <= RECT_X + 156:
                    if y >= RECT_X + 51 and y <= RECT_X + 101:
                        START_KEY2 = True
            if event.type == pygame.MOUSEBUTTONUP:
                x, y = pygame.mouse.get_pos()
                if START_KEY:
                    if x >= RECT_X and x <= RECT_X + 156:
                        if y >= RECT_X and y <= RECT_X + 50:
                            START_KEY1 = True
                if START_KEY2:
                    if x >= RECT_X and x <= RECT_X + 156:
                        if y >= RECT_X + 51 and y <= RECT_X + 101:
                            DIFFICULTY_MODE = True

            if event.type == pygame.KEYDOWN:
                if chr(event.key) == 'a':
                    STAND = False
                    DIRECTION = False
                elif chr(event.key) == 'd':
                    STAND = False
                    DIRECTION = True
                KEEP_ON = True

            if event.type == pygame.KEYUP:
                STAND = True
                KEEP_ON = False

        if KEEP_ON:
            if DIRECTION:
                if judge():
                    x = random.randint(0, 1)
                    if x == 1:
                        RIGHT = True
                    else:
                        RIGHT = False
                    RELX_X += SEEP
            else:
                if judge():
                    x = random.randint(0, 1)
                    if x == 1:
                        LEFT = True
                    else:
                        LEFT = False
                    RELX_X -= SEEP
        if START_KEY1:
            DIFFICULTY_MODE = False
            main_game()
        if DIFFICULTY_MODE:
            START_KEY1 = False
            main_game()
        if BLOOD <= 0:
            screen.blit(game_over, (0, 0))
            pygame.display.update()
            time.sleep(5)
            key = False
pygame.quit()

百度网盘 请输入提取码

提取码:72jx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值