BSD 4_1_snap development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 16 Sep 1980 08:45:04 +0000 (00:45 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 16 Sep 1980 08:45:04 +0000 (00:45 -0800)
Work on file usr/src/games/backgammon/check.c

Synthesized-from: CSRG/cd1/4.1.snap

usr/src/games/backgammon/check.c [new file with mode: 0644]

diff --git a/usr/src/games/backgammon/check.c b/usr/src/games/backgammon/check.c
new file mode 100644 (file)
index 0000000..1b1e2e0
--- /dev/null
@@ -0,0 +1,121 @@
+#include "back.h"
+
+getmove ()  {
+       register int    i, c;
+
+       c = 0;
+       for (;;)  {
+               i = checkmove(c);
+
+               switch (i)  {
+               case -1:
+                       if (movokay(mvlim))  {
+                               if (tflag)
+                                       curmove (20,0);
+                               else
+                                       writec ('\n');
+                               for (i = 0; i < mvlim; i++)
+                                       if (h[i])
+                                               wrhit(g[i]);
+                               nexturn();
+                               if (*offopp == 15)
+                                       cturn *= -2;
+                               if (tflag && pnum)
+                                       bflag = pnum;
+                               return;
+                       }
+
+               case -4:
+               case 0:
+                       if (tflag)
+                               refresh();
+                       if (i != 0 && i != -4)
+                               break;
+                       if (tflag)
+                               curmove (20,0);
+                       else
+                               writec ('\n');
+                       writel (*Colorptr);
+                       if (i == -4)
+                               writel (" must make ");
+                       else
+                               writel (" can only make ");
+                       writec (mvlim+'0');
+                       writel (" move");
+                       if (mvlim > 1)
+                               writec ('s');
+                       writec ('.');
+                       writec ('\n');
+                       break;
+
+               case -3:
+                       if (quit())
+                               return;
+               }
+
+               if (! tflag)
+                       proll ();
+               else  {
+                       curmove (cturn == -1? 18: 19,39);
+                       cline ();
+                       c = -1;
+               }
+       }
+}
+\f
+movokay (mv)
+register int   mv;
+
+{
+       register int    i, m;
+
+       if (d0)
+               swap;
+
+       for (i = 0; i < mv; i++)  {
+
+               if (p[i] == g[i])  {
+                       moverr (i);
+                       curmove (20,0);
+                       writel ("Attempt to move to same location.\n");
+                       return (0);
+               }
+
+               if (cturn*(g[i]-p[i]) < 0)  {
+                       moverr (i);
+                       curmove (20,0);
+                       writel ("Backwards move.\n");
+                       return (0);
+               }
+
+               if (abs(board[bar]) && p[i] != bar)  {
+                       moverr (i);
+                       curmove (20,0);
+                       writel ("Men still on bar.\n");
+                       return (0);
+               }
+
+               if ( (m = makmove(i)) )  {
+                       moverr (i);
+                       switch (m)  {
+
+                       case 1:
+                               writel ("Move not rolled.\n");
+                               break;
+
+                       case 2:
+                               writel ("Bad starting position.\n");
+                               break;
+
+                       case 3:
+                               writel ("Destination occupied.\n");
+                               break;
+
+                       case 4:
+                               writel ("Can't remove men yet.\n");
+                       }
+                       return (0);
+               }
+       }
+       return (1);
+}