基于pygame python的小游戏
时间: 2023-09-20 11:15:09 浏览: 45
好的,我可以为您介绍一个基于pygame和python的小游戏——打砖块。
首先,您需要安装pygame库。您可以在命令行中执行以下代码来安装pygame:
```
pip install pygame
```
接下来,您可以创建一个名为"breakout.py"的python文件,并将以下代码复制到其中:
```python
import pygame
import random
# 初始化pygame
pygame.init()
# 设置窗口大小
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 600
WINDOW_SIZE = (WINDOW_WIDTH, WINDOW_HEIGHT)
# 创建窗口
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Breakout Game")
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 定义板子的属性
PAD_WIDTH = 80
PAD_HEIGHT = 10
PAD_COLOR = GREEN
PAD_SPEED = 5
# 定义球的属性
BALL_RADIUS = 10
BALL_COLOR = RED
BALL_SPEED = 5
# 定义砖块的属性
BRICK_WIDTH = 50
BRICK_HEIGHT = 20
BRICK_COLOR = BLUE
BRICK_GAP = 10
BRICK_ROWS = 5
BRICK_COLUMNS = 8
# 定义字体
FONT = pygame.font.SysFont(None, 30)
# 定义得分
score = 0
# 创建板子
def create_pad():
pad_x = (WINDOW_WIDTH - PAD_WIDTH) // 2
pad_y = WINDOW_HEIGHT - PAD_HEIGHT - 10
return pygame.Rect(pad_x, pad_y, PAD_WIDTH, PAD_HEIGHT)
# 创建球
def create_ball():
ball_x = WINDOW_WIDTH // 2
ball_y = WINDOW_HEIGHT // 2
return pygame.draw.circle(screen, BALL_COLOR, (ball_x, ball_y), BALL_RADIUS)
# 创建砖块
def create_bricks():
bricks = []
for i in range(BRICK_ROWS):
for j in range(BRICK_COLUMNS):
brick_x = j * (BRICK_WIDTH + BRICK_GAP) + BRICK_GAP
brick_y = i * (BRICK_HEIGHT + BRICK_GAP) + BRICK_GAP + 40
bricks.append(pygame.Rect(brick_x, brick_y, BRICK_WIDTH, BRICK_HEIGHT))
return bricks
# 绘制游戏元素
def draw_game_elements(pad, ball, bricks):
screen.fill(WHITE)
pygame.draw.rect(screen, PAD_COLOR, pad)
pygame.draw.circle(screen, BALL_COLOR, ball.center, BALL_RADIUS)
for brick in bricks:
pygame.draw.rect(screen, BRICK_COLOR, brick)
score_text = FONT.render("Score: {}".format(score), True, BLACK)
screen.blit(score_text, (10, 10))
pygame.display.update()
# 移动板子
def move_pad(pad, direction):
if direction == "left":
pad.left -= PAD_SPEED
if pad.left < 0:
pad.left = 0
elif direction == "right":
pad.right += PAD_SPEED
if pad.right > WINDOW_WIDTH:
pad.right = WINDOW_WIDTH
# 移动球
def move_ball(ball, dx, dy):
ball.move_ip(dx, dy)
# 检测球是否碰到墙壁
def check_wall_collision(ball, dx, dy):
if ball.left < 0 or ball.right > WINDOW_WIDTH:
dx = -dx
if ball.top < 0:
dy = -dy
if ball.bottom > WINDOW_HEIGHT:
return False, dx, dy
return True, dx, dy
# 检测球是否碰到板子
def check_pad_collision(ball, pad, dx, dy):
if ball.colliderect(pad):
dy = -dy
if ball.centerx < pad.left:
dx = -BALL_SPEED
elif ball.centerx > pad.right:
dx = BALL_SPEED
else:
dx = 0
return dx, dy
# 检测球是否碰到砖块
def check_brick_collision(ball, bricks, dx, dy):
global score
for brick in bricks:
if ball.colliderect(brick):
dy = -dy
bricks.remove(brick)
score += 10
if random.randint(0, 1) == 0:
dx = -dx
break
return bricks, dx, dy
# 主函数
def main():
pad = create_pad()
ball = create_ball()
bricks = create_bricks()
dx = BALL_SPEED
dy = -BALL_SPEED
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
move_pad(pad, "left")
elif event.key == pygame.K_RIGHT:
move_pad(pad, "right")
screen.fill(WHITE)
draw_game_elements(pad, ball, bricks)
ball.left += dx
ball.top += dy
wall_collision, dx, dy = check_wall_collision(ball, dx, dy)
if not wall_collision:
break
dx, dy = check_pad_collision(ball, pad, dx, dy)
bricks, dx, dy = check_brick_collision(ball, bricks, dx, dy)
pygame.time.Clock().tick(60)
screen.fill(WHITE)
score_text = FONT.render("Game Over! Score: {}".format(score), True, BLACK)
screen.blit(score_text, (WINDOW_WIDTH // 2 - 100, WINDOW_HEIGHT // 2))
pygame.display.update()
pygame.time.delay(2000)
pygame.quit()
quit()
if __name__ == "__main__":
main()
```
运行以上代码,就可以开始玩打砖块游戏了。