?游戲介紹
打磚塊是一款經典的街機游戲,玩家控制底部的擋板,使球反彈以擊碎上方的磚塊。當球擊中磚塊時,磚塊消失,球反彈;若球碰到擋板,則改變方向繼續運動;若球掉出屏幕底部,玩家失去一次機會。
?游戲代碼
以下是使用Python和Pygame庫實現的打磚塊游戲代碼:
import pygame
import sys
import random# 初始化pygame
pygame.init()# 屏幕尺寸
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("打磚塊游戲")# 顏色定義
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)# 擋板屬性
paddle_width = 100
paddle_height = 20
paddle_x = (WIDTH - paddle_width) // 2
paddle_y = HEIGHT - 30
paddle_speed = 10# 球屬性
ball_radius = 10
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_speed_x = 5 * random.choice([-1, 1])
ball_speed_y = -5# 磚塊屬性
brick_rows = 5
brick_cols = 10
brick_width = WIDTH // brick_cols
brick_height = 30
brick_padding = 2
bricks = []# 創建磚塊
for row in range(brick_rows):brick_row = []for col in range(brick_cols):brick_x = col * (brick_width + brick_padding)brick_y = row * (brick_height + brick_padding) + 50brick_row.append(pygame.Rect(brick_x, brick_y, brick_width, brick_height))bricks.append(brick_row)# 分數
score = 0
font = pygame.font.Font(None, 36)# 游戲主循環
clock = pygame.time.Clock()
running = Truewhile running:# 事件處理for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 獲取按鍵keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and paddle_x > 0:paddle_x -= paddle_speedif keys[pygame.K_RIGHT] and paddle_x < WIDTH - paddle_width:paddle_x += paddle_speed# 更新球的位置ball_x += ball_speed_xball_y += ball_speed_y# 碰撞檢測 - 墻壁if ball_x <= ball_radius or ball_x >= WIDTH - ball_radius:ball_speed_x = -ball_speed_xif ball_y <= ball_radius:ball_speed_y = -ball_speed_y# 碰撞檢測 - 擋板paddle_rect = pygame.Rect(paddle_x, paddle_y, paddle_width, paddle_height)if paddle_rect.collidepoint(ball_x, ball_y + ball_radius) and ball_speed_y > 0:ball_speed_y = -ball_speed_y# 碰撞檢測 - 磚塊for row in bricks:for brick in row:if brick.collidepoint(ball_x, ball_y - ball_radius) and ball_speed_y < 0:ball_speed_y = -ball_speed_ybrick.width = 0brick.height = 0score += 10# 繪制screen.fill(BLACK)pygame.draw.rect(screen, BLUE, (paddle_x, paddle_y, paddle_width, paddle_height))pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)# 繪制磚塊for row in bricks:for brick in row:if brick.width > 0 and brick.height > 0:pygame.draw.rect(screen, GREEN, brick)# 繪制分數score_text = font.render(f"Score: {score}", True, WHITE)screen.blit(score_text, (10, 10))# 更新顯示pygame.display.flip()# 控制幀率clock.tick(60)# 檢測游戲結束條件if ball_y >= HEIGHT:game_over_text = font.render("Game Over", True, WHITE)screen.blit(game_over_text, (WIDTH // 2 - 80, HEIGHT // 2 - 18))pygame.display.flip()pygame.time.wait(2000)running = False# 退出游戲
pygame.quit()
sys.exit()
?游戲實現細節
?初始化與屏幕設置
游戲使用Pygame庫進行圖形渲染和事件處理。首先初始化Pygame,設置屏幕尺寸為800x600像素,并定義了一些顏色常量以便后續使用。
?擋板、球和磚塊的屬性設置
擋板:寬度為100像素,高度為20像素,初始位置在屏幕底部中央,可左右移動。
球:半徑為10像素,初始位置在屏幕中央,具有隨機的水平速度和向下的垂直速度。
磚塊:共5行10列,每塊磚的寬度為屏幕寬度除以列數,高度為30像素,初始時排列在屏幕上方。
?游戲主循環
在游戲主循環中,首先處理事件,如關閉窗口和按鍵輸入。根據按鍵調整擋板的位置,使其在屏幕內左右移動。
然后更新球的位置,根據當前速度改變其坐標。接著進行碰撞檢測,包括與墻壁、擋板和磚塊的碰撞。
墻壁碰撞:當球碰到左右墻壁或頂部時,改變其水平或垂直速度方向。
擋板碰撞:檢測球是否碰到擋板,若碰到則改變垂直速度方向,使球向上彈起。
磚塊碰撞:遍歷所有磚塊,檢測球是否碰到磚塊,若碰到則改變垂直速度方向,并將該磚塊的尺寸設為0以表示消除,同時增加分數。
最后進行繪制操作,包括繪制擋板、球、磚塊和分數顯示。更新屏幕顯示,并控制幀率為60 FPS。
?游戲結束條件
當球的y坐標超過屏幕高度時,表示球掉出屏幕底部,游戲結束。顯示"Game Over"文本,等待2秒后退出游戲。
?游戲擴展與改進建議
目前的打磚塊游戲是一個基礎版本,可以在此基礎上進行擴展和改進:
1. 增加難度級別:隨著游戲進行,可以逐漸增加球的速度或減少擋板的寬度,提高游戲難度。
2. 添加特殊磚塊:設計具有特殊效果的磚塊,如增加球的數量、改變球的大小或速度等。
3. 完善計分系統:根據不同類型的磚塊或擊打方式給予不同的分數獎勵。
4. 添加音效和動畫:在碰撞、得分和游戲結束時添加音效,增強游戲體驗。
5. 實現關卡系統:設計多個關卡,每個關卡具有不同的磚塊布局和難度設置。
通過以上擴展和改進,可以使打磚塊游戲更加豐富和有趣,吸引更多的玩家參與。