如何正确使用Switch-Case减少线路

Jay*_*sby 3 c#

我正在做一个二十一点游戏项目.我有一种helper()方法可以帮助用户完成他们的行为.例如:

经销商的上牌是:8 玩家手牌总数是:16

球员不确定,他应该击中还是留下.helper()功能在这里采取行动.

它基本上计算了甲板上好卡的数量(playerTotal+ goodcard<= 21)

所以我正在考虑以这种方式做到这一点(伪代码)

public void helper() {

    remain = 21 - playerTotal;

    if (remain == 1) {
        for (int i = 0; i < deck.last(); i++) {
            switch (deck[i]) {
                case A: numOfGood += 1
                default: numOfBad +=1
            }
        }
    }
    else if (remain == 2) {
        for (....) {
            switch (deck[i]) {
                case A: numOfGood += 1
                case 2: numOfGood += 1
                default: numOfBad +=1
            }
        }
    }

//goes like this

}
Run Code Online (Sandbox Code Playgroud)

我需要为所有卡(A,2,3,4,5,6,7,8,9,J,K,Q,K)构建一个switch-case和for循环,但它似乎是一个巨大的混乱.如何通过做一些不同的事情减少行数?

Ser*_*rvy 9

首先编写一个GetValue可以计算卡片(最小)数值的方法.您可以使用switch或者您想要的其他方式实现它:

public static int GetValue(char card)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

一旦你有你的方法的实现变得短和更简单:

foreach(var card in deck)
    if(GetValue(card) <= remain)
        numOfGood++;
    else
        numOfBad++;
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以只计算好卡坏卡的数量,并根据需要使用剩余的总卡来计算另一张卡.

var oddsOfSuccessfulHit = deck.Count(card => GetValue(card) <= remain) / 
    (double) deck.Count;
Run Code Online (Sandbox Code Playgroud)