当前位置: 首页 > 知识库问答 >
问题:

我如何在没有完成循环的情况下进入或退出循环?(Lua)

尉迟轶
2023-03-14

我想为OpenComputers(minecraft mod)编写一个曼卡拉游戏,它使用Lua。然而,曼卡拉要求必须进入它中间的主循环(六个可供选择的壶),退出中间的循环(把你的最后一个石头放入空壶),从循环内部进入循环(把最后一个石头放入壶中,必须从那个壶中捡起所有的石头)。

我可以很容易地在两边做曼卡拉,用一个boolean值和一个if语句。

对于不熟悉曼卡拉的人,我有一个快速的流程图来解释我的问题:http://imgur.com/wubw1pc

我的一个想法是这样的伪代码:

declare pots1[0,4,4,4,4,4,4], pots2[0,4,4,4,4,4,4] //pots1[0] and pots2[0] are that player's mancala

function side1(pot,player) //pot is the pot chosen by the player
    declare stones = pots1[pot]
    pots1[pot] = 0

    do
        pot = pot + 1
        stones = stones - 1
        pots1[pot] = pots1[pot] + 1
    while stones > 0 and pot < 6

    if pot == 6 and stones > 0 and player //If stones were dropped in pot 6 and player1 is playing, drop stone in his mancala
        pots1[0] = pots1[0] + 1
        stones = stones - 1

    if stones == 0 //If player1 is out of stones, check the pot for more stones. Pick up all stones in pot and continue.
        if pots1[pot] > 1

我不确定从这里到哪里去。

共有1个答案

卢宜然
2023-03-14

退出和进入您所描述的循环的唯一方法是使用Lua coroutines的yieldresume方法。coroutine.yield允许退出当前的coroutine/function,但将其状态保持原样,因此后续的coroutine.resume调用将从执行yield的准确位置继续。yield还可以返回值,resume可以提供值,这允许构建更复杂的逻辑,而不仅仅是从特定点恢复执行。

关于coroutines的详细信息,您可能需要查看Lua编程中的第9章。

 类似资料:
  • 如果您能帮助我完成Java类的任务,我将不胜感激。问题提示如下: 编写一个程序来读取非负整数列表并显示最大整数、最小整数和所有整数的平均值。用户通过输入一个不用于查找最大值、最小值和平均值的负哨兵值来指示输入的结束。平均值应该是双精度类型的值,以便用小数部分计算。 我在代码中遇到的问题是,运行时,循环不会完成,除非输入的第一个值为负值,在这种情况下它返回: 输入的最大数字是:0输入的最小数字是:0

  • 问题内容: 在Java中退出/终止while循环的最佳方法是什么? 例如,我的代码当前如下: 问题答案: 用途: 但是,如果您的代码看起来 完全 像您指定的那样,则可以使用普通循环并将条件更改为:

  • 我有一个非常基本的函数,它搜索的数组列表,并返回与传递给它的参数匹配的帐户。但是,一旦抛出CustomerAccountNotFoundException,我的for循环就会中断。 我通过在异常后打印的值来测试这一点,该值一直被重置为0。如何在抛出异常后继续循环?我希望每次帐户不匹配时都抛出它,当它匹配时返回帐户。我还尝试过但不起作用。

  • 问题内容: 我正在尝试通过按键盘上的键来使while循环中断。我的代码是: 问题答案: 请勿使用循环获取输入,或。您真正想要的是一行输入,然后将其拆分为一个双打列表。因此,请使用,拆分并解析每个项目。像这样: 这忽略了任何形式的输入验证,但显示了一种通用方法。 这将起作用,因为一旦您单击“ enter”(输入),它将结束第一行,这意味着扫描程序可以越过进入代码的大部分。由于您再也不会尝试阅读任何内

  • 问题内容: 目前,我正在此站点上抓取图表图表信息。要抓取信息,我需要为有很多镜头的情况做一个for循环。我可以通过单击“ Team Stats”并找到射门次数来找到射门次数。 我想做出适当的选择而不必找出拍摄数量。 我目前正在做什么: 任何帮助将不胜感激。请让我知道是否需要进一步的信息。 问题答案: 我不确定您的变量k是什么意思。 我从所有评论中获得了建议。

  • 问题内容: 如果两个模块相互导入会怎样? 为了概括这个问题,Python中的循环导入又如何呢? 问题答案: 导入确实非常简单。只要记住以下几点: 和是可执行语句。它们在运行的程序到达该行时执行。 如果模块不在中,则导入将在中创建新的模块条目,然后在模块中执行代码。在执行完成之前,它不会将控制权返回给调用模块。 如果中确实存在一个模块,则无论导入是否完成执行,导入都会简单地返回该模块。这就是循环导入