小游戏系列——打砖块

2025-05-03181
AI 快速预览详细 收起
本文介绍了如何使用mpython编写经典的打砖块游戏。游戏的核心是通过AB键控制挡板左右移动,反弹球来消除屏幕上的砖块。文章详细说明了屏幕设置、游戏元素尺寸、初始状态、砖块地图生成、绘制函数、游戏结束处理以及游戏主循环。通过具体的代码示例,读者可以逐步实现这个游戏,体验编程的乐趣。

AB键左右移动

 

 

from mpython import *
import time

# 屏幕设置
SCREEN_WIDTH = 128
SCREEN_HEIGHT = 64

# 游戏元素尺寸
PADDLE_WIDTH = 20
PADDLE_HEIGHT = 4
BALL_SIZE = 3
BRICK_WIDTH = 16
BRICK_HEIGHT = 6

# 初始状态
paddle_x = (SCREEN_WIDTH - PADDLE_WIDTH) // 2
paddle_y = SCREEN_HEIGHT - PADDLE_HEIGHT - 2

ball_x = 64
ball_y = 32
ball_dx = 1
ball_dy = -1

# 生成砖块地图(横向8列,纵向3行)
bricks = []
for row in range(3):
   brick_row = []
   for col in range(8):
       brick_row.append(1)  # 1 表示砖块存在
   bricks.append(brick_row)

def draw():
   oled.fill(0)

   # 画砖块
   for row in range(3):
       for col in range(8):
           if bricks[row][col] == 1:
               x = col * BRICK_WIDTH
               y = row * BRICK_HEIGHT
               oled.fill_rect(x, y, BRICK_WIDTH - 1, BRICK_HEIGHT - 1, 1)

   # 画挡板
   oled.fill_rect(paddle_x, paddle_y, PADDLE_WIDTH, PADDLE_HEIGHT, 1)

   # 画球
   oled.fill_rect(ball_x, ball_y, BALL_SIZE, BALL_SIZE, 1)

   oled.show()

def game_over():
   oled.fill(0)
   oled.text("GAME OVER", 25, 25)
   oled.show()
   while True:
       pass

# 游戏主循环
while True:
   # 移动挡板
   if button_a.value() == 0 and paddle_x > 0:
       paddle_x -= 2
   if button_b.value() == 0 and paddle_x < SCREEN_WIDTH - PADDLE_WIDTH:
       paddle_x += 2

   # 移动球
   ball_x += ball_dx
   ball_y += ball_dy

   # 碰撞边界
   if ball_x <= 0 or ball_x >= SCREEN_WIDTH - BALL_SIZE:
       ball_dx *= -1
   if ball_y <= 0:
       ball_dy *= -1
   if ball_y >= SCREEN_HEIGHT:
       game_over()

   # 碰挡板
   if (paddle_y <= ball_y + BALL_SIZE <= paddle_y + PADDLE_HEIGHT) and (paddle_x <= ball_x <= paddle_x + PADDLE_WIDTH):
       ball_dy *= -1

   # 碰砖块
   for row in range(3):
       for col in range(8):
           if bricks[row][col] == 1:
               brick_x = col * BRICK_WIDTH
               brick_y = row * BRICK_HEIGHT
               if (brick_x <= ball_x <= brick_x + BRICK_WIDTH - 1) and (brick_y <= ball_y <= brick_y + BRICK_HEIGHT - 1):
                   bricks[row][col] = 0
                   ball_dy *= -1

   draw()
   time.sleep(0.02)

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -