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()
无敌弹力球
最新推荐文章于 2024-07-20 17:12:48 发布