Выполнить какое-либо действие, если в течении определенного времени не поступило другое действие

Пытаюсь воссоздать функцию падения.

if (под пользователем есть пол) 
             {обычная работа программы}
        else
           { 
           if (пользователь в течении одной секунды задал направление падения(право/лево))
                {пользователь падает в этом направлении}
           else   
                {пользователь падает вниз}  

Интересует конкретно реализация ожидания ввода, по истечению ожидания делается то или иное действие. Все это действие происходит в массиве чаров и выводится в консоль.

using System;
using System.IO;



namespace miniGame2_platform_
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            char[,] playGround = CreatePlayground();
            char plaeeyr = '@';
            int playerX = 27;
            int playerY = 1;
            playGround[playerX, playerY] = plaeeyr;
            DrawPlayground(playGround);

            while (true)
            {

                if (playerY+1 != '#')
                {
                    GameLogic(playGround, ref playerY, ref playerX);
                    DrawPlayground(playGround);
                }
                else
                {
                    /*
                     
                     Вот тут я хочу организовать это разветвление
                     
                     */
                }

            }
        }

        private static char[,] CreatePlayground()
        {
            string[] file = File.ReadAllLines(@"d:\Programs\Progect\miniGame2(platform)\playground.txt");

            char[,] playGround = new char[MaxLenghtOfLineInFile(file), file.Length];

            for (int x = 0; x < playGround.GetLength(0); x++)
                for (int y = 0; y < playGround.GetLength(1); y++)
                {
                    playGround[x, y] = file[y][x];
                }

            return playGround;
        }

        private static int MaxLenghtOfLineInFile(string[] lines)
        {
            int maxLenght = lines.Length;

            foreach (string line in lines)
            {
                if (line.Length > maxLenght)
                    maxLenght = line.Length;
            }

            return maxLenght;
        }

        private static void DrawPlayground(char[,] playGround)
        {

            Console.SetCursorPosition(0, 0);
            for (int y = 0; y < playGround.GetLength(1); y++)
            {
                for (int x = 0; x < playGround.GetLength(0); x++)
                {
                    Console.Write(playGround[x, y]);
                }
                Console.WriteLine();
            }

        }

        private static void PlayerMove(char[,] playGround, string direction, ref int playerY, ref int playerX)
        {
            switch (direction)
            {
                case "left":
                    if (playGround[playerX - 1, playerY] != '#')
                    {
                        playGround[playerX, playerY] = ' ';
                        playerX -= 1;
                        playGround[playerX, playerY] = '@';
                    }
                    break;
                case "right":
                    if (playGround[playerX + 1, playerY] != '#')
                    {
                        playGround[playerX, playerY] = ' ';
                        playerX += 1;
                        playGround[playerX, playerY] = '@';
                    }
                    break;
            }
        }

        private static char[,] GameLogic(char[,] playGround, ref int playerY, ref int playerX)
        {
            ConsoleKeyInfo key = Console.ReadKey();

            switch (key.Key)
            {
                case ConsoleKey.A:
                    PlayerMove(playGround, "left", ref playerY, ref playerX);
                    break;
                case ConsoleKey.D:
                    PlayerMove(playGround, "right", ref playerY, ref playerX);
                    break;                         
// попробовать передавать в функцию движения информацию о нажатой клавише

            }
            return playGround;
        }

    }
}

Функции прыжка пока что нету. Не думаю, что это будет сложно и как-то отличаться от обычного движения. Содержание подгружаемого файла.

#######################################
#                                     #
#                                     #
#                                     #
#                                     #
#          ################           #
#                                     #
#                                     #
#      ####               ########    #
###########       #####################
#######################################

Прошу прощение за странную подачу вопроса, я и сам не особо понимаю как его задать. Спасибо.


Ответы (0 шт):