2. 实现原理

2.1. 游戏设计

  • 游戏规则

    • 猜拳游戏是一种广泛流传的手技游戏,通过不同的手势分别表示石头、剪刀或布。石头胜剪刀,剪刀胜布,布胜石头。
    • 在游戏中,用户通过按下不同的按键来表示不同的手势(石头、剪刀、布);然后等待对方出手势,再由电脑进行对比并判定结果
  • 游戏界面

    • 游戏界面分为三个区域
    • 最顶部的区域显示游戏规则和操作说明
    • 中间区域显示每次猜拳的情况,包括玩家手势、电脑手势和胜负结果
    • 玩家手势通过不同的按键来表示
    • 最下面的区域显示游戏胜负情况的汇总结果
    guess
  • 按键排列

    guess

2.2. 网络连接

  • 基本原理
    • 两个玩家使用两个不同的Skids开发板,它们通过ZigBee网络进行连接。
    • 其中一个Skids上的ZigBee为终端(玩家1),另一个Skids上的ZigBee为协调器(玩家2),终端ZigBee通过连接ZigBee协调器使而这两个Skids间建立连接。
  • 玩家1流程
    • 程序启动,进行硬件初始化,对显示屏和按键进行设置
    • 建立连接,发送邀请消息以寻找玩家2,等待对方回应
    • 成功连接到玩家2后,选择按键以出拳,并发送出拳信息给对方
    • 等待对方出拳
    • 接收到对方出拳信息后,判定胜负并显示结果
    • 开始下一轮猜拳游戏
  • 玩家2流程
    • 程序启动,进行硬件初始化,对显示屏和按键进行设置
    • 等待连接邀请,如果收到玩家1的邀请,则建立连接并给对方一个回应
    • 等待对方出拳
    • 接收到对方出拳信息后,选择按键以出拳,并发送出拳信息给对方
    • 判定胜负并显示结果
    • 开始下一轮猜拳游戏

2.3. 数据格式

  • AT指令

两个Skids建立网络连接后,通过互发AT指令实现通信,AT指令的格式请见: AT指令

  • 交互数据

猜拳游戏中用于交互的数据就封装在AT指令的数据字段,共12字节,其格式如下:

[type]+[playerId]+[computerId]+[choice]
  • type:1字节,数据类型,0代表是邀请或邀请响应数据,1代表是出拳信息数据
  • playerId:5字节,自己的ID号
  • computerId:5字节,对方的ID号
  • choice:1字节,type为0时choice为0;type为1时,choice代表出拳的选择:1剪刀2石头3布

例如:

邀请或邀请响应数据:
    16进制: 00    53 4B 30 30 31  53 4B 30 30 32  00
    bytes: \x00   SK001           SK002          \x00
出拳信息数据:
    16进制: 01    53 4B 30 30 31  53 4B 30 30 32  02
    bytes: \x01   SK001           SK002          \x02