python小游戏——躲避球(可当课设)

游戏简介:

没有美术,画面简洁(懒得做)。玩家控制小球躲避敌人(上下左右,闪避),敌人体积越大速度越慢,随机生成道具球(目前只有生命球),靠近道具球可拾取。

未来展望:

  1. 添加其他道具球

  2. 添加攻击手段,目前只能闪避。

  3. 添加耐力条

  4. 添加更多属性

核心代码

玩家移动

python 复制代码
def player_move(space_down, player):
    """
    控制玩家移动处理
    :param space_down: 是否按下空格
    :param player: 玩家
    :return:
    """
    global monitor
    if space_down:
        speed = player.dodge_speed
    else:
        speed = player.speed

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= speed
    if keys[pygame.K_RIGHT]:
        player.x += speed
    if keys[pygame.K_UP]:
        player.y -= speed
    if keys[pygame.K_DOWN]:
        player.y += speed

    if player.x < 0:
        player.x = monitor.width + player.x
    elif player.x > monitor.width:
        player.x = player.x - monitor.width

    if player.y < 0:
        player.y = monitor.height + player.y
    elif player.y > monitor.height:
        player.y = player.y - monitor.height

生成小怪

python 复制代码
def make_enemy():
    """
    生成小怪
    :return:
    """
    global monitor, score
    boss = False
    if score % 20000 == 0 and score != 0:
        boss = True
    sizeList = [10, 30, 50, 70, 100, 130, 150, 180, 200, 250]
    random_int = random.randint(1, 10) if boss is False else 20
    enemy = Enemy(
        atc=random_int,
        max_health=random_int,
        defense=0,
        speed=(11 - random_int) * 1.5 if boss is False else 1.5,
        attribute=0,
        x=random.uniform(0.1, 1) * monitor.width,
        y=random.uniform(0.1, 1) * monitor.height,
        size=sizeList[random_int - 1] if boss is False else 500
    )
    return enemy

道具球处理

python 复制代码
def propBall_handle(propBall_list, window, player):
    """
    道具球处理
    :param propBall_list:
    :param window:
    :param player:
    :return:
    """
    count = 0
    for propBall in propBall_list:
        pygame.draw.circle(window, propBall.color, (propBall.x, propBall.y), propBall.size)
        propBall.moveToPlayer(player.x, player.y)
        if detectIntersect(player, propBall):
            propBall_function(player, propBall)
            del propBall_list[count]
        count += 1
    if score % 200 == 0:
        propBall = generate_propBall()
        if propBall is not None:
            propBall_list.append(propBall)
    return propBall_list

游戏主要逻辑

python 复制代码
def main():
    global is_running, is_playing, font, pass_time, pass_time_made, score, start_time, monitor
    propBall_list = []
    window = pygame.display.set_mode((monitor.width, monitor.height))
    pygame.display.set_caption("demo")
    player = init_player()
    health_bal = pygame.Rect(20, 20, player.health * 20, 20)
    enemyList = [make_enemy()]
    button_playAgain = pygame.Rect(monitor.width // 2 - button_width // 2, monitor.height * 0.6,
                                   button_width, button_height)
    button_quit = pygame.Rect(monitor.width // 2 - button_width // 2,
                              monitor.height * 0.6 + 30 + button_height,
                              button_width, button_height)
    buttonList = [button_playAgain, button_quit]

    while is_running:
        score += 1
        window.fill(color_dict['black'])  # 填充黑色
        health_bal.width = player.health * 20
        space_down = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                is_running = False
            elif event.type == KEYDOWN:
                if event.key == K_SPACE:
                    space_down = True
            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                button_serialNum = button_clicked(buttonList, mouse_pos)
                if button_serialNum == 0:
                    is_playing = True
                    player = init_player()
                    enemyList = [make_enemy()]
                elif button_serialNum == 1:
                    is_running = False

        if is_playing:
            if pass_time_made is False:
                pass_time = 0
                start_time = time.perf_counter()
                pass_time_made = True

            if player.health == 0:
                is_playing = False

            if score % 400 == 0:
                enemyList.append(make_enemy())

            propBall_list = propBall_handle(propBall_list, window, player)
            player_move(space_down, player)  # 玩家移动
            player_twinkle(player, window)  # 玩家绘制
            draw_healthBar(window, player, health_bal)  # 血条更新
            make_enemyThreading(enemyList, window, player)  # 小怪更新
            draw_score(window)
            pass_time = int(time.perf_counter() - start_time)
        else:
            draw_scoreTitle(window)
            draw_button(buttonList, window)
            pass_time_made = False
            propBall_list = []
            enemyList = []

        pygame.display.flip()  # 刷新屏幕
        time.sleep(0.01)
    pygame.quit()

游戏画面

完整代码

有需要者自取,盘内还有打包好的exe文件

链接:https://pan.baidu.com/s/1rZ1xNZJYtvyXPIG9Rgh5Hw

提取码:iq6l

相关推荐
松仔log10 分钟前
Java多线程——对象的组合
java·开发语言·jvm
深蓝海拓10 分钟前
基于深度学习的视觉检测小项目(十六) 用户管理界面的组态
人工智能·python·深度学习·qt·pyqt
Qhumaing13 分钟前
Python学习——函数参数详解
开发语言·python·学习
Icomi_25 分钟前
【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙
c语言·c++·人工智能·pytorch·python·机器学习·计算机视觉
ElvInR40 分钟前
【C语言】动态内存管理
c语言·开发语言
加油,旭杏1 小时前
【go语言】grpc 快速入门
开发语言·后端·golang
行路见知1 小时前
1.4 Go 数组
开发语言
2501_903238651 小时前
Java 9模块开发:Eclipse实战指南
java·开发语言·eclipse·个人开发
ahardstone1 小时前
【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
开发语言·python
阿豪学编程1 小时前
c++ string类 +底层模拟实现
开发语言·c++