home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / games / chess / play.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-05-05  |  3.0 KB  |  248 lines

  1. #include "old.h"
  2.  
  3. play(f)
  4. int f;
  5. {
  6.     int t, i, ts[9];
  7.  
  8.     clock();
  9.     ts[8] = 0;
  10.     if(f) goto first;
  11. loop:
  12.     intrp = 0;
  13.     move();
  14.  
  15. first:
  16.     if(manflg)
  17.         goto loop;
  18.     i = mantom;
  19.     t = clktim[i];
  20.     if(!bookm())
  21.     if(!mate(mdepth, 1))
  22.         xplay();
  23.     if(intrp) {
  24.         decrem();
  25.         mantom? bremove(): wremove();
  26.         goto loop;
  27.     }
  28.     if(!abmove) {
  29.         printf("Resign\n");
  30.         onhup();
  31.     }
  32.     makmov(abmove);
  33.     i = clktim[i];
  34.     t = i-t;
  35.     times(ts);
  36.     ts[8] = ts[1];
  37.     if(i/moveno > 150) {
  38.         if(depth > 1)
  39.             goto decr;
  40.         goto loop;
  41.     }
  42.     if(depth==3 && t>180)
  43.         goto decr;
  44.     if(depth==1 && t<60)
  45.         goto incr;
  46.     if(game==3 && t<60 && depth==2)
  47.         goto incr;
  48.     goto loop;
  49.  
  50. incr:
  51.     depth++;
  52.     goto loop;
  53.  
  54. decr:
  55.     goto loop;
  56. }
  57.  
  58. move()
  59. {
  60.     int a, *p, *p1;
  61.  
  62. loop:
  63.     lmp = done();
  64.     a = manual();
  65.     p = done();
  66.     p1 = p;
  67.     while(p1 != lmp) {
  68.         p1++;
  69.         if(*p1++ == a) {
  70.             lmp = p;
  71.             makmov(a);
  72.             return;
  73.         }
  74.     }
  75.     printf("Illegal move\n");
  76.     lmp = p;
  77.     goto loop;
  78. }
  79.  
  80. manual()
  81. {
  82.     int a, b, c;
  83.     char *p1;
  84.     extern out1;
  85.  
  86. loop:
  87.     intrp = 0;
  88.     stage();
  89.     rline();
  90.     sbufp = sbuf;
  91.     if(match("save")) {
  92.         save();
  93.         goto loop;
  94.     }
  95.     if(match("test")) {
  96.         testf = !testf;
  97.         goto loop;
  98.     }
  99.     if(match("remove")) {
  100.         if(amp[-1] != -1) {
  101.             decrem();
  102.             mantom? bremove(): wremove();
  103.         }
  104.         if(amp[-1] != -1) {
  105.             decrem();
  106.             mantom? bremove(): wremove();
  107.         }
  108.         goto loop;
  109.     }
  110.     if(match("exit"))
  111.         exit();
  112.     if(match("manual")) {
  113.         manflg = !manflg;
  114.         goto loop;
  115.     }
  116.     if(match("resign"))
  117.         onhup();
  118.     if(moveno == 1 && mantom == 0) {
  119.         if(match("first"))
  120.             play(1);
  121.         if(match("alg")) {
  122.             mfmt = 1;
  123.             goto loop;
  124.         }
  125.         if(match("restore")) {
  126.             restore();
  127.             goto loop;
  128.         }
  129.     }
  130.     if(match("clock")) {
  131.         clktim[mantom] =+ clock();
  132.         ctime("white", clktim[0]);
  133.         ctime("black", clktim[1]);
  134.         goto loop;
  135.     }
  136.     if(match("score")) {
  137.         score();
  138.         goto loop;
  139.     }
  140.     if(match("setup")) {
  141.         setup();
  142.         goto loop;
  143.     }
  144.     if(match("hint")) {
  145.         a = xplay();
  146.         out(abmove);
  147.         printf(" %d\n", a);
  148.         goto loop;
  149.     }
  150.     if(match("repeat")) {
  151.         if(amp[-1] != -1) {
  152.             a = amp;
  153.             mantom? wremove(): bremove();
  154.             decrem();
  155.             posit(&out1, a);
  156.         }
  157.         goto loop;
  158.     }
  159.     if(*sbufp == '\0') {
  160.         pboard();
  161.         goto loop;
  162.     }
  163.     if((a=algin()) != 0) {
  164.         mfmt = 1;
  165.         return(a);
  166.     }
  167.     if((a=stdin()) != 0) {
  168.         mfmt = 0;
  169.         return(a);
  170.     }
  171.     printf("eh?\n");
  172.     goto loop;
  173. }
  174.  
  175. algin()
  176. {
  177.     int from, to;
  178.  
  179.     from = cooin();
  180.     to = cooin();
  181.     if(*sbufp != '\0') return(0);
  182.     return((from<<8)|to);
  183. }
  184.  
  185. cooin()
  186. {
  187.     int a, b;
  188.  
  189.     a = sbufp[0];
  190.     if(a<'a' || a>'h') return(0);
  191.     b = sbufp[1];
  192.     if(b<'1' || b>'8') return(0);
  193.     sbufp =+ 2;
  194.     a = (a-'a')+8*('8'-b);
  195.     return(a);
  196. }
  197.  
  198. match(s)
  199. char *s;
  200. {
  201.     char *p1;
  202.     int c;
  203.  
  204.     p1 = sbufp;
  205.     while((c = *s++) != '\0')
  206.         if(*p1++ != c) return(0);
  207.     sbufp = p1;
  208.     return(1);
  209. }
  210.  
  211. done()
  212. {
  213.     int *p;
  214.  
  215.     if(rept() > 3) {
  216.         printf("Draw by repetition\n");
  217.         onhup();
  218.     }
  219.     p = lmp;
  220.     mantom? bagen(): wagen();
  221.     if(p == lmp) {
  222.         if(check())
  223.             if(mantom)
  224.                 printf("White wins\n"); else
  225.                 printf("Black wins\n"); else
  226.         printf("Stale mate\n");
  227.         onhup();
  228.     }
  229.     return(p);
  230. }
  231.  
  232. xplay()
  233. {
  234.     int a;
  235.  
  236.     stage();
  237.     abmove = 0;
  238.     a = mantom? bplay(): wplay();
  239.     ivalue = a;
  240.     return(a);
  241. }
  242.  
  243. term()
  244. {
  245.  
  246.     exit(0);
  247. }
  248.