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

【花雕动手做】Kitronik 可编程开发板基于 ARCADE MakeCode 之乒乓球小游戏 简单

头像 驴友花雕 2025.09.06 4 0

Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。

它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。

凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。

00 (2).jpg
00 (3).jpg
00 (4).jpg

作为学习、练习与尝试,这里创建一个乒乓球的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:乒乓球

MicroPython实验参考代码

代码
@namespace
class SpriteKind:
    teft = SpriteKind.create()
    left = SpriteKind.create()
def left3():
    global aaaaa
    aaaaa = sprites.create(img("""
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 1 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 1 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 1 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            . . . . . . 2 7 f 8 . . . . . .
            """),
        SpriteKind.teft)
    controller.player2.move_sprite(aaaaa, 0, 150)
    aaaaa.right = 163
    aaaaa.set_stay_in_screen(True)
def left2():
    global bbbbb
    bbbbb = sprites.create(img("""
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 1 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 1 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 1 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            . . . . . . . 7 f 2 8 . . . . .
            """),
        SpriteKind.left)
    controller.move_sprite(bbbbb, 0, 150)
    bbbbb.right = 0
    bbbbb.set_stay_in_screen(True)

def on_on_overlap(sprite, otherSprite):
    sprite.vx = sprite.vx * -1
    info.change_score_by(1)
sprites.on_overlap(SpriteKind.player, SpriteKind.left, on_on_overlap)

def on_on_overlap2(sprite2, otherSprite2):
    sprite2.vx = sprite2.vx * -1
    info.player2.change_score_by(1)
sprites.on_overlap(SpriteKind.player, SpriteKind.teft, on_on_overlap2)

def ball():
    global mySprite
    mySprite = sprites.create(img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . 3 2 2 3 . . . . . .
            . . . . . 3 1 1 1 1 3 . . . . .
            . . . . . 2 1 1 1 1 2 . . . . .
            . . . . . 2 1 1 1 1 2 . . . . .
            . . . . . 3 1 1 1 1 3 . . . . .
            . . . . . . 3 2 2 3 . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
        SpriteKind.player)
    mySprite.set_velocity(100, 100)
    mySprite.set_bounce_on_wall(True)
    mySprite.y = randint(0, 120)
mySprite: Sprite = None
bbbbb: Sprite = None
aaaaa: Sprite = None
ball()
left2()
left3()

乒乓球小游戏代码解读

这是一个经典的乒乓球(Pong)游戏,支持两名玩家对战。左侧玩家使用主控制器,右侧玩家使用第二个控制器,双方控制球拍击打乒乓球。
核心代码解析

1. 自定义精灵类型
python
class SpriteKind:
teft = SpriteKind.create() # 右侧球拍
left = SpriteKind.create() # 左侧球拍
创建了两种自定义精灵类型:teft(可能是"right"的拼写错误)和left

用于区分左侧和右侧的球拍

2. 球拍创建函数
右侧球拍创建
python
def left3():
global aaaaa
aaaaa = sprites.create(img("""右侧球拍图像"""), SpriteKind.teft)
controller.player2.move_sprite(aaaaa, 0, 150) # 玩家2控制,只能垂直移动
aaaaa.right = 163 # 定位到右侧
aaaaa.set_stay_in_screen(True) # 限制在屏幕内
创建右侧球拍,使用ASCII艺术定义外观

使用controller.player2(第二个控制器)控制,只能垂直移动(速度150)

将球拍定位到屏幕右侧(x=163)

限制球拍不能离开屏幕

左侧球拍创建
python
def left2():
global bbbbb
bbbbb = sprites.create(img("""左侧球拍图像"""), SpriteKind.left)
controller.move_sprite(bbbbb, 0, 150) # 玩家1控制,只能垂直移动
bbbbb.right = 0 # 定位到左侧
bbbbb.set_stay_in_screen(True) # 限制在屏幕内
创建左侧球拍,使用ASCII艺术定义外观

使用controller(第一个控制器)控制,只能垂直移动(速度150)

将球拍定位到屏幕左侧(x=0)

限制球拍不能离开屏幕

3. 碰撞检测系统
球与左侧球拍碰撞
python
def on_on_overlap(sprite, otherSprite):
sprite.vx = sprite.vx * -1 # 球的水平速度反向
info.change_score_by(1) # 玩家1得分+1
sprites.on_overlap(SpriteKind.player, SpriteKind.left, on_on_overlap)
当球与左侧球拍碰撞时,球的水平速度反向(反弹)

玩家1得分增加1分

球与右侧球拍碰撞
python
def on_on_overlap2(sprite2, otherSprite2):
sprite2.vx = sprite2.vx * -1 # 球的水平速度反向
info.player2.change_score_by(1) # 玩家2得分+1
sprites.on_overlap(SpriteKind.player, SpriteKind.teft, on_on_overlap2)
当球与右侧球拍碰撞时,球的水平速度反向(反弹)

玩家2得分增加1分

4. 球创建函数
python
def ball():
global mySprite
mySprite = sprites.create(img("""球图像"""), SpriteKind.player)
mySprite.set_velocity(100, 100) # 设置初始速度
mySprite.set_bounce_on_wall(True) # 碰到墙壁反弹
mySprite.y = randint(0, 120) # 随机垂直位置
创建乒乓球,使用ASCII艺术定义外观

设置球的初始速度为(100, 100)

设置球碰到墙壁时反弹

球的初始垂直位置随机(0-120)

5. 游戏初始化
python
mySprite: Sprite = None
bbbbb: Sprite = None
aaaaa: Sprite = None
ball() # 创建球
left2() # 创建左侧球拍
left3() # 创建右侧球拍
声明全局变量

依次创建球、左侧球拍和右侧球拍

游戏机制总结
双人对战:支持两名玩家对战,分别控制左右球拍

控制方式:

玩家1(左侧):使用主控制器上下移动

玩家2(右侧):使用第二个控制器上下移动

得分系统:

球击中左侧球拍:玩家1得分

球击中右侧球拍:玩家2得分

物理系统:

球碰到墙壁会自动反弹

球碰到球拍会水平速度反向

技术特点
多控制器支持:使用controller和controller.player2分别控制两个球拍

自定义精灵类型:使用SpriteKind.create()创建自定义精灵类型

简单物理模拟:通过直接修改速度实现反弹效果

随机化:球的初始位置随机,增加游戏变化性

图形编程参考实验程序

65.jpg

通过模拟器,调试与模拟运行

 

00203---0.gif

 

实验场景记录

 

66 (1).jpg66 (2).jpg
 

评论

user-avatar
icon 他的勋章
    展开更多