У меня проблема с кодированием / математикой, и мне нужна помощь в переводе на C #.Это калькулятор покерных фишек, который учитывает BuyIn, количество игроков и общее количество фишек для каждого цвета (их количество х), а также их стоимость.
Затем отображаются все возможные комбинациифишек на человека, чтобы равняться Buy In.Затем пользователь может выбрать дистрибутив чипсета, который он хотел бы использовать.Лучше всего это проиллюстрировать на простом примере.
- BuyIn: $ 10
- Количество игроков: 1
- 10 красных фишек, стоимость $ 1
- 10 синих фишек, стоимость $ 2
- 10 зеленых фишек, стоимость 5 долларов
Итак, возможные комбинации:
R / B / G
- 10/0/0
- 8/1/0
- 6/2/0
- 5/0/1
- 4/3/0
- 2/4/0
- 1/2/1
и т. Д.
Я потратил много времени, пытаясь поднятьсяс алгоритмом в C # /. NET, чтобы решить это.Я натыкаюсь на переменный фактор - обычно в наборе всего 3 или 4 разных цвета фишек, но их может быть любое количество.Если у вас есть более одного игрока, то вы должны считать до TotalChips / NumberOfPlayers.
Я начал с цикла по всем фишкам, а затем с 0 до NumberOfChips для этого цвета.И это в значительной степени то, где я провел последние 4 часа ... как мне написать код для циклического прохождения x количества фишек, проверки значения суммы фишек и добавления его в коллекцию, если она равна BuyIn?Мне нужно радикально изменить мой подход ...
Может кто-нибудь подсказать мне, как решить эту проблему, пожалуйста?Псевдокод будет работать - спасибо за любой совет!
Ниже моя попытка ниже - это безнадежно (и не будет компилироваться, просто пример, чтобы показать вам мой мыслительный процесс до сих пор) - Может быть, лучше не делать этогопосмотрите на это, так как это может повлиять на ваше решение ...
private void SplitChips(List<ChipSuggestion> suggestions)
{
decimal valueRequired = (decimal)txtBuyIn.Value;
decimal checkTotal = 0;
ChipSuggestion suggestion;
//loop through each colour
foreach (Chip chip in (PagedCollectionView)gridChips.ItemsSource)
{
//for each value, loop through them all again
foreach (Chip currentChip in (PagedCollectionView)gridChips.ItemsSource)
{
//start at 0 and go all the way up
for (int i = 0; i < chip.TotalChipsInChipset; i++)
{
checkTotal = currentChip.ChipValue * i;
//if it is greater than than ignore and stop
if (checkTotal > valueRequired)
{
break;
}
else
{
//if it is equal to then this is a match
if (checkTotal == valueRequired)
{
suggestion = new ChipSuggestion();
suggestion.SuggestionName = "Suggestion";
chipRed.NumberPerPlayer = i;
suggestion.Chips.Add(chipRed);
chipBlue.NumberPerPlayer = y;
suggestion.Chips.Add(chipBlue);
chipGreen.NumberPerPlayer = 0;
suggestion.Chips.Add(chipGreen);
//add this to the Suggestion
suggestions.Add(suggestion);
break;
}
}
}
}
}
}