回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

小游戏系列——打砖块 简单

头像 dfrwh 2025.05.03 10 0

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)

评论

user-avatar