一旦满足一个案例条件,如何在switch语句中更改案例?

猎人

我试图弄清楚如何在Javascript / jQuery中的情况之间切换。我正在创建一个骰子游戏,玩家需要掷骰子直到完成“阶段”。一旦完成“阶段”,它们将移至下一个“阶段”,并且之前的任何“阶段”都不会干扰当前的“阶段”。将有几个不同的“阶段”,它们从“阶段1”开始,一直到“阶段2”,依此类推,直到最后一个阶段。有什么办法可以解决“阶段”问题?我在这里尝试切换语句没有成功。如果switch语句不起作用,那会怎样?

//Start of Dice Code
var die1Array = [];
var die2Array = [];
var die3Array = [];

var die1 = function() {
    var roll1 = Math.floor(Math.random() * 6) + 1;
    if(roll1 === 1) {
        die1Array.push(1);
    }
    else if(roll1 === 2) {
        die1Array.push(2);
    }
    else if(roll1 === 3) {
        die1Array.push(3);
    }
    else if(roll1 === 4) {
        die1Array.push(4);
    }
    else if(roll1 === 5) {
        die1Array.push(5);
    }
    else if(roll1 === 6) {
        die1Array.push(6);
    }
};

var die2 = function() {
    var roll2 = Math.floor(Math.random() * 6) + 1;
    if(roll2 === 1) {
        die2Array.push(1);
    }
    else if(roll2 === 2) {
        die2Array.push(2);
    }
    else if(roll2 === 3) {
        die2Array.push(3);
    }
    else if(roll2 === 4) {
        die2Array.push(4);
    }
    else if(roll2 === 5) {
        die2Array.push(5);
    }
    else if(roll2 === 6) {
        die2Array.push(6);
    }
};

var die3 = function() {
    var roll3 = Math.floor(Math.random() * 6) + 1;
    if(roll3 === 1) {
        die3Array.push(1);
    }
    else if(roll3 === 2) {
        die3Array.push(2);
    }
    else if(roll3 === 3) {
        die3Array.push(3);
    }
    else if(roll3 === 4) {
        die3Array.push(4);
    }
    else if(roll3 === 5) {
        die3Array.push(5);
    }
    else if(roll3 === 6) {
        die3Array.push(6);
    }
};
//End of Dice Code


var main = function() {

    $("#roll").on("click", die1);
    $("#roll").on("click", die2);
    $("#roll").on("click", die3);
    $("#roll").on("click", die4);
    $("#roll").on("click", die5);
    $("#roll").on("click", die6);

    //Where I want to switch between cases.
    //Once Phase 1's condition (the if statement) is met, I want to switch to Phase 2.
    var lvls = 1;
    switch(lvls) {
        case 1:
            alert("Phase 1");
            $("#submit").click(function() {
                if((die1Array.slice(-1)=="1"||die2Array.slice(-1)=="1"||die3Array.slice(-1)=="1")&&(die1Array.slice(-1)=="2"||die2Array.slice(-1)=="2"||die3Array.slice(-1)=="2")&&(die1Array.slice(-1)=="3"||die2Array.slice(-1)=="3"||die3Array.slice(-1)=="3")) {
                    alert("Completed Phase 1: Straight of 3");
                    lvls = 2;
                    return lvls;
                }
                else {
                    alert("Phase 1: Straight of 3.  Not Complete.  Try again.");
                };
            });
            break;

        case 2:
            alert("Phase 2");
            //Phase 2's code
            break;

        //Additional cases/Phases would go here.
        default:
    };

};


$(document).ready(main);
马里奥·桑蒂尼(Mario Santini)

在您的die#函数中,您可以仅推送值,而无需if else部分。

var die1 = function () {
    var roll1 = Math.floor(Math.random() * 6) + 1;
    die1Array.push(roll1);
}

或更笼统:

var die = function(dieArray){dieArray.push(Math.floor(Math.random()* 6)+ 1); }

使用:

die(die1Array); die(die2Array); die(die3Array); ...

当前swithc的问题是您将事件处理程序函数绑定到案例中。

如果希望事件处理程序仅在特定状态下工作,则应设置状态变量以保存当前状态,并在处理程序功能中检查此变量。

