gpt4 book ai didi

java - Android 蓝牙游戏不同步

转载 作者:行者123 更新时间:2023-12-01 15:07:13 25 4
gpt4 key购买 nike

我有一个蓝牙游戏应用程序,其架构很像API演示中的BluetoothChat应用程序,只不过两个玩家不是发送消息,而是互相发送一个“东西”来玩游戏。

为了简化,我们举个例子,两个玩家都选择枚举{Red,Green,Blue}之一,然后按“发送”按钮通过蓝牙消息机制发送。如果两个玩家选择相同的枚举,则他们玩的游戏被称为“相同”,否则被称为“不相同”。抱歉,你知道我为什么隐藏这个,希望不影响讨论。

枚举由按钮表示,例如

redButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
myColor = Red;
}

发送按钮就像

send.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

sendChoiceViaBluetooth();
//inside this method I used some stuff from the
//BluetoothChat API Demo to send the choice
}

如果我在发送按钮后点击不同的“颜色”按钮,我可以重新发送新的选择。

还有一个像这样的 Judge() 方法

if (myColor != null && otherColor != null){

compareColors();
showResult();
myColor = null;
otherColor =null;
}

myColor 和 otherColor 在开始时均为 null,并在 Judge() 结束时重置。

问题是,如果我在两台设备上玩很多次都非常快,或者有时我只是不知道为什么,游戏就会不同步。即我只从设备 A 发送颜色,设备 B 进行判断(),但设备 A 不进行判断,然后我转到设备 B 并发送颜色,设备 A 进行判断,但设备 B 上没有任何内容。双方似乎都是根据上次 session 中的“otherColor”进行判断。这种情况可能会持续,但有时它会在一段时间后消失。

我认为某些地方可能不同步,但我不知道在哪里。很多通信方式都来自API Demo中的BluetoothChatService.java,大部分都是同步的。

有人可以为我指明寻找答案的方向吗?我应该去哪里检查等等?抱歉这篇冗长的文章,实际的代码更糟糕,但我试图简化情况。

...................................................... …………我发现这个错误可能是由于传输丢失造成的。假设播放 A 和 B 都比较 localColor 和 remoteColor 以获得结果。如果玩家A将自己的颜色发送给B但是LOST,那么此时游戏状态是这样的:(v表示选择,x表示无)

                           A          |              B

Time 1: localColor remoteColor | localColor remoteColor

v x x x

什么都不会播放。此时如果B选择颜色并发送成功,则状态变为:

                           A          |              B

Time 2: localColor remoteColor | localColor remoteColor

v v v x

只有 A 获得两个选择,因此只有 A 执行 Judge(),B 不执行任何操作。不同步。接下来A选择一些东西,只有B做判断(),A什么都不做。

我应该怎样做才能让两个玩家保持在同一页面?即确保其他玩家收到本地选择?

最佳答案

听起来您需要禁用发送按钮,直到结果从其他设备返回并且发生 judge() 为止,然后您可以重新启用它。

关于java - Android 蓝牙游戏不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com