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)
评论