飞镖结帐代码Java

时间:2018-08-29 19:22:44

标签: java android

对于Java和一般而言,我还是一个新手。我正在尝试为501游戏制作基本的飞镖得分手应用程序。我已经完成了大部分设置,但是我想让该应用程序告诉您可能的完成情况,

例如,在501中,您必须在双头或中部牛市上完成),因此对于170,您可以使用T20 T20公牛来完成。我一直在网上寻找递归方法的一些建议,但这似乎超出了我的知识范围,而且我已经看了一些youtube vid,并且了解了在达到特定条件之前调用方法的基本概念,但是我真的不明白在这种情况下这将如何帮助。目前,我已经将所有可能的2,3,4 ....... 170硬编码为分数组合,如下所示,

 if (scoreTeamA == 150) {

        teamACheckout.setText("T20, T18, D18");

    }

这是很多代码,我相信有更好的方法,事实上,很可能有一种更好的方法可以完成我到目前为止所做的大部分工作,但这是一条很好的学习曲线。这样编写代码是否会比其他方式消耗更多的资源?

顺便说一句,我正在使用android studio

非常感谢

2 个答案:

答案 0 :(得分:0)

我对游戏不熟悉,但是我将尝试解释如何解决这个问题。

您想要做的是在有限的空间中搜索所有可用的解决方案。您可以将游戏的所有可能状态视为图表。假设您以10点开始,并且有4种可能的结果(1、2、3、0),则图表将是:

       10
 1/ 2|  3| 0\
 /   |   |   \
9   8    7   10

现在10是我们的根节点,我们有4个选项。得分1分,达到9分;得分2分,达到8分,等等。

9、8、7、10是根(10)的子节点,而1,2、3、0是我们可以采用的路径。

现在,我们可以继续扩展图形。让我们展开9

                    10
            1/      2|  3| 0\
            /        |   |   \
           9         8    7   10
      1/ 2| 3| 0\
      /   |  |   \
     8    7  6    9

您可以看到我们有4条新路径将我们带到4个新节点。假设我们位于根节点(10)中,而我们想转到7,我们必须找到所有可用路径。在这种情况下,我们有2:a)得分3直接达到7 b)得分1达到9,然后得分2达到7

我们可以展开图,直到到达具有0的节点(称为叶节点)为止。

现在,从根节点到叶节点的所有路径都是可行的解决方案。但是请小心,因为我们有0(miss)作为选项,我们将达到一个永无止境的循环,例如我们得到10分,我们错过了(0条路径),我们去了同一个节点(10),然后又错过了,依此类推。

通常,您应该看一下图论,因为它对于解决许多问题非常有用。至于如何找到所有路径,请查看DFS和BFS算法(也可以通过递归实现)。

当然没有一个答案,但是我希望我给您一个很好的起点

答案 1 :(得分:0)

您可以通过详尽搜索找到饰面。没有很多。

飞镖板有20个部分,每个部分都有一个双音和一个高音。再加上半牛和牛;而且您可能会完全错过棋盘(或者因为完成而不必掷飞镖)。因此,每个飞镖可以投掷63个地方;因此,在63 ^ 3个地方扔了3支飞镖,即250047。

那是...一些,但不是很多,以至于您每次想知道完成时都不能仅仅检查每种可能的组合。

但是您可以减少这种情况:如果您扔的最后一个飞镖必须是双飞镖或公牛,那么扔飞镖的位数是21 * 63 ^ 2 = 83349。

因此,只需遍历每个有效排列,计算每个分数,然后选择与您当前分数相等的分数即可。

当然,只有501个可能的成绩,但是您不能全部完成。因此,您可以一劳永逸地预先计算所有饰面,将它们存储在地图中,并在需要时在地图中查找。