C# Windows Form. Надо написать игру Быки и Коровы, только со словами
Всем привет, я прекрасно знаю что данная игра связана с числами, но мне дали такую курсовую. Так вот в чем проблема, мне нужно подсчитать количество быков и коров, быки у меня подсчитываются хорошо. Но вот коровы вообще не считаются. Вот мой фрагмент кода, который я использовал.
private int CalculaterCowsCount(string text)
{
int cowscount = 0;
for (int i = 0; i < secret_word.Length; i++)
{
if (secret_word[i] == textBox1.Text.ToLower()[i])
{
continue;
}
for (int t = 0; t < secret_word.Length; t++)
{
if (secret_word[t] == textBox1.Text.ToLower()[i] && (secret_word.Substring(1).Contains(textBox1.Text.ToLower()[i]) && secret_word.Substring(0, i).Contains(textBox1.Text.ToLower()[i])))
{
cowscount++;
break;
}
}
}
return cowscount;
У меня считались коровы когда на месте textBox1.Text.ToLower()[i] был i-1, но он постоянно выдавал ошибку если вводишь слово, и оно начинается на любую букву, которая стоит после первой. Буду благодарен любой помощи, заранее спасибо!
Ответы (1 шт):
Было время когда писали подобие этой игры на Delphi...
Вроде сначала производили поиск быков и записывали отдельно в массив найденные индексы букв.
List<int> bulls = new List<int>();
for (int i = 0; i < input.Length; i++)
{
if (i >= secret.Length) break;
if (input[i] == secret[i]) bulls.Add(i);
}
Поиск коров можно упростить убрав найденные быки с искомых слов.
string tempInput = input;
string tempSecret = secret;
for (int i = bulls.Count - 1; i >= 0; i--)
{
tempSecret = tempSecret.Remove(bulls[i]);
tempInput = tempInput.Remove(bulls[i]);
}
А уже затем произвести поиск коров. Можно даже исключить повторяющиеся буквы, если вести массив с найденными коровами.
List<char> cows = new List<char>();
for (int i = 0; i < tempInput.Length; i++)
{
if (cows.Contains(tempInput[i])) continue; // исключаем повторение букв
if (tempSecret.Contains(tempInput[i])) cows.Add(tempInput[i]);
}
В итоге будет:
bulls.Count- количество быков;cows.Count- количество коров.
Надеюсь, это поможет решить задачу.