为数组创建分数方法

时间:2016-02-04 02:49:18

标签: c# arrays loops methods

我的目标是为基于数组的简单游戏创建一个得分方法。游戏包括将'R'或'B'放在数组中的11个位置之一。数组填满后,得分方法将按如下方式执行:

任何单个'R'或'B'值得0分

任何一对'R'或'B'都值4分

任何三倍的'R'或'B'值得6分

......等等。

我在计算分数时遇到了麻烦,我觉得我错过了一些明显的东西,所以我来这里。我的代码寻找成对并在分数上加2,但我最终错过了2分(因为第一对价值4而且每个额外的“对”值得另外2)。

public int score(char color)
{
    int score = 0;

    for (int i = 0; i < gameBoard.Length - 1; i++)
    {
        if (gameBoard[i] == color && gameBoard[i + 1] == color)
            score += 2;
        else
            score += 0;
    }

    return score;
}

4 个答案:

答案 0 :(得分:2)

您的问题可以通过正则表达式来解决。

GetCharacterSequences

和函数的概念:每对成本为4分,每对成本为6分,因此每个单一成本为2分。

CalculateScore看起来有点复杂,但它使Parse.initialize(this, "xxxxxxxxxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyyyyy"); ParseInstallation.getCurrentInstallation().saveInBackground(); ParsePush.subscribeInBackground("words"); 方法非常简单。

答案 1 :(得分:0)

您可以创建一个布尔变量并使用它来确定添加的点数。

注意:此代码不会考虑您在问题中提到的三重匹配。

public int score(char color)
{
    int score = 0;
    bool firstMatch = true;

    for (int i = 0; i < gameBoard.Length - 1; i++)
    {
        if (gameBoard[i] == color && gameBoard[i + 1] == color) {
            if (firstMatch == true) {
                score += 4;
                firstMatch = false;
            } else {
                score += 2;
            }
        }
        else
        {
            score += 0;
        }
    }
    return score;
}

答案 2 :(得分:0)

这是另一种方法,基于一对是4点,3是6点,假设4是8点等等(基本上相邻颜色的数量* 2,如果至少有一对)。

public int score(char color)
{

    int adj = 0;
    int score = 0;

    for (int i = 0; i < gameBoard.Length; i++)
    {
        if (gameBoard[i] == color)
        {
            adj++;
        }
        else
        {
            if (adj > 1)
            {
                score += adj * 2;
            }
            adj = 0;
        }
    }
}

此代码循环遍历数组,并保留由指定颜色标记的相邻点的数量。当涉及到不正确颜色的数组元素时,它会检查有多少相邻元素具有正确的颜色。

如果它大于1,则它将相邻元素的数量乘以2并将相邻元素的计数器重置为0并继续通过数组。

给出一系列'R','R','B','B','B','R','R','R','B','R','B' ,它为'R'(4 + 6)得分为10,'B'得6得分(6),如下:

'R', 'R' = 4
'R', 'R', 'R' = 6
'R' = 0

'B', 'B', 'B' = 6
'B' = 0

答案 3 :(得分:0)

这是我提出的

namespace TestApp1
{
    class Program
    {

        static void Main(string[] args)
        {

            string[] test = GetValues();
            string testView = String.Join(String.Empty, test);
            string score = GetScore(test).ToString();
            Console.WriteLine(testView);
            Console.WriteLine(score);
            Console.ReadLine();
        }

        public static int GetScore(string[] test)
        {

            int score = 0;
            int occurence = 0;
            string LastChar = string.Empty;

            for (int i = 0; i < test.Length; i++)
            {

                if(LastChar == string.Empty)
                {
                    LastChar = test[i];
                    occurence += 1;
                    continue;
                }

                if(LastChar == test[i])
                {
                    occurence += 1;

                    if(i == test.Length - 1)
                    {
                        if (occurence > 1)
                        {
                            score += occurence * 2;
                        }
                    }

                }
                else
                {

                    if(occurence > 1)
                    {
                        score += occurence * 2;
                    }

                    LastChar = test[i];
                    occurence = 1;

                }

            }

            return score;

        }


        public static string[] GetValues()
        {

            List<string> values = new List<string>();

            for (int i = 0; i < 12; i++)
            {

                var rnd = new Random(DateTime.Now.Millisecond);
                int ticks = rnd.Next(0, 2);

                values.Add(ticks == 1 ? "R" : "B");
                System.Threading.Thread.Sleep(2);

            }

            return values.ToArray();

        }

    }

}

独立计算每个分数

namespace TestApp1
{
    class Program
    {

        static void Main(string[] args)
        {

            string[] test = GetValues();
            string testView = String.Join(String.Empty, test);
            int rScore = 0;
            int bScore = 0;

            GetScore(test,out rScore, out bScore);

            string score = "R: " + rScore.ToString() + "  B: " + bScore.ToString();
            Console.WriteLine(testView);
            Console.WriteLine(score);
            Console.ReadLine();
        }

        public static void GetScore(string[] test, out int rScore, out int bScore)
        {

            int occurence = 0;
            string LastChar = string.Empty;

            rScore = 0;
            bScore = 0;

            for (int i = 0; i < test.Length; i++)
            {

                if(LastChar == string.Empty)
                {
                    LastChar = test[i];
                    occurence += 1;
                    continue;
                }

                if(LastChar == test[i])
                {
                    occurence += 1;

                    if(i == test.Length - 1)
                    {
                        if (occurence > 1)
                        {
                            if(LastChar == "R")
                            {
                                rScore += occurence * 2;
                            }
                            else
                            {
                                bScore += occurence * 2;
                            }
                        }
                    }

                }
                else
                {

                    if(occurence > 1)
                    {
                        if (LastChar == "R")
                        {
                            rScore += occurence * 2;
                        }
                        else
                        {
                            bScore += occurence * 2;
                        }
                    }

                    LastChar = test[i];
                    occurence = 1;

                }

            }

        }


        public static string[] GetValues()
        {

            List<string> values = new List<string>();

            for (int i = 0; i < 12; i++)
            {

                var rnd = new Random(DateTime.Now.Millisecond);
                int ticks = rnd.Next(0, 2);

                values.Add(ticks == 1 ? "R" : "B");
                System.Threading.Thread.Sleep(2);

            }

            return values.ToArray();

        }

    }

}