#include #include #include #define TRUE 1 #define FALSE 0 #define NUM_BLOCKS 19 #define XMAX 36 #define YMAX 36 void Initialize(); void GetInputs(int *xsize, int *ysize); int TheBoardIsFull(); int ThePieceFits(int PieceIndex, int XPos, int YPos); void TryPiece(int PieceIndex, int XPos, int YPos); void AddPiece(int PieceIndex, int XPos, int YPos); void SubtractPiece(int PieceIndex, int XPos, int YPos); void PrintBoard(); typedef struct block { char shape[4][4]; int YSize; /* (first dimension size) */ int XSize; /* (second dimension size) */ } block_t; int XSize, YSize; int NumTilings = 0; /* Define the board */ char Board[XMAX][YMAX]; /* Define the array of blocks */ block_t block_array[NUM_BLOCKS] = {"XXXX", "....", "....", "....", 4,1, "X...", "X...", "X...", "X...", 1,4, "XX..", "XX..", "....", "....", 2,2, "XX..", "X...", "X...", "....", 2,3, "XXX.", "..X.", "....", "....", 3,2, ".X..", ".X..", "XX..", "....", 2,3, "X...", "XXX.", "....", "....", 3,2, "XX..", ".X..", ".X..", "....", 2,3, "..X.", "XXX.", "....", "....", 3,2, "X...", "X...", "XX..", "....", 2,3, "XXX.", "X...", "....", "....", 3,2, "XX..", ".XX.", "....", "....", 3,2, ".X..", "XX..", "X...", "....", 2,3, "X...", "XX..", ".X..", "....", 2,3, ".XX.", "XX..", "....", "....", 3,2, ".X..", "XXX.", "....", "....", 3,2, "X...", "XX..", "X...", "....", 2,3, "XXX.", ".X..", "....", "....", 3,2, ".X..", "XX..", ".X..", "....", 2,3 }; int main (void) { int i,j,k; i=j=k=0; for (;;) { Initialize(); GetInputs(&XSize,&YSize); if (feof(stdin)) break; for (i=0; i XSize || (YPos + Piece.YSize) > YSize ) { return FALSE; } /* See if the piece overlaps any others */ for (i=0;i