int j = 0;
while ((msg) && (*msg != '\0')) {
if ((*msg == '\n') || (i == length)) {
+ while (i < length) {
+ mvaddch (yoffset + j, xoffset + i++, ' ');
+ }
i = 0;
j++;
}
int helpwindow (char *msg, int xoffset, int yoffset)
{
- _displaytitle ("Help message", xoffset, yoffset);
int length = strmaxlen (msg, '\n');
+ int nb = strnbchr (msg, '\n');
+ _dobound (length, nb + 2, xoffset, yoffset);
+ _helpwindow ("\n", xoffset, yoffset + 0, length);
+ _helpwindow ("\n", xoffset, yoffset + 1, length);
+ _displaytitle ("Help message", xoffset, yoffset);
int j = 2;
j += _helpwindow (msg, xoffset, yoffset + j, length);
return name;
}
-void msgwindow (char *msg, int xoffset, int yoffset, int length)
+void msgwindow (char *msg, int xoffset, int yoffset, int length, int mode)
{
- setcolor (black_gray);
- //_dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset);
+ if (mode == 0) {
+ setcolor (black_gray);
+ } else {
+ //setcolor (black_gray);
+ _dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset);
+ setcolor (gray_black);
+ }
if (length > 0) {
int i;
for (i = 0; i < length; i++) {
char *savewindow (int length, int xoffset, int yoffset);
-void msgwindow (char *msg, int xoffset, int yoffset, int length);
+void msgwindow (char *msg, int xoffset, int yoffset, int length, int mode);
#endif /* __DISPLAY_H__ */
return len;
}
+int strnbchr (char *str, char ch)
+{
+ int n = 0;
+ while ((str != NULL) && (*str != '\0')) {
+ n++;
+ str = strchr (str, ch);
+ if (str != NULL) {
+ str++;
+ }
+ }
+ return n;
+}
+
board_t *initboard (int width, int height)
{
board_t *board = (board_t *) malloc (sizeof (board_t));
int strmaxlen (char *str, char ch);
+int strnbchr (char *str, char ch);
+
board_t *initboard (int width, int height);
board_t *setscale (board_t *board, int scale);
#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "debug.h"
#include "display.h"
int scorelen = 15;
char *help =
- "<i> Move up cursor\n"
- "<j> Move left cursor\n"
- "<k> Move down cursor\n"
- "<l> Move right cursor\n"
+ "<h> Help message\n"
+ "<i> Move up\n"
+ "<j> Move left\n"
+ "<k> Move down\n"
+ "<l> Move right\n"
+ "<p> Pause\n"
"<q> Quit\n"
"<s> Save file\n"
;
int yboard = board->yoffset = yoffset;
int xsave = max (xboard + (board->width - savelen) / 2, 1);
int ysave = yboard + (board->height - 1) / 2;
+
char *savename = NULL;
/* pacman position */
/* display score */
char msg[128] = {0};
sprintf (msg, "score: % 5d", score);
- msgwindow (msg, xscore, yscore, scorelen);
+ msgwindow (msg, xscore, yscore, scorelen, 0);
/* turn span */
delta += toc (&turn);
/* general controls */
switch (ch) {
case KEY_ESC:
+ case 'h':
+ helpwindow (help, xboard + (board->width - strmaxlen (help, '\n')) / 2, yboard + (board->height - strnbchr (help, '\n') - 1) / 2);
+ while (getch () == ERR) {
+ msleep (200);
+ }
+ tic (&turn);
+ draw = 1;
+ break;
+ case 'p':
+ sprintf (msg, "Game paused");
+ msgwindow (msg, xboard + (board->width - strlen (msg)) / 2, yboard + (board->height - 1) / 2, strlen (msg), 1);
+ while (getch () == ERR) {
+ msleep (200);
+ }
+ tic (&turn);
+ draw = 1;
+ break;
case 'q':
stop = 1;
break;