MurcsRoyce Ответов: 2

Как мне кодировать 2 набора из трех ?


<pre>#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;

        #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, 5 + 1);

               
                     diceResults[dice[i]]++;
            }
            

            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, twoSets = false,
                twoPair = false, onePair = false, haveSix = false, haveFive = false,
                haveFour = false, haveThree = false, haveTwo = false, haveOne = 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] == 3)
                            twoSets = 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 (twoSets)
                lbl_displayResults.Text = "Two Sets of Three";
            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
    }
}


Что я уже пробовал:

бесчисленное множество различных циклов и операторов if. всегда получаешь три штуки! Кажется, я не могу заставить компилятор понять, что существует 2 разных набора из трех.

2 Ответов

Рейтинг:
2

MurcsRoyce

else if (diceResults[i] == 3)
   {
       threeKind = true;

       for (int j = 0; j < diceResults.Length; j++)
       {

           if (diceResults[j] == 3)
               twoSets = true;
       }
   }


печатает 3 вида, когда ясно, что у меня есть 2 комплекта по три!


Patrice T

Этого нет в коде вашего вопроса.

MurcsRoyce

Я обновил исходный код вопросов, с моей попыткой 2 набора из 3

Patrice T

Похоже, вы удалили код для "фуллхауса"

MurcsRoyce

да, просто для понимания, я бросаю его обратно прямо сейчас. кроме того, глядя на полный код дома, я путаю свою голову и логику. поэтому, когда я его удалил, я смог сосредоточиться на текущей задаче. (2 комплекта по 3 штуки)

моя главная проблема заключалась в том, чтобы получить результат 3 в своем роде, когда у меня было 2 сета.
повторение одной и той же петли привело к такому результату. Теперь у меня работают три четверти и две четверти.

MurcsRoyce

else if (diceResults[i] == 3)
{
threeKind = истина;


for (int j = i + 1; j < diceResults.Длина; j++)
{
if (diceResults[j] == 3)
twoSets = true;
}
}

в любом случае спасибо , я решил свою собственную проблему

Рейтинг:
18

Patrice T

Этот код слишком сложен:

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;
}

и может быть заменен на
diceResults[dice[i]]++;

Цитата:
Как мне кодировать 2 набора из трех ?

Как я понимаю,ваш код не пытается искать 2 набора из 3 или 3 набора из 2. Пожалуйста, покажите попытку.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


MurcsRoyce

else if (diceResults[i] == 3)
{
threeKind = истина;

for (int j = 0; j < diceResults.Длина; j++)
{

if (diceResults[j] == 3)
twoSets = true;
}
}
печатает 3 вида, когда ясно, что у меня есть 2 комплекта по три!