예제 #1
0
 /// <summary>
 /// Loop principal do jogo
 /// </summary>
 public void Update()
 {
     try{
         while (true)
         {
             board.ClearBlock(currentBlock);
             if (currentBlock == null)
             {
                 currentBlock = nextBlock;
                 nextBlock    = new Block((board.Width / 2) - 2, 0);
                 if (!board.ValidBlockLocation(nextBlock, nextBlock.PosX, nextBlock.PosY))
                 {
                     this.gameOver = true;
                     update.Interrupt();
                 }
             }
             MoveBlock();
             Thread.Sleep(400);
             board.DrawBlock(currentBlock);
             if (sendNextBlock)
             {
                 Console.SetCursorPosition(0, board.Height + 4);
                 Console.Write("Checking full lines");
                 this.points  += (board.CheckFullLine(currentBlock.PosY) * basePoints);
                 sendNextBlock = false;
                 currentBlock  = null;
             }
             board.DrawBoard();
             board.DrawScore(this.points);
             board.DrawNextBlock(nextBlock);
             Thread.Sleep(5);
         }
     }catch (Exception) {}
 }
예제 #2
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            var state = inputManager.HandleInput();

            if (state.isPausePressed)
            {
                paused = !paused;
            }

            if (!paused && !gameLost)
            {
                board.ClearBlock(currBlock);

                if (state.isUpPressed)
                {
                    while (board.BlockCanMove(currBlock, 0, 1))
                    {
                        currBlock.MoveDown(1);
                    }
                    currBlock.IsSet = true;
                }
                if (state.isDownPressed && board.BlockCanMove(currBlock, 0, 1))
                {
                    currBlock.MoveDown(1);
                }
                if (state.isRightPressed && board.BlockCanMove(currBlock, 1, 0))
                {
                    currBlock.HorizontalMove(true);
                }
                if (state.isLeftPressed && board.BlockCanMove(currBlock, -1, 0))
                {
                    currBlock.HorizontalMove(false);
                }
                if (state.isRotateLeftPressed)
                {
                    currBlock.RotateLeft();
                }
                if (state.isRotateRightPressed)
                {
                    currBlock.RotateRight();
                }
                if (state.isHoldPressed)
                {
                    HoldBlock();
                }


                // TODO: Add your update logic here
                var time  = gameTime.TotalGameTime;
                var delta = time - _lastUpdate;
                totalTime += gameTime.ElapsedGameTime;


                if (delta.TotalMilliseconds > blockUpdateDelta)
                {
                    _lastUpdate = time;
                    if (board.BlockCanMove(currBlock, 0, 1))
                    {
                        currBlock.MoveDown(1);
                    }
                }

                currBlock.Update((float)gameTime.ElapsedGameTime.TotalMilliseconds);
                board.UpdateBlock(currBlock);

                if (currBlock.IsSet)
                {
                    currBlock = blockQueue.Dequeue();
                    AddBlock();
                    score   += board.Update();
                    gameLost = board.DidLose();
                }
            }
            nextBlockDisplay.Block = blockQueue.Peek();

            base.Update(gameTime);
        }