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

2025-09-0660
AI 快速预览详细 收起
本文介绍了如何使用Kitronik ARCADE开发板和MakeCode Arcade平台创建乒乓球小游戏。Kitronik ARCADE是一款专为编程教学设计的可编程游戏机开发板,支持图形化和JavaScript编程。通过自定义精灵类型和多控制器支持,实现双人对战乒乓球游戏。球拍只能垂直移动,球碰到墙壁会自动反弹。该开发板适用于中小学编程课程和创客工作坊,帮助学生掌握编程基础。

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
 

创作许可协议

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

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