C # Выполнение нескольких методов одновременно, параллелизм методов - PullRequest
0 голосов
/ 01 декабря 2019

Это мой первый вопрос. Я создаю простую программу для моего класса C # для имитации игрового автомата, и я эмулирую столбцы? вращающийся эффект с этим битом кода

 static void EfeitoJackpot()
        {
            string[] simbolos = new string[10] { "!", "#", "$", "%", "&", "=", "@", "~", "»", "«" };
            Console.SetCursorPosition(25, 1);
            for (int i = 0; ; i++)
            {

                Console.Write(simbolos[i % 10] + "\b");


                System.Threading.Thread.Sleep(80); // velocidade

            }
        }

Теперь моя проблема в том, что я хочу, чтобы это происходило 3 раза одновременно. Я читал о многопоточности и параллельном цикле, но после долгих усилий я все еще застрял.

Подводя итог, я хочу, чтобы это произошло

              ** [ spinning ]    [ spinning ]    [ spinning ] **

И это то, что происходит

             ** [ spinning ] ..(method finishes executing)... [spinning] and so forth

1 Ответ

0 голосов
/ 01 декабря 2019

Поскольку вы говорите, что создаете «простую программу», вам не нужна многопоточность для этого, поскольку она усложняет вещи. Вы можете просто использовать циклическую структуру. Как то так:

const int MAX = 10;
string[] simbolos = new string[MAX] { "!", "#", "$", "%", "&", "=", "@", "~", "»", "«" };

// Start with some random positions for each column.
Random r = new Random();
int column1Index = r.Next(MAX);
int column2Index = r.Next(MAX);
int column3Index = r.Next(MAX);

// Track overall status, and status of each column.
bool keepSpinning = true;
bool spin1 = true, spin2 = true, spin3 = true;

while (keepSpinning)
{
    Console.WriteLine($"{simbolos[column1Index]} {simbolos[column2Index]} {simbolos[column3Index]}");

    if (spin1)
    {
        column1Index = column1Index < MAX - 1 ? column1Index + 1 : 0;
        spin1 = SomethingToDetermineIfColumnShouldKeepSpinning(1);
    }

    if (spin2)
    {
        column2Index = column2Index < MAX - 1 ? column2Index + 1 : 0;
        spin2 = SomethingToDetermineIfColumnShouldKeepSpinning(2);
    }

    if (spin3)
    {
        column3Index = column3Index < MAX - 1 ? column3Index + 1 : 0; 
        spin3 = SomethingToDetermineIfColumnShouldKeepSpinning(3);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...