Я следовал руководству по c ++ по написанию простой игры в тетрис. Я пишу на C #, так что это было довольно сложно. Я использую массив, который состоит из 0, 1, 2 (давайте просто скажем, что это точка разворота). Моя проблема в том, что я хочу начать писать 1,2 с верхней части консоли, исключая 0. Я пытался использовать GetXInitialPosition()
и GetYInitialPosition()
, которые возвращают отрицательные значения, чтобы нарисовать блок, исключая нули над формой, в методе Console.SetCursorPosition()
. Этот метод не может принимать отрицательные значения, потому что он должен рисовать над окном консоли. В конце приведен пример кода. Я хочу пропустить все выше 00210 и начать рисовать оттуда. Все, что я действительно хочу сделать, это найти способ рисовать над консолью.
Вот учебник, которому я следовал http://javilop.com/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners/
А вот и мой код:
class Tile
{
public Tile()
{
pPiece = SetRandomShape();
pRotation = 0;
}
public int GetBlockType(int whichBlock, int pRotation, int pX, int pY)
{
return Block1[whichBlock, pRotation, pX, pY];
}
public int GetXInitialPosition()
{
return BlockInitialPosition[pPiece, pRotation, 0];
}
public int GetYInitialPosition()
{
return BlockInitialPosition[pPiece, pRotation, 1];
}
public void Print(int xPos, int yPos)
{
for (int i = 0; i < Block.GetLength(2); i++)
{
for (int j = 0; j < Block.GetLength(3); j++)
{
if ((GetBlockType(pPiece, pRotation, j, i) == 1))
{
Console.SetCursorPosition(xPos + i, yPos + j);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(GetBlockType(pPiece, pRotation, j, i));
}
else if ((GetBlockType(pPiece, pRotation, j, i) == 2))
{
if (yPos + j >= 0)
{
Console.SetCursorPosition(xPos + i, yPos + j);
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(GetBlockType(pPiece, pRotation, j, i));
}
}
else //displaying 00
{
Console.SetCursorPosition(xPos + i, yPos + j);
Console.ForegroundColor = ConsoleColor.White;
Console.Write(GetBlockType(pPiece, pRotation, j, i));
}
}
Console.WriteLine(" ");
}
}
private int[,,,] Block = new int[7, 4, 5, 5] //7 kinds , 4 rotation / 5 horizontal / 5 vertical
{
{
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 1, 0},
{0, 0, 1, 1, 0},
{0, 0, 0, 0, 0}
},
private int[,,] BlockInitialPosition = new int[7, 4, 2] // 7 kinds , 4 rotations , horizontal value of row that needs to be removed , vertical value of row that needs to be removed
/* Square */
{
{-2, -3},
{-2, -3},
{-2, -3},
{-2, -3}
},