我的目标是为基于数组的简单游戏创建一个得分方法。游戏包括将'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;
}
答案 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();
}
}
}