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

  1. #include "old.h"
  2.  
  3. bagen()
  4. {
  5.     int *p1, *p2, v;
  6.  
  7.     p1 = lmp;
  8.     if((flag&010)!=0)
  9.     if(board[5]==0 && board[6]==0 && board[7]==4)
  10.     if(wattack(4) && wattack(5) && wattack(6))
  11.         btry(4, 0, 2); /* kingside castle */
  12.     if((flag&020)!=0)
  13.     if(board[0]==4 && board[1]==0 && board[2]==0 && board[3]==0)
  14.     if(wattack(2) && wattack(3) && wattack(4))
  15.         btry(4, 0, -2); /* queenside castle */
  16.     bgen();
  17.     p2 = p1;
  18.     while(p2 != lmp) {
  19.         v = *p2++;
  20.         bmove(*p2);
  21.         if(wattack(bkpos)) {
  22.             *p1++ = v;
  23.             *p1++ = *p2;
  24.         }
  25.         p2++;
  26.         bremove();
  27.     }
  28.     lmp = p1;
  29. }
  30.  
  31. btry(from, mask, offset)
  32. int from, mask, offset;
  33. {
  34.  
  35.     if((dir[from]&mask)==0)
  36.         bcheck(from, from+offset);
  37. }
  38.  
  39. bcheck(from, to)
  40. int from, to;
  41. {
  42.  
  43.     if(board[to]>0) return(1);
  44.     *lmp++ = (pval+6)[board[to]]-value;
  45.     *lmp++ = (from<<8)|to;
  46.     return(board[to] != 0);
  47. }
  48.  
  49. wagen()
  50. {
  51.     int *p1, *p2, v;
  52.  
  53.     p1 = lmp;
  54.     if((flag&1)!=0)
  55.     if(board[61]==0 && board[62]==0 && board[63]== -4)
  56.     if(battack(60) && battack(61) && battack(62))
  57.         wtry(60, 0, 2); /* kingside castle */
  58.     if((flag&2)!=0)
  59.     if(board[56]== -4 && board[57]==0 && board[58]==0 && board[59]==0)
  60.     if(battack(58) && battack(59) && battack(60))
  61.         wtry(60, 0, -2); /* queenside castle */
  62.     wgen();
  63.     p2 = p1;
  64.     while(p2 != lmp) {
  65.         v = *p2++;
  66.         wmove(*p2);
  67.         if(battack(wkpos)) {
  68.             *p1++ = v;
  69.             *p1++ = *p2;
  70.         }
  71.         p2++;
  72.         wremove();
  73.     }
  74.     lmp = p1;
  75. }
  76.  
  77. wtry(from, mask, offset)
  78. int from, mask, offset;
  79. {
  80.  
  81.     if((dir[from]&mask)==0)
  82.         wcheck(from, from+offset);
  83. }
  84.  
  85. wcheck(from, to)
  86. int from, to;
  87. {
  88.  
  89.     if(board[to]<0) return(1);
  90.     *lmp++ = value-(pval+6)[board[to]];
  91.     *lmp++ = (from<<8)|to;
  92.     return(board[to] != 0);
  93. }
  94.  
  95.