Width & Height take rotations into account.
This commit is contained in:
parent
10c06d8103
commit
75a8f365ce
109
Pieces.cpp
109
Pieces.cpp
@ -3,34 +3,127 @@
|
|||||||
#include <curses.h>
|
#include <curses.h>
|
||||||
#include <stdlib.h> // exit()
|
#include <stdlib.h> // exit()
|
||||||
|
|
||||||
unsigned PieceHeight(const Piece &piece)
|
unsigned PieceHeight(const Piece &piece, Rotation rotation)
|
||||||
{
|
{
|
||||||
switch(piece)
|
switch(piece)
|
||||||
{
|
{
|
||||||
case PIECE_ONE:
|
case PIECE_ONE:
|
||||||
return 2;
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 2;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 3;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
case PIECE_TWO:
|
case PIECE_TWO:
|
||||||
return 4;
|
|
||||||
break;
|
|
||||||
case PIECE_THREE:
|
case PIECE_THREE:
|
||||||
return 4;
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 4;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
case PIECE_FOUR:
|
case PIECE_FOUR:
|
||||||
return 3;
|
case PIECE_SEVEN:
|
||||||
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 3;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
case PIECE_FIVE:
|
case PIECE_FIVE:
|
||||||
|
case PIECE_EIGHT:
|
||||||
return 3;
|
return 3;
|
||||||
break;
|
break;
|
||||||
case PIECE_SIX:
|
case PIECE_SIX:
|
||||||
return 2;
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 2;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 4;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned PieceWidth(const Piece &piece, Rotation rotation)
|
||||||
|
{
|
||||||
|
switch(piece)
|
||||||
|
{
|
||||||
|
case PIECE_ONE:
|
||||||
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 3;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case PIECE_TWO:
|
||||||
|
case PIECE_THREE:
|
||||||
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 2;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 4;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case PIECE_FOUR:
|
||||||
case PIECE_SEVEN:
|
case PIECE_SEVEN:
|
||||||
return 3;
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 2;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 3;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
|
case PIECE_FIVE:
|
||||||
case PIECE_EIGHT:
|
case PIECE_EIGHT:
|
||||||
return 3;
|
return 3;
|
||||||
break;
|
break;
|
||||||
|
case PIECE_SIX:
|
||||||
|
switch(rotation)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ROTATION_NONE:
|
||||||
|
case ROTATION_180:
|
||||||
|
return 4;
|
||||||
|
case ROTATION_90:
|
||||||
|
case ROTATION_270:
|
||||||
|
return 2;
|
||||||
|
};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::exit(-1);
|
std::exit(-1);
|
||||||
|
5
Pieces.h
5
Pieces.h
@ -69,7 +69,10 @@ typedef uint8_t Piece; // only need literally 8, not 8 bits, but hey.
|
|||||||
* [][][]
|
* [][][]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned PieceHeight(const Piece &piece);
|
unsigned PieceHeight(const Piece &piece,
|
||||||
|
Rotation rotation = Rotation::ROTATION_NONE);
|
||||||
|
unsigned PieceWidth(const Piece &piece,
|
||||||
|
Rotation rotation = Rotation::ROTATION_NONE);
|
||||||
void DrawPiece(const Piece &piece, int y, int x,
|
void DrawPiece(const Piece &piece, int y, int x,
|
||||||
Rotation rotation = Rotation::ROTATION_NONE);
|
Rotation rotation = Rotation::ROTATION_NONE);
|
||||||
|
|
||||||
|
29
main.cpp
29
main.cpp
@ -96,13 +96,38 @@ void DemoPieces()
|
|||||||
for(auto rotation : rotations)
|
for(auto rotation : rotations)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
int x = 1;
|
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
// Always same distance apart:
|
||||||
|
x = 10;
|
||||||
|
y = 2;
|
||||||
for(auto i = 0; i < 8; ++i)
|
for(auto i = 0; i < 8; ++i)
|
||||||
{
|
{
|
||||||
Piece piece = static_cast<Piece>(i);
|
Piece piece = static_cast<Piece>(i);
|
||||||
DrawPiece(piece, 2, x, rotation);
|
DrawPiece(piece, y, x, rotation);
|
||||||
x += 12;
|
x += 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always same width apart:
|
||||||
|
x = 2;
|
||||||
|
y = 10;
|
||||||
|
for(auto i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
Piece piece = static_cast<Piece>(i);
|
||||||
|
DrawPiece(piece, y, x, rotation);
|
||||||
|
x += PieceWidth(piece, rotation) * 2 + 2;
|
||||||
|
}
|
||||||
|
// Always same height apart, sharing first piece with same-width row:
|
||||||
|
x = 2;
|
||||||
|
y = 10 + PieceHeight(0, rotation) + 1;
|
||||||
|
for(auto i = 1; i < 8; ++i) // skip first
|
||||||
|
{
|
||||||
|
Piece piece = static_cast<Piece>(i);
|
||||||
|
DrawPiece(piece, y, x, rotation);
|
||||||
|
y += PieceHeight(piece, rotation) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
getch();
|
getch();
|
||||||
}
|
}
|
||||||
move(8, 2);
|
move(8, 2);
|
||||||
|
Loading…
Reference in New Issue
Block a user