var main = function () {
    var diceState = 1;

    $("#submit").click(function() {
            if (diceState === 1) {
                // do something
            }
        });

    switch(lvls) {
    case 1:
          diceState = 1;
          break;

    case 2: 
         diceState = 2;
         break;
    }

您遇到的另一个问题是,您在main函数中将lvls的值设置为1,因此只有1种情况,即使您再次调用mainlvls的其他更改也完全无效

如果您多次调用main,则您会遇到连续绑定事件onsubmit的问题,因此每次提交表单时,函数处理程序都会被调用多次。

您应该将switch语句移动到另一个函数中,将状态变量作为参数传递,并在每次要更改状态时调用。

所以这里有一个例子:

// Should be in same scope of the function
// or an attribute of an object to be passed by reference.
var diceState;

var changeState = function (state) {
    switch(state) {
    case 1:
        diceState = 1;
        break;
    ....
    default:
        throw new Error("State " + state + " not supported");
    }
}

最好使用默认大小写来处理意外值。

以下是有关如何更改主要功能的建议:

var main = function() {

    var lvls;

    $("#roll").on("click", die1);
    $("#roll").on("click", die2);
    $("#roll").on("click", die3);
    $("#roll").on("click", die4);
    $("#roll").on("click", die5);
    $("#roll").on("click", die6);

    var changeState = function (state) {
        switch(state) {
        case 1:
            alert("Phase 1");
            lvls = state;
            break;

        case 2:
            alert("Phase 2");
            //Phase 2's code
            lvls = state;
            break;

        //Additional cases/Phases would go here.
        default:
        };
    }

    // bind the event handler
    $("#submit").click(function() {
if((die1Array.slice(-1)=="1"||die2Array.slice(-1)=="1"||die3Array.slice(-1)=="1")&&(die1Array.slice(-1)=="2"||die2Array.slice(-1)=="2"||die3Array.slice(-1)=="2")&&(die1Array.slice(-1)=="3"||die2Array.slice(-1)=="3"||die3Array.slice(-1)=="3")) {
                alert("Completed Phase 1: Straight of 3");
                changeState(2);

                // you could not return the vaue here!
                // return lvls; 
            }
            else {
                alert("Phase 1: Straight of 3.  Not Complete.  Try again.");
            };
        });

     changeState(1);

};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何在switch语句中有一个案例,让用户输入要显示的字符串

来自分类Dev

如何在查询中的一个案例中嵌套多个MAX(...)语句

来自分类Dev

如何在Swift中创建切换案例以继续下一个案例条件?

来自分类Dev

如何通过不获取另一个案例的值在 switch case 中创建 if 语句?

来自分类Dev

Switch语句中单个案例中的多个条件

来自分类Dev

Mongo再写一个案例

来自分类Dev

一旦一个已完成的线程满足条件,如何取消其他线程

来自分类Dev

一旦数组中的最后一个元素满足条件,如何使循环结束?

来自分类Dev

如何对我的每一个案例实施限制

来自分类Dev

switch语句中具有相同别名的多个案例

来自分类Dev

可以在一个案例陈述中匹配多个条件吗?

来自分类Dev

多个案例的下一个可用号码

来自分类Dev

如何将多个案例合并到switch语句中

来自分类Dev

DSL持续高ping,如何构建一个案例来展示我的ISP?

来自分类Dev

如何让机器人对一个案例做出多种响应?

来自分类Dev

在Scala中,如何将一个案例类转换为另一个不受代码更改字段影响的类?

来自分类Dev

如何编写一个选择内部案例语句

来自分类Dev

在select子句的另一个案例中使用案例列

来自分类Dev

在一个案例中有多个选项,然后在案例中循环

来自分类Dev

如何在R中创建一个新变量,如果一个案例缺少一个值而另一个变量具有一个观察到的值,则返回1?

来自分类Dev

一旦其中一个工人满足特定条件,终止Python多处理程序

来自分类Dev

将一个案例类转换为具有相同结构但具有一个附加字段的另一个案例类

来自分类Dev

是否有可能在一个案例中有一个案例,例如是否在一个if中

来自分类Dev

如何在Swift中写一个空的案例?

来自分类Dev

如何在一个switch语句中合并两个case语句

来自分类Dev

为什么一个案例中的内容决定了是否应该正确修剪另一个案例的内容?

来自分类Dev

如何合并两个案例类并将它们作为一个存储在表中?

来自分类Dev

通过展开Scala 3中的类型将案例类转换为另一个案例类

来自分类Dev

在提升后的映射中将案例类包含在另一个案例中

Related 相关文章

  1. 1

    我如何在switch语句中有一个案例,让用户输入要显示的字符串

  2. 2

    如何在查询中的一个案例中嵌套多个MAX(...)语句

  3. 3

    如何在Swift中创建切换案例以继续下一个案例条件?

  4. 4

    如何通过不获取另一个案例的值在 switch case 中创建 if 语句?

  5. 5

    Switch语句中单个案例中的多个条件

  6. 6

    Mongo再写一个案例

  7. 7

    一旦一个已完成的线程满足条件,如何取消其他线程

  8. 8

    一旦数组中的最后一个元素满足条件,如何使循环结束?

  9. 9

    如何对我的每一个案例实施限制

  10. 10

    switch语句中具有相同别名的多个案例

  11. 11

    可以在一个案例陈述中匹配多个条件吗?

  12. 12

    多个案例的下一个可用号码

  13. 13

    如何将多个案例合并到switch语句中

  14. 14

    DSL持续高ping,如何构建一个案例来展示我的ISP?

  15. 15

    如何让机器人对一个案例做出多种响应?

  16. 16

    在Scala中,如何将一个案例类转换为另一个不受代码更改字段影响的类?

  17. 17

    如何编写一个选择内部案例语句

  18. 18

    在select子句的另一个案例中使用案例列

  19. 19

    在一个案例中有多个选项,然后在案例中循环

  20. 20

    如何在R中创建一个新变量,如果一个案例缺少一个值而另一个变量具有一个观察到的值,则返回1?

  21. 21

    一旦其中一个工人满足特定条件,终止Python多处理程序

  22. 22

    将一个案例类转换为具有相同结构但具有一个附加字段的另一个案例类

  23. 23

    是否有可能在一个案例中有一个案例,例如是否在一个if中

  24. 24

    如何在Swift中写一个空的案例?

  25. 25

    如何在一个switch语句中合并两个case语句

  26. 26

    为什么一个案例中的内容决定了是否应该正确修剪另一个案例的内容?

  27. 27

    如何合并两个案例类并将它们作为一个存储在表中?

  28. 28

    通过展开Scala 3中的类型将案例类转换为另一个案例类

  29. 29

    在提升后的映射中将案例类包含在另一个案例中

热门标签

归档