写一个pygame关于小球碰到下方挡板反弹的游戏
时间: 2023-11-15 13:06:28 浏览: 52
好的,以下是一个简单的基于 Pygame 的小球碰到下方挡板反弹的游戏:
```python
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置窗口尺寸和标题
SCREEN_WIDTH = 500
SCREEN_HEIGHT = 500
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("小球反弹")
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
# 定义小球属性
BALL_RADIUS = 10
ball_pos = [SCREEN_WIDTH // 2, BALL_RADIUS * 2]
ball_vel = [random.randint(-3, 3), random.randint(2, 5)]
# 定义挡板属性
PAD_WIDTH = 80
PAD_HEIGHT = 10
pad_pos = [SCREEN_WIDTH // 2 - PAD_WIDTH // 2, SCREEN_HEIGHT - PAD_HEIGHT - 10]
pad_vel = [0, 0]
# 定义游戏结束标志
game_over = False
# 游戏循环
while not game_over:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
pad_vel[0] = -5
elif event.key == pygame.K_RIGHT:
pad_vel[0] = 5
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
pad_vel[0] = 0
# 清屏
screen.fill(WHITE)
# 更新小球位置
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
if ball_pos[0] <= BALL_RADIUS or ball_pos[0] >= SCREEN_WIDTH - BALL_RADIUS:
ball_vel[0] = -ball_vel[0]
if ball_pos[1] <= BALL_RADIUS:
ball_vel[1] = -ball_vel[1]
elif ball_pos[1] >= SCREEN_HEIGHT - BALL_RADIUS:
if ball_pos[0] >= pad_pos[0] and ball_pos[0] <= pad_pos[0] + PAD_WIDTH:
ball_vel[1] = -ball_vel[1]
else:
game_over = True
# 更新挡板位置
pad_pos[0] += pad_vel[0]
if pad_pos[0] <= 0:
pad_pos[0] = 0
elif pad_pos[0] >= SCREEN_WIDTH - PAD_WIDTH:
pad_pos[0] = SCREEN_WIDTH - PAD_WIDTH
# 绘制小球和挡板
pygame.draw.circle(screen, RED, ball_pos, BALL_RADIUS)
pygame.draw.rect(screen, BLACK, [pad_pos[0], pad_pos[1], PAD_WIDTH, PAD_HEIGHT])
# 更新屏幕
pygame.display.update()
# 退出 Pygame
pygame.quit()
```
这个游戏中,小球会在窗口中自由移动,当小球碰到窗口的左右边缘时会反弹,当小球碰到窗口的下边缘时会判断是否和挡板碰撞,如果碰撞则小球会反弹,否则游戏结束。玩家可以通过键盘左右箭头控制挡板的移动。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)