无敌弹力球

import pygame
import sys
import math

# 初始化pygame
pygame.init()

# 屏幕设置
screen_width, screen_height = 1900, 1000
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("碰碰球")

# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
blue = (0, 0, 255)

# 游戏状态
running = True
game_over = False

# 得分
score_left = 0
score_right = 0

# 球的属性
balls = [
    {'pos': [screen_width // 3, screen_height // 2], 'size': 15, 'speed_x': -10, 'speed_y': -10, 'color': white},
    {'pos': [screen_width // 3 * 2, screen_height // 2], 'size': 15, 'speed_x': 10, 'speed_y': 10, 'color': red}
]

# 挡板的属性
paddle_pos = [screen_width // 2, screen_height - 30]
paddle_width = 250
paddle_height = 25
paddle_speed = 10

# 字体设置
font = pygame.font.Font(None, 36)

# 碰撞检测函数
def detect_collision(ball1, ball2):
    distance = math.sqrt((ball1['pos'][0] - ball2['pos'][0])**2 + (ball1['pos'][1] - ball2['pos'][1])**2)
    return distance < (ball1['size'] + ball2['size'])

# 挡板碰撞检测
def check_paddle_collision(ball):
    return (ball['pos'][1] + ball['size'] >= paddle_pos[1] and ball['pos'][1] <= paddle_pos[1] + paddle_height and
            ball['pos'][0] >= paddle_pos[0] and ball['pos'][0] <= paddle_pos[0] + paddle_width)

# 游戏主循环
while running:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEMOTION:
            x, y = event.pos
            paddle_pos[0] = x - paddle_width // 2
            paddle_pos[0] = max(0, min(paddle_pos[0], screen_width - paddle_width))

    # 更新球的位置
    for ball in balls:
        ball['pos'][0] += ball['speed_x']
        ball['pos'][1] += ball['speed_y']

        # 边界碰撞检测
        if ball['pos'][0] <= 0:
            score_right += 1
            ball['pos'] = [screen_width // 2, screen_height // 2]
            ball['speed_x'] = abs(ball['speed_x'])
        if ball['pos'][0] + ball['size'] >= screen_width:
            score_left += 1
            ball['pos'] = [screen_width - ball['size'] - 1, screen_height // 2]
            ball['speed_x'] = -abs(ball['speed_x'])
        if ball['pos'][1] <= 0:
            ball['speed_y'] = -ball['speed_y']
        if ball['pos'][1] >= screen_height:
            game_over = True  # 球掉出底部,游戏结束

        # 挡板碰撞检测
        if check_paddle_collision(ball):
            ball['speed_y'] = -ball['speed_y']
        # 球之间的碰撞检测
        for i in range(len(balls)):
            for j in range(i + 1, len(balls)):
                if detect_collision(balls[i], balls[j]):
                    # 简单的碰撞处理:反弹
                    balls[i]['speed_x'] = -balls[i]['speed_x'] * 1.05  # 稍微增加反弹速度
                    balls[i]['speed_y'] = -balls[i]['speed_y'] * 1.05

    # 绘制背景
    screen.fill(black)

    # 绘制挡板
    pygame.draw.rect(screen, white, (paddle_pos[0], paddle_pos[1], paddle_width, paddle_height))

    # 绘制球
    for ball in balls:
        pygame.draw.circle(screen, ball['color'], ball['pos'], ball['size'])

    # 绘制得分
    text_left = font.render(f"Score Left: {score_left}", True, (255, 255, 255))
    text_right = font.render(f"Score Right: {score_right}", True, (255, 255, 255))
    screen.blit(text_left, (10, 10))
    screen.blit(text_right, (screen_width - text_right.get_width() - 10, 10))

    # 检查游戏是否结束
    if game_over:
        game_over_text = font.render("Game Over!", True, (255, 0, 0))
        screen.blit(game_over_text, (screen_width // 2 - game_over_text.get_width() // 2, screen_height // 2))
        pygame.time.delay(2000)  # 暂停2秒
        running = False  # 退出游戏循环

    # 更新屏幕显示
    pygame.display.flip()
    pygame.time.Clock().tick(60)  # 控制帧率

# 退出pygame
pygame.quit()
sys.exit()

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值