import pygame import time import random pygame.init() screen = pygame.display.set_mode((600, 500)) pygame.display.set_caption("接小球游戏") ball_x = 300 ball_y = 250 rect_x, rect_y, rect_w, rect_h = 300, 460, 120, 40 font1 = pygame.font.Font(None, 24) score = 0 lives = 3 def ball(ball_x, ball_y): pygame.draw.circle(screen, (255., 25, 52), (ball_x, ball_y), 20, 0) while True: for event in pygame.event.get(): print(event) if event.type == pygame.QUIT: pygame.quit() elif event.type == pygame.MOUSEMOTION: rect_x, _ = event.pos screen.fill((34, 177, 135)) ball_y = ball_y + 1 if ball_y > 500: ball_y = 0 ball_x = random.randint(0, 600) lives = lives -1 ball(ball_x, ball_y) if rect_x < ball_x < rect_x + rect_w and rect_y < ball_y < rect_y + rect_h: score = score + 1 ball_y = 0 ball_x = random.randint(0, 600) Text_score = font1.render('score:%d' % score, True, (0, 0, 0)) screen.blit(Text_score, (0, 0)) Text_lives = font1.render('lives:%d' % lives, True, (0, 0, 0)) screen.blit(Text_lives, (530, 0)) pygame.draw.rect(screen, (100, 200, 30), (rect_x, rect_y, rect_w, rect_h), 0) pygame.display.update() pygame.quit() 优化这段代码
时间: 2023-06-14 11:07:35 浏览: 240
这段代码可以进行以下优化:
1. 使用函数封装代码块,提高代码的可读性和可维护性。
2. 使用变量名更加可读性强的名称。
3. 将常量提取出来,定义为全局变量,方便后续修改。
4. 优化代码结构,提高代码的可读性。
5. 添加游戏结束的条件,当生命值为0时游戏结束。
以下是优化后的代码:
```python
import pygame
import time
import random
# 常量定义
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 500
BALL_RADIUS = 20
RECT_WIDTH = 120
RECT_HEIGHT = 40
BALL_COLOR = (255., 25, 52)
RECT_COLOR = (100, 200, 30)
BACKGROUND_COLOR = (34, 177, 135)
TEXT_COLOR = (0, 0, 0)
# 初始化游戏
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("接小球游戏")
font = pygame.font.Font(None, 24)
score = 0
lives = 3
# 定义函数
def draw_ball(ball_x, ball_y):
pygame.draw.circle(screen, BALL_COLOR, (ball_x, ball_y), BALL_RADIUS, 0)
def draw_rect(rect_x, rect_y):
pygame.draw.rect(screen, RECT_COLOR, (rect_x, rect_y, RECT_WIDTH, RECT_HEIGHT), 0)
def draw_text(score, lives):
text_score = font.render('score:%d' % score, True, TEXT_COLOR)
text_lives = font.render('lives:%d' % lives, True, TEXT_COLOR)
screen.blit(text_score, (0, 0))
screen.blit(text_lives, (SCREEN_WIDTH - 80, 0))
# 游戏循环
while lives > 0:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
elif event.type == pygame.MOUSEMOTION:
rect_x, _ = event.pos
screen.fill(BACKGROUND_COLOR)
ball_y = ball_y + 1
if ball_y > SCREEN_HEIGHT:
ball_y = 0
ball_x = random.randint(0, SCREEN_WIDTH)
lives -= 1
draw_ball(ball_x, ball_y)
draw_rect(rect_x, SCREEN_HEIGHT - RECT_HEIGHT)
if rect_x < ball_x < rect_x + RECT_WIDTH and SCREEN_HEIGHT - RECT_HEIGHT < ball_y < SCREEN_HEIGHT:
score += 1
ball_y = 0
ball_x = random.randint(0, SCREEN_WIDTH)
draw_text(score, lives)
pygame.display.update()
pygame.quit()
```
阅读全文