home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / backgammon / teachgammon / tutor.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  3.6 KB  |  156 lines

  1. /*
  2.  * Copyright (c) 1980 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. static char sccsid[] = "@(#)tutor.c    5.4 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. #include "back.h"
  39. #include "tutor.h"
  40.  
  41. extern int    maxmoves;
  42. extern char    *finis[];
  43.  
  44. extern struct situatn    test[];
  45.  
  46. static char    better[] = "That is a legal move, but there is a better one.\n";
  47.  
  48. tutor ()  {
  49.     register int    i, j;
  50.  
  51.     i = 0;
  52.     begscr = 18;
  53.     cturn = -1;
  54.     home = 0;
  55.     bar = 25;
  56.     inptr = &in[0];
  57.     inopp = &in[1];
  58.     offptr = &off[0];
  59.     offopp = &off[1];
  60.     Colorptr = &color[0];
  61.     colorptr = &color[2];
  62.     colen = 5;
  63.     wrboard();
  64.  
  65.     while (1)  {
  66.         if (! brdeq(test[i].brd,board))  {
  67.             if (tflag && curr == 23)
  68.                 curmove (18,0);
  69.             writel (better);
  70.             nexturn();
  71.             movback (mvlim);
  72.             if (tflag)  {
  73.                 refresh();
  74.                 clrest ();
  75.             }
  76.             if ((! tflag) || curr == 19)  {
  77.                 proll();
  78.                 writec ('\t');
  79.             }
  80.             else
  81.                 curmove (curr > 19? curr-2: curr+4,25);
  82.             getmove();
  83.             if (cturn == 0)
  84.                 leave();
  85.             continue;
  86.         }
  87.         if (tflag)
  88.             curmove (18,0);
  89.         text (*test[i].com);
  90.         if (! tflag)
  91.             writec ('\n');
  92.         if (i == maxmoves)
  93.             break;
  94.         D0 = test[i].roll1;
  95.         D1 = test[i].roll2;
  96.         d0 = 0;
  97.         mvlim = 0;
  98.         for (j = 0; j < 4; j++)  {
  99.             if (test[i].mp[j] == test[i].mg[j])
  100.                 break;
  101.             p[j] = test[i].mp[j];
  102.             g[j] = test[i].mg[j];
  103.             mvlim++;
  104.         }
  105.         if (mvlim)
  106.             for (j = 0; j < mvlim; j++)
  107.                 if (makmove(j))
  108.                     writel ("AARGH!!!\n");
  109.         if (tflag)
  110.             refresh();
  111.         nexturn();
  112.         D0 = test[i].new1;
  113.         D1 = test[i].new2;
  114.         d0 = 0;
  115.         i++;
  116.         mvlim = movallow();
  117.         if (mvlim)  {
  118.             if (tflag)
  119.                 clrest();
  120.             proll();
  121.             writec('\t');
  122.             getmove();
  123.             if (tflag)
  124.                 refresh();
  125.             if (cturn == 0)
  126.                 leave();
  127.         }
  128.     }
  129.     leave();
  130. }
  131.  
  132. clrest ()  {
  133.     register int    r, c, j;
  134.  
  135.     r = curr;
  136.     c = curc;
  137.     for (j = r+1; j < 24; j++)  {
  138.         curmove (j,0);
  139.         cline();
  140.     }
  141.     curmove (r,c);
  142. }
  143.  
  144. brdeq (b1,b2)
  145. register int  *b1, *b2;
  146.  
  147. {
  148.     register int  *e;
  149.  
  150.     e = b1+26;
  151.     while (b1 < e)
  152.         if (*b1++ != *b2++)
  153.             return(0);
  154.     return(1);
  155. }
  156.