c#在另一个计时器中使用计时器

本文关键字:计时器 另一个 | 更新日期: 2023-09-27 18:03:00

我正在编写俄罗斯方块游戏。到目前为止,我已经实现了一个非常短的间隔约50毫秒的计时器。每隔一秒,当前下落的tetrmino就会在游戏矩阵中向下移动一个位置。然后游戏检查是否有碰撞,如果有,则标记为"着陆",并生成新的tetromino。

不,我的问题是,我想让玩家有机会将tetromino移动到左边或右边,假设在它降落0.5秒后,有可能将tetromino移动到悬垂的已经降落的tetromino下面。

但与我目前的代码,我有问题,只要有一个碰撞检测定时器继续并产生下一个四足。我现在的想法是尝试实现第二个计时器,每次检测到碰撞时激活0.5秒,以便在主计时器继续之前允许额外的键盘输入。所以基本上暂停主计时器0.5秒,让程序在这段时间内检测键盘输入,然后继续主计时器。

到目前为止,我所尝试的一切都没有真正奏效。似乎第一个计时器总是继续运行,而我有第二个计时器活动。

这是我的第一个计时器的样子:

private void TimerBrick_Tick(object sender, EventArgs e)
        {
            ResetGameBoard(jaggedTetrisBricks[rnd-1][rotation], _brickX, _brickY, xLengthBrick, yLengthBrick);
            _brickX++;
            CollisionCheck(jaggedTetrisBricks[rnd - 1][rotation], _brickX, _brickY, xLengthBrick, yLengthBrick);
            LineCheck();
            Invalidate();
        }

现在我需要在我的CollisionCheck()方法中实现一种方法,在代码继续执行LineCheck()之前等待0.5秒。

还是我现在看不到的另一种方式?

c#在另一个计时器中使用计时器

除了我之前的评论-这里是一点伪代码:

enum GameState
{
    Starting,
    CreateBrick,
    BrickFalling,
    MoveSideways
}
private GameState curState = Starting;
private ushort ctSideways;
private void TimerBrick_Tick(object sender, EventArgs e)
{
    switch (curState)
    {
        case Starting:
            InitialiseGame();
            curState = CreateBrick;
            break;
        case CreateBrick:
            CreateNewBrick();
            curState = BrickFalling;
            break;
        case BrickFalling:
            .....
            .....
            if (CollisionCheck())
            {
                ctSideways = 0;
                curState = MoveSideways;
            }
            break;
        case MoveSideways:
            .....
            .....
            ctSidways++;
            if (ctSideways == 10)
                curState = CreateBrick;
            break;
    }
}