Как получить 2 набора из трех (333666) и дикие кости, используемые как любые 1-6
#region Using Statements using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; #endregion namespace DiceGame { public partial class Form1 : Form { #region Declaration Image[] diceImages; int[] dice; int[] diceResults; Random rand; bool isHeld1 = false; bool isHeld2 = false; bool isHeld3 = false; bool isHeld4 = false; bool isHeld5 = false; bool isHeld6 = false; #endregion #region Initialization public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { diceImages = new Image[7]; diceImages[0] = Properties.Resources.dice_blank; diceImages[1] = Properties.Resources.dice_1; diceImages[2] = Properties.Resources.dice_2; diceImages[3] = Properties.Resources.dice_3; diceImages[4] = Properties.Resources.dice_4; diceImages[5] = Properties.Resources.dice_5; diceImages[6] = Properties.Resources.dice_6; dice = new int[6] { 0, 0, 0, 0, 0, 0, }; diceResults = new int[6] { 0, 0, 0, 0, 0, 0 }; rand = new Random(); } #endregion #region Private Methods private void btn_rollDice_Click(object sender, EventArgs e) { RollDice(); GetResults(); ResetResults(); } private void RollDice() { for (int i = 0; i < dice.Length; i++) { dice[i] = rand.Next(1, 6 + 1); switch (dice[i]) { case 1: diceResults[0]++; break; case 2: diceResults[1]++; break; case 3: diceResults[2]++; break; case 4: diceResults[3]++; break; case 5: diceResults[4]++; break; case 6: diceResults[5]++; break; } } lbl_dice1.Image = diceImages[dice[0]]; lbl_dice2.Image = diceImages[dice[1]]; lbl_dice3.Image = diceImages[dice[2]]; lbl_dice4.Image = diceImages[dice[3]]; lbl_dice5.Image = diceImages[dice[4]]; lbl_dice6.Image = diceImages[dice[5]]; } private void GetResults() { bool fiveKind = false, fourKind = false, highStraight = false, fullHouse = false, threeKind = false, twoPair = false, onePair = false, haveSix = false, haveFive = false, haveFour = false, haveThree = false, haveTwo = false, haveOne = false, ThreePair = false; for (int i = 0; i < diceResults.Length; i++) { if (diceResults[i] == 5) fiveKind = true; else if (diceResults[i] == 4) fourKind = true; else if (diceResults[1] == 1 && diceResults[2] == 1 && diceResults[3] == 1 && diceResults[4] == 1 && diceResults[5] == 1) highStraight = true; else if (diceResults[i] == 3) { threeKind = true; for (int j = 0; j < diceResults.Length; j++) { if (diceResults[j] == 2) fullHouse = true; } } else if ( diceResults[i] == 2) { onePair = true; for (int j = i + 1; j < diceResults.Length; j++) { if (diceResults[j] == 2) twoPair = true; } } } for (int i = 0; i < dice.Length; i++) { switch (dice[i]) { case 6: haveSix = true; break; case 5: haveFive = true; break; case 4: haveFour = true; break; case 3: haveThree = true; break; case 2: haveTwo = true; break; case 1: haveOne = true; break; } } if (fiveKind) lbl_displayResults.Text = "Five of a Kind"; else if (fourKind) lbl_displayResults.Text = "Four of a Kind"; else if (highStraight) lbl_displayResults.Text = "High Straight"; else if (fullHouse) lbl_displayResults.Text = "Full House"; else if (threeKind) lbl_displayResults.Text = "Three of a Kind"; else if (twoPair) lbl_displayResults.Text = "Two Pair"; else if (onePair) lbl_displayResults.Text = "One Pair"; else if (haveSix) lbl_displayResults.Text = "Six High"; else if (haveFive) lbl_displayResults.Text = "Five High"; else if (haveFour) lbl_displayResults.Text = "Four High"; else if (haveThree) lbl_displayResults.Text = "Three High"; else if (haveTwo) lbl_displayResults.Text = "Two High"; else if (haveOne) lbl_displayResults.Text = "One High"; } private void ResetResults() { for (int i = 0; i < diceResults.Length; i++) diceResults[i] = 0; } #endregion } }
получение 2 наборов из 3 (всего шесть кубиков, (333666)) кажется сложной задачей.
еще одна задача, над которой я застрял на несколько месяцев, - это поставить a (star wild), который действует как 1-6, что a
пользователь может использовать, чтобы сделать лучшую руку. Я знаю, что 2 набора из 3 находятся где-то в diceresults threeKind, но я не могу получить его. просто изменение 2 на 3 не работает. любая помощь с ними будет отличной. спасибо
Что я уже пробовал:
выделите различные комбинации, кажется, я никогда не смогу получить что-нибудь, чтобы принять 2 набора из трех
редактирование threeKind-это то, где должен быть мой цикл, я думаю, но логика, которую я пытаюсь ввести, неверна.
петли внутри петель становятся для меня немного нечеткими.
PIEBALDconsult
Как раз перед тем, как проверить, нет ли аншлага? Проверьте остальные результаты, чтобы увидеть, есть ли еще 3.
MurcsRoyce
спасибо, что так быстро ответили. Я действительно ценю это. Я сразу же займусь этим и дам вам знать, если смогу заставить его работать. спасибо
MurcsRoyce
for (int j = i + 2; j < diceResults.Длина; j++)
{
if (diceResults[j] == 3)
TwoSets = true;
}
это работало и было очень просто. непонимание логики иногда сбивает с толку, но вы поставили меня именно туда, где я должен был быть.
Если вы готовы к этому, может быть, вы можете поставить меня в правильном направлении для диких костей, которые могут быть любым числом, чтобы увеличить руку игроков
PIEBALDconsult
i + 2 ? Не я + 1 ?
[no name]
Кроме того, вы знаете, что фуллхаус-это не 2 комплекта из трех, верно? Если только вы не хотите запутать людей и пересмотреть правила.
MurcsRoyce
Я имею в виду, как вы делаете 6-сторонние кости 1 или 2 или 3 или 4 или 5 или 6 на каждой из шести сторон. на усмотрение пользователей ? безумная логика! и пусть игра поймет, что 1-2-3-4-wild-wild = straight
MurcsRoyce
также похоже, что ничего не получилось. Я получил результат, как только подумал, но после того, как запустил его снова, он снова не работает . я продолжу пытаться
PIEBALDconsult
И он это знает.
MurcsRoyce
ладно, я снова расстроен. это сводит меня с ума. в любом случае я собираюсь сделать перерыв и сбегать в магазин. я скоро вернусь, чтобы разобраться во всем этом.
PIEBALDconsult
Возможно, вы не знакомы с игрой "Cosmic Wimpout", но это пять шестигранных кубиков с одной из троек, замененных диким.
Я реализовал его в Turbo Pascal (в 1989 году) и в C#/WinForms (в 2004 году).
В первый раз, когда я дошел до той стадии, когда все, что мне нужно было написать, - это анализатор бросков (над чем вы работаете) Я был в значительной степени озадачен и не работал над этим больше года, пока не решил, хочу ли я сделать последовательность ifs (как вы, и это то, что я в конечном итоге сделал) или есть способ сохранить какую-то двоичную таблицу поиска.
MurcsRoyce
Я чувствую себя сейчас самым большим идиотом....
else if (diceResults[i] == 3)
{
threeKind = истина;
for (int j = 0; j < diceResults.Длина; j++)
{
if (diceResults[j] == 3)
************** threeKind = ложь; *********&это было&ГТ;
twoSets = true;
}
нереально, это было так просто, что я не могу поверить, что не мог найти логику в своей голове в течение трех дней...
MurcsRoyce
опять провал . Я так разволновалась, как будто наконец-то поняла. threeKind отменяется и считывает два набора из трех как для 3-х видов, так и для 2-х наборов.....
начать всё с начала. независимо от того, что я делаю, он всегда читает threeKind. как будто он не может справиться с 2 различными наборами из 3. он думает, что его всегда 3 в своем роде.
PIEBALDconsult
Я думаю, ты хочешь
int j = i+1
Но, да, отмените threeKind,что вам нужно сделать и для fullHouse.
MurcsRoyce
все еще не могу понять 2 набора из трех и диких кубиков