当前位置:首页 » 《资源分享》 » 正文

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

9 人参与  2024年09月14日 09:21  分类 : 《资源分享》  评论

点击全文阅读


游戏简介:

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

未来展望:

1. 添加其他道具球

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

3. 添加耐力条

4. 添加更多属性

核心代码

玩家移动

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

生成小怪

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

道具球处理

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

游戏主要逻辑

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/159609.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1