+ move(y1, x1); //top
+ addch(Game.ascii ? '+' : ACS_ULCORNER);
+ for (x = x1 + 1; x < x2; x++)
+ addch(Game.ascii ? '-' : ACS_HLINE);
+ addch(Game.ascii ? '+' : ACS_URCORNER);
+ move(y2, x1); //bottom
+ addch(Game.ascii ? '+' : ACS_LLCORNER);
+ for (x = x1 + 1; x < x2; x++)
+ addch(Game.ascii ? '-' : ACS_HLINE);
+ addch(Game.ascii ? '+' : ACS_LRCORNER);
+} //DrawBox
+
+ExtFunc void DrawField(int scr)
+{ //draw field for player scr
+ if (!Players[scr].spy) return;
+ DrawBox(boardXPos[scr] - 1, boardYPos[scr] - Players[scr].boardVisible,
+ boardXPos[scr] + 2 * Players[scr].boardWidth, boardYPos[scr] + 1);
+ {
+ char s[2*Players[scr].boardWidth];
+
+ memset(s, ' ', sizeof(s));
+ if (Players[scr].host && Players[scr].host[0])
+ snprintf(s, sizeof(s), "%s <%s>",
+ Players[scr].name, Players[scr].host);
+ else snprintf(s, sizeof(s), "%s", Players[scr].name);
+ s[strlen(s)] = ' ';
+ s[sizeof(s) - 7*((Players[scr].flags & SCF_usingRobot) != 0)
+ - 5*((Players[scr].flags & SCF_fairRobot) != 0)] = 0;
+ mvaddstr(1, boardXPos[scr], s);
+
+ if (Players[scr].flags & SCF_usingRobot) {
+ addstr((Players[scr].flags & SCF_fairRobot)
+ ? "(fair robot)" : "(robot)");
+ } //add robot indicator
+ } //display playername/host
+
+ {
+ int x, y;
+ for (y = 0; y <= Players[scr].boardVisible; y++)
+ for (x = 0; x <= Players[scr].boardWidth; x++)
+ PlotBlock(scr, y, x, GetBlock(scr, y, x));
+ } //draw field
+
+ ShowPause(scr);
+} //DrawField
+
+ExtFunc void InitFields(void)
+{ //calculate positions of all fields
+ int scr, prevscr;
+ int y, x;
+
+ getmaxyx(stdscr, y, x);
+ boardXPos[me] = 1;
+ boardYPos[me] = 22;
+ statusXPos = 2 * Players[me].boardWidth + 3;
+ statusYPos = 22;
+ messageXPos = 2;
+ messageYPos = 25;
+ messageWidth = x - messageXPos - 2;
+ if ((messageHeight = y - messageYPos - 1) < 0) messageHeight = 0;
+ else DrawBox(messageXPos - 2, messageYPos - 1,
+ messageXPos + messageWidth + 1, messageYPos + messageHeight);
+ prevscr = me;
+ for (scr = 1; scr < MAX_SCREENS; scr++) if (scr != me) {
+ boardXPos[scr] =
+ boardXPos[prevscr] + 2 * Players[prevscr].boardWidth + 3;
+ if (prevscr == me)
+ boardXPos[scr] += 14; //scorebar
+ boardYPos[scr] = 22;
+ if (x < boardXPos[scr] + 2 * Players[scr].boardWidth + 1)
+ Players[scr].spy = 0; //field doesn't fit on screen
+ prevscr = scr;