}
mvaddstr (yoffset, xoffset, msg);
- sprintf (msg, " level: % 3d", level);
+ sprintf (msg, " level: ");
+ sprintf (msg + strlen (msg), fmt, level);
mvaddstr (yoffset + 1, xoffset, msg);
}
setcolor (black_gray);
}
+void msg2window (char *msg, int xoffset, int yoffset)
+{
+ int length = strlen (msg) + 2;
+ xoffset -= length / 2;
+ msgwindow (msg, xoffset, yoffset, length);
+}
+
void removelines (board_t *board, int nblines, int tempo)
{
while (nblines-- > 0) {
int mode = 1;
if (!testvalidpos (board, blocks + *pnext, board->width / 2, 0)) {
if (player == 0) {
- sprintf (msg, "To bad, you loose. Score is %d", *scores);
+ sprintf (msg, "Too bad, you loose");
} else {
- sprintf (msg, "To bad, %s. Score is %d / %d", (player == 1) ? "player One losses" : "player Two losses", scores[0], scores[1]);
+ sprintf (msg, "Too bad, %s. Score is %d / %d", (player == 1) ? "player One losses" : "player Two losses", scores[0], scores[1]);
}
mode = 2;
} else {
}
/* main function for one player*/
-int oneplayer (int width, int height, int scale, int chrono, char *filename)
+int oneplayer (int width, int height, int scale, int wide, int chrono, char *filename)
{
/* init all variables */
int score = 0;
/* read file */
+ int whelp = strmaxlen (help, '\n');
if (filename) {
char *buffer = readdata (filename);
if (buffer == NULL) {
lines = board->lines;
next = board->next;
score = board->score;
- } else {
- board = initboard (width, height);
+ setscale (board, scale);
}
- setscale (board, scale);
/* get blocks */
int nb_blocks = 0;
maxblockheight (blocks, nb_blocks) + 2);
setscale (nextblock, scale);
- /* get first bloc */
- int xblock, yblock;
- block_t *cblock = drawblock (board, blocks, nb_blocks, NULL, ¤t, &xblock, &yblock, &next);
-
/* init curses window */
initscr ();
noecho ();
curs_set (0);
start_color ();
+ /* load playground */
+ if (!filename) {
+ if (wide) {
+ int w0board = COLS - 2 * (xoffset + 1);
+ int h0board = LINES - 3 - 2 * (yoffset + 1);
+ board = initboard (w0board, h0board);
+ applyscale (board, scale);
+ } else {
+ board = initboard (width, height);
+ setscale (board, scale);
+ }
+ }
+
+ /* get first bloc */
+ int xblock, yblock;
+ block_t *cblock = drawblock (board, blocks, nb_blocks, NULL, ¤t, &xblock, &yblock, &next);
+
/* window positions */
int xboard = board->xoffset = xoffset + 1;
- int yboard = board->yoffset = xoffset + 1;
- int xscore = xboard + xoffset + 2 + board->xsize;
- int yscore = yboard;
+ int yboard = board->yoffset = yoffset + 1 + (wide ? 2 : 0);
+ int xscore = xboard + 2 + (wide ? -1 : xoffset + board->xsize);
+ int yscore = yboard - (wide ? 3 : 0);
+ int wscore = (wide ? 16 : whelp - 2);
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 xhelp = (wide ? xboard + (board->xsize - 1) / 2 : xscore - 1);
+ int yhelp = (wide ? yboard + (board->ysize - 1) / 2 : ynext + nextblock->ysize + yoffset);
int xsave = max (xboard + (board->xsize - savelen) / 2, 1);
int ysave = yboard + (board->ysize - 1) / 2;
char *savename = NULL;
+
/* help window */
- int lhelp = helpwindow (help, xhelp, yhelp);
+ int lhelp = 0;
+ if (!wide) {
+ lhelp = helpwindow (help, xhelp, yhelp);
+ }
- /* window positions */
- int xmsg = xboard;
- int ymsg = max (yboard + xoffset + 1 + board->ysize, yhelp + lhelp + yoffset);
- int lmsg = xhelp - xmsg + strmaxlen (help, '\n');
+ /* window positions (msg) */
+ int lmsg = (wide ? 24 : whelp - 2);
+ int xmsg = (wide ? xboard + board->xsize - lmsg - 1 : xboard);
+ int ymsg = (wide ? yboard + board->ysize + 1 : yhelp + lhelp + 1 + xoffset);
/* event loop */
int mode = -1;
timeval_t lineend = {0, 0};
while (!stop) {
char msg[128] = {0};
+ char msg2[128] = {0};
msgwindow (msg, xmsg, ymsg, lmsg);
switch (mode) {
case -1:
- boardwindow (nextblock, 1);
- displayblock (nextblock, blocks + current, -1, -1);
- sprintf (msg, "Get ready player One. Press <s> to start");
+ if (!wide) {
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + current, -1, -1);
+ }
+ sprintf (msg, "Get ready player One");
+ sprintf (msg2, "Press <s> to start");
break;
case 0:
- boardwindow (nextblock, 1);
- displayblock (nextblock, blocks + current, -1, -1);
- sprintf (msg, "Game in pause. Pause <p> to continue");
+ if (!wide) {
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + current, -1, -1);
+ }
+ sprintf (msg, "Game in pause");
+ sprintf (msg2, "Pause <p> to continue");
break;
case 1:
halfdelay (1);
- boardwindow (nextblock, 1);
- displayblock (nextblock, blocks + next, -1, -1);
+ if (!wide) {
+ boardwindow (nextblock, 1);
+ displayblock (nextblock, blocks + next, -1, -1);
+ }
if (blockend.tv_sec && isovertime (&blockend)) {
if (testvalidpos (board, cblock, xblock, yblock + 1)) {
yblock++;
}
int isempty = addline (board, nbholes);
if (!isempty) {
- sprintf (msg, "Shame, you loose. Score is %d", score);
+ sprintf (msg, "Shame, you loose");
+ sprintf (msg2, "Score is %d", score);
mode = 2;
settle = 0;
}
}
if (settle) {
mode = reparenextturn (board, blocks, nb_blocks, &cblock, ¤t, &xblock, &yblock, &next, 0, msg, &score, nextblock);
+ if (*msg) {
+ sprintf (msg2, "Score is %d", score);
+ }
}
settle = 0;
case 2:
freeblock (cblock);
cblock = NULL;
- sprintf (msg, "End of game. Press <q> to quit");
+ sprintf (msg, "End of game");
+ sprintf (msg2, "Press <q> to quit");
}
if (*msg) {
- halfdelay (0);
msgwindow (msg, xmsg, ymsg, lmsg);
- msleep (800);
}
boardwindow (board, 0);
setendtime (&lineend, chronoratio * speed);
}
}
- if (mode == 1) {
+
+ if (*msg2) {
+ msg2window (msg2, xboard + board->xsize / 2, yboard + (board->ysize - 1) / 2);
+ }
+
+ switch (mode) {
+ case 0:
+ case 2:
+ halfdelay (0);
+ msleep (800);
+ break;
+ case 1:
displayblock (board, cblock, xblock, yblock);
+ break;
}
int ch = getch ();
break;
}
switch (ch) {
+ case 'h':
+ if (wide) {
+ helpwindow (help, xboard + (board->xsize - strmaxlen (help, '\n')) / 2, yboard + 1);
+ while (getch () == ERR) {
+ msleep (200);
+ }
+ //tic (&turn);
+ }
+ break;
case 'p':
switch (mode) {
case 0: