Выполнить какое-либо действие, если в течении определенного времени не поступило другое действие
Пытаюсь воссоздать функцию падения.
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;
}
}
}
Функции прыжка пока что нету. Не думаю, что это будет сложно и как-то отличаться от обычного движения. Содержание подгружаемого файла.
#######################################
# #
# #
# #
# #
# ################ #
# #
# #
# #### ######## #
########### #####################
#######################################
Прошу прощение за странную подачу вопроса, я и сам не особо понимаю как его задать. Спасибо.