}
}
-void boardwindow (board_t *board)
+void boardwindow (board_t *board, int mode)
{
int i, j;
- set_color (black);
+ set_color ((mode) ? white : black);
_dobound (board->xsize, board->ysize, board->xoffset, board->yoffset);
set_color (white);
void scorewindow (int xoffset, int yoffset, int length, int score, int level)
{
set_color (black);
- _dobound (length + 7, 2, xoffset, yoffset);
+ _dobound (length + 9, 2, xoffset, yoffset);
set_color (white);
char fmt[12], msg[32];
sprintf (fmt, "%% %dd", length);
- sprintf (msg, "score: ");
+ sprintf (msg, " score: ");
sprintf (msg + strlen (msg), fmt, score);
mvaddstr (yoffset, xoffset, msg);
- sprintf (msg, "level: % 3d", level);
+ sprintf (msg, " level: % 3d", level);
mvaddstr (yoffset + 1, xoffset, msg);
}
-void nextwindow (block_t *blocks, int nb, int xoffset, int yoffset, int next)
+void displayblock (board_t *board, block_t *block, int x, int y)
{
- int height = maxblockheight (blocks, nb);
- int width = maxblockwidth (blocks, nb) + 2;
-
- set_color (black);
- _dobound (width, height, xoffset, yoffset);
- set_color (white);
-
int i, j;
- for (i = 0; i < width; i++) {
- for (j = 0; j < height; j++) {
- mvaddch (yoffset + j, xoffset + i, ' ');
- }
+
+ if (x == -1) {
+ x = board->width / 2;
}
- block_t *block = blocks + next;
- for (i = 0; i < block->width; i++) {
- for (j = 0; j < block->height; j++) {
- if (*getcell (block, i, j) == '.') {
- _set_symb_color ('0' + block->color);
- mvaddch (yoffset + (height - block->height) / 2 + j, xoffset + (width - block->width) / 2 + i, ' ');
- set_color (white);
- }
- }
+ if (y == -1) {
+ y = (board->height - block->height) / 2;
}
-}
-void displayblock (board_t *board, block_t *block, int x, int y)
-{
- int i, j;
for (i = 0; i < block->width; i++) {
for (j = 0; j < block->height; j++) {
if (*getcell (block, i, j) != ' ') {
int helpwindow (char *msg, int xoffset, int yoffset);
-void boardwindow (board_t *board);
+void boardwindow (board_t *board, int mode);
void scorewindow (int xoffset, int yoffset, int length, int score, int level);
-void nextwindow (block_t *blocks, int nb, int xoffset, int yoffset, int next);
-
void displayblock (board_t *board, block_t *block, int x, int y);
char *savewindow (int length, int xoffset, int yoffset);
/* get blocks */
int nb_blocks = 0;
block_t *blocks = getblocks ("std", &nb_blocks);
+ board_t *nextblock = initboard (maxblockwidth (blocks, nb_blocks) + 2, maxblockheight (blocks, nb_blocks));
+ setscale (nextblock, scale);
+
+ /* get first bloc */
int current = rand () % nb_blocks;
block_t *cblock = copyblock (blocks + current);
int xblock = board->width / 2;
int yboard = board->yoffset = xoffset + 1;
int xscore = xboard + xoffset + 2 + board->xsize;
int yscore = yboard;
- int xnext = xscore;
- int ynext = yscore + xoffset + maxblockheight (blocks, nb_blocks);
- int xhelp = xnext - 1;
- int yhelp = ynext + 1 + maxblockheight (blocks, nb_blocks) + xoffset;
+ nextblock->xoffset = xscore + (9 + nbdigit + 1 - nextblock->xsize) / 2;
+ int ynext = nextblock->yoffset = yscore + 1 + 2 + yoffset;
+ int xhelp = xscore - 1;
+ int yhelp = ynext + nextblock->ysize + yoffset;
int xsave = max (xboard + (board->xsize - savelen) / 2, 1);
int ysave = yboard + (board->ysize - 1) / 2;
char *savename = NULL;
switch (mode) {
case -1:
- nextwindow (blocks, nb_blocks, xnext, ynext, current);
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + current, -1, -1);
sprintf (msg, "Get ready player One. Press <s> to start");
break;
case 0:
halfdelay (0);
- nextwindow (blocks, nb_blocks, xnext, ynext, current);
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + current, -1, -1);
sprintf (msg, "Game in pause. Pause <p> to continue");
break;
case 1:
mode = 2;
sprintf (msg, "To bad, you loose. Score is %d", score);
}
- nextwindow (blocks, nb_blocks, xnext, ynext, next);
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + next, -1, -1);
break;
case 2:
freeblock (cblock);
msgwindow (msg, xmsg, ymsg, lmsg);
int nblines = checkline (board, &score, &level);
while (nblines-- > 0) {
- boardwindow (board);
+ boardwindow (board, 0);
stackboard (board);
}
- boardwindow (board);
+ boardwindow (board, 0);
scorewindow (xscore, yscore, nbdigit, score, (level / 10) + 1);
int newspeed = 10 + 4900 / (level / 10 + 1);
if (newspeed != speed) {