home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Games / MacGnuGo 0.5e / gnugo.src / patterns.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-04  |  6.9 KB  |  414 lines  |  [TEXT/R*ch]

  1. #include "comment.header"
  2. /* revised 92Nov01 rhn */
  3.  
  4. #define EMPTY    0
  5. #define MOVE    3
  6. #define EDGE    4
  7. #define PATNO    27    /* 30+1 - 4 (14, 18, 21, 29) */
  8.  
  9. /* pattern x, y coor and attribute */
  10. /* for each pattern coordinate 0,0 must have my piece */
  11. /* att = 0 - empty, 1 - your piece, 2 - my piece, 3 - my next move */
  12. /* 4 - empty on edge, 5 - your piece on edge, 6 - my piece on edge */
  13. /* 7 - not my piece, 8 - not your piece */
  14. /*
  15.   struct patval {int x, y, att;};
  16.   */
  17.  
  18. /* patn - patern */
  19. /* patlen - no. of pieces in pattern */
  20. /* trfno - no. of transformation to match pattern */
  21. /*       8 for normal pattern, 4 for symmetrical pattern */
  22. /* patwt - pattern value */
  23. /*
  24.   struct pattern {
  25.   struct patval patn[MAXPC];
  26.   int patlen, trfno, patwt;
  27.   };
  28.   */
  29. static struct pattern pat[PATNO+8] = {
  30.   /*
  31.     pattern 0:
  32.     232   connect if invaded
  33.     010
  34.     */
  35.   {{{0, 0, 2},
  36.     {2, 0, 2},
  37.     {0, 1, EMPTY},
  38.     {1, 1, 1},
  39.     {2, 1, EMPTY},
  40.     {1, 0, MOVE}}, 6, 4, 82},
  41.   /*
  42.     pattern 1:
  43.     230   connect if invaded
  44.     012
  45.     */
  46.   {{{0, 0, 2},
  47.     {2, 0, EMPTY},
  48.     {0, 1, EMPTY},
  49.     {1, 1, 1},
  50.     {2, 1, 2},
  51.     {1, 0, MOVE}}, 6, 8, 84},
  52.   /*
  53.     pattern 2:
  54.     212   connect if invaded
  55.     838
  56.     */
  57.   {{{0, 0, 2},
  58.     {2, 0, 2},
  59.     {0, 1, 8},
  60.     {1, 0, 1},
  61.     {2, 1, 8},
  62.     {1, 1, MOVE}}, 6, 4, 82},
  63.   /*
  64.     pattern 3:
  65.     2302   connect if invaded
  66.     7100
  67.     */
  68.   {{{0, 0, 2},
  69.     {3, 0, 2},
  70.     {0, 1, EMPTY},
  71.     {1, 1, 1},
  72.     {2, 0, 7},
  73.     {2, 1, EMPTY},
  74.     {1, 0, MOVE},
  75.     {3, 1, EMPTY}},8, 8, 83},
  76.   /*
  77.     pattern 4:
  78.     20302   connect if invaded
  79.     80108
  80.     */
  81.   {{{0, 0, 2},
  82.     {4, 0, 2},
  83.     {0, 1, 8},
  84.     {1, 0, EMPTY},
  85.     {1, 1, EMPTY},
  86.     {2, 1, 1},
  87.     {3, 0, EMPTY},
  88.     {3, 1, EMPTY},
  89.     {2, 0, MOVE},
  90.     {4, 1, 8}}, 10, 4, 84},
  91.   /*
  92.     pattern 5:
  93.     203   form eye to protect
  94.     021
  95.     */
  96.   {{{0, 0, 2},
  97.     {0, 1, EMPTY},
  98.     {1, 0, EMPTY},
  99.     {1, 1, 2},
  100.     {2, 1, 1},
  101.     {2, 0, MOVE}}, 6, 8, 82},
  102.   /*
  103.     pattern 6:
  104.     202    form eye to protect
  105.     031
  106.     */
  107.   {{{0, 0, 2},
  108.     {2, 0, 2},
  109.     {0, 1, EMPTY},
  110.     {1, 0, EMPTY},
  111.     {2, 1, 1},
  112.     {1, 1, MOVE}}, 6, 8, 82},
  113.   /*
  114.     pattern 7:
  115.     230   connect if invaded
  116.     102
  117.     */
  118.   {{{0, 0, 2},
  119.     {2, 0, EMPTY},
  120.     {0, 1, 1},
  121.     {1, 1, EMPTY},
  122.     {2, 1, 2},
  123.     {1, 0, MOVE}}, 6, 8, 82},
  124.   /*
  125.     pattern 8:
  126.     200000
  127.      00030  extend
  128.      00007
  129.     */
  130.   {{{0, 0, 2},
  131.     {4, 2, EMPTY},
  132.     {5, 0, EMPTY},
  133.     {1, 0, EMPTY},
  134.     {2, 0, EMPTY},
  135.     {3, 0, EMPTY},
  136.     {4, 0, EMPTY},
  137.     {1, 1, EMPTY},
  138.     {2, 1, EMPTY},
  139.     {3, 1, EMPTY},
  140.     {5, 1, EMPTY},
  141.     {1, 2, EMPTY},
  142.     {2, 2, EMPTY},
  143.     {3, 2, EMPTY},
  144.     {4, 1, MOVE},
  145.     {5, 2, 7}}, 16, 8, 80},
  146.   /*
  147.     pattern 9:
  148.     2
  149.    000
  150.    000  extend
  151.    000
  152.    030
  153.    000
  154.     */
  155.   {{{ 0, 0, 2},
  156.     {-1, 5, EMPTY},
  157.     {-1, 1, EMPTY},
  158.     { 0, 1, EMPTY},
  159.     { 1, 1, EMPTY},
  160.     {-1, 2, EMPTY},
  161.     { 0, 2, EMPTY},
  162.     { 1, 2, EMPTY},
  163.     {-1, 3, EMPTY},
  164.     { 0, 3, EMPTY},
  165.     { 1, 3, EMPTY},
  166.     {-1, 4, EMPTY},
  167.     { 1, 4, EMPTY},
  168.     { 0, 5, EMPTY},
  169.     { 0, 4, MOVE},
  170.     { 1, 5, EMPTY}}, 16, 4, 80},
  171.   /*
  172.     pattern 10:
  173.     20000
  174.      0030  extend
  175.      0007
  176.     */
  177.   {{{0, 0, 2},
  178.     {3, 2, EMPTY},
  179.     {1, 0, EMPTY},
  180.     {2, 0, EMPTY},
  181.     {3, 0, EMPTY},
  182.     {4, 0, EMPTY},
  183.     {1, 1, EMPTY},
  184.     {2, 1, EMPTY},
  185.     {4, 1, EMPTY},
  186.     {1, 2, EMPTY},
  187.     {2, 2, EMPTY},
  188.     {3, 1, MOVE},
  189.     {4, 2, 7}}, 13, 8, 79},
  190.   /*
  191.     pattern 11:
  192.      2
  193.     000
  194.     000  extend
  195.     030
  196.     000
  197.     */
  198.   {{{ 0, 0, 2},
  199.     { 0, 4, EMPTY},
  200.     {-1, 1, EMPTY},
  201.     { 0, 1, EMPTY},
  202.     { 1, 1, EMPTY},
  203.     {-1, 2, EMPTY},
  204.     { 0, 2, EMPTY},
  205.     { 1, 2, EMPTY},
  206.     {-1, 3, EMPTY},
  207.     { 1, 3, EMPTY},
  208.     {-1, 4, EMPTY},
  209.     { 0, 3, MOVE},
  210.     { 1, 4, EMPTY}}, 13, 4, 79},
  211.   /*
  212.     pattern 12:
  213.     2000
  214.      037  extend
  215.      007
  216.     */
  217.   {{{0, 0, 2},
  218.     {3, 1, 7},
  219.     {1, 2, EMPTY},
  220.     {1, 0, EMPTY},
  221.     {2, 0, EMPTY},
  222.     {1, 1, EMPTY},
  223.     {2, 2, EMPTY},
  224.     {3, 0, EMPTY},
  225.     {2, 1, MOVE},
  226.     {3, 2, 7}}, 10, 8, 76},
  227.   /*
  228.     pattern 13:
  229.     2
  230.    000  extend
  231.    030
  232.    707
  233.     */
  234.   {{{ 0, 0, 2},
  235.     { 0, 3, EMPTY},
  236.     {-1, 1, EMPTY},
  237.     { 0, 1, EMPTY},
  238.     { 1, 1, EMPTY},
  239.     {-1, 2, EMPTY},
  240.     { 1, 2, EMPTY},
  241.     {-1, 3, 7},
  242.     { 0, 2, MOVE},
  243.     { 1, 3, 7}}, 10, 4, 76},
  244.   /*
  245.     pattern 15:
  246.      202     eye shape
  247.     803
  248.      2
  249.     */
  250.   {{{0, 0, 2},
  251.     {1, 0, EMPTY},
  252.     {2, 0, 2},
  253.     {-1, 1, 8},
  254.     {0, 1, EMPTY},
  255.     {1, 1, MOVE},
  256.     {0, 2, 2}}, 7, 8, 74},
  257.   /*
  258.     pattern 16:
  259.     646    solidify eye on the edge
  260.      237
  261.      7
  262.     */
  263.   {{{0, 0, 6},
  264.     {1, 0, EDGE},
  265.     {1, 1, 2},
  266.     {2, 0, 6},
  267.     {2, 2, 1},
  268.     {2, 1, MOVE},
  269.     {3, 1, 7}}, 7, 8, 75},
  270.   /*
  271.     pattern 17:
  272.      2       form eye shape ???
  273.     803
  274.      2
  275.     */
  276.   {{{0, 0, 2},
  277.     {-1, 1, 8},
  278.     {0, 1, EMPTY},
  279.     {0, 2, 2},
  280.     {1, 1, MOVE}}, 5, 4, 80},
  281.   /*
  282.     pattern 19:
  283.      2       solidify eye on center
  284.     202
  285.     837
  286.     */
  287.   {{{0, 0, 2},
  288.     {-1, 1, 2},
  289.     {0, 1, EMPTY},
  290.     {1, 1, 2},
  291.     {0, 2, 8},
  292.     {1, 2, MOVE},
  293.     {2, 2, 7}}, 7, 8, 80},
  294.   /*
  295.     pattern 20:
  296.     2       solidify eye on center
  297.    202
  298.     230
  299.     7
  300.     */
  301.   {{{0, 0, 2},
  302.     {-1, 1, 2},
  303.     {0, 1, EMPTY},
  304.     {1, 1, 2},
  305.     {0, 2, 2},
  306.     {2, 2, EMPTY},
  307.     {1, 2, MOVE},
  308.     {1, 3, 7}}, 8, 8, 75},
  309.   /*
  310.     pattern 22:
  311.      21        make wall ???
  312.     031
  313.     */
  314.   {{{0, 0, 2},
  315.     {1, 0, 1},
  316.     {-1, 1, 0},
  317.     {2, 1, 1},
  318.     {0, 1, MOVE}}, 5, 8, 74},
  319.   /*
  320.     pattern 23:
  321.     20108     connect if invaded
  322.     80302
  323.     */
  324.   {{{0, 0, 2},
  325.     {4, 0, 8},
  326.     {0, 1, 8},
  327.     {1, 0, EMPTY},
  328.     {1, 1, EMPTY},
  329.     {2, 0, 1},
  330.     {3, 0, EMPTY},
  331.     {3, 1, EMPTY},
  332.     {2, 1, MOVE},
  333.     {4, 1, 2}}, 10, 8, 84},
  334.   /*
  335.     pattern 24:
  336.     2100    connect if invaded
  337.     0302
  338.     */
  339.   {{{0, 0, 2},
  340.     {3, 0, EMPTY},
  341.     {0, 1, EMPTY},
  342.     {1, 0, 1},
  343.     {2, 0, EMPTY},
  344.     {2, 1, EMPTY},
  345.     {1, 1, MOVE},
  346.     {3, 1, 2}}, 8, 8, 83},
  347.   /*
  348.     pattern 25:
  349.     2    block near edge ???
  350.    031
  351.    444
  352.     */
  353.   {{{0, 0, 2},
  354.     {-1, 2, EDGE},
  355.     {-1, 1, EMPTY},
  356.     {1, 1, 1},
  357.     {0, 2, EDGE},
  358.     {0, 1, MOVE},
  359.     {1, 2, EDGE}}, 7, 8, 76},
  360.   /*
  361.     pattern 26:
  362.     21    block on edge    ??? ???
  363.     434
  364.     */
  365.   {{{0, 0, 2},
  366.     {1, 0, 1},
  367.     {0, 1, EDGE},
  368.     {2, 1, EDGE},
  369.     {1, 1, MOVE}}, 5, 8, 88},
  370.   /*
  371.     pattern 27:
  372.     2    block on edge ??? ???
  373.    435
  374.     */
  375.   {{{0, 0, 2},
  376.     {-1, 1, EDGE},
  377.     {1, 1, 5},
  378.     {0, 1, MOVE}}, 4, 8, 88},
  379.   /*
  380.     pattern 28:
  381.     214    block near corner
  382.     374
  383.     444
  384.     */
  385.   {{{0, 0, 2},
  386.     {2, 1, EDGE},
  387.     {1, 0, 1},
  388.     {2, 0, EDGE},
  389.     {1, 1, 7},
  390.     {0, 2, EDGE},
  391.     {1, 2, EDGE},
  392.     {0, 1, MOVE},
  393.     {2, 2, EDGE}}, 9, 8, 82},
  394.   /*
  395.     pattern 30:
  396.     231        prevent a cut from isolating a stone
  397.     120
  398.      07
  399.     */
  400.   {{{0, 0, 2},
  401.     {2, 2, 7},
  402.     {2, 0, 1},
  403.     {0, 1, 1},
  404.     {1, 1, 2},
  405.     {1, 2, 0},
  406.     {2, 1, 0},
  407.     {1, 0, MOVE}}, 8, 8, 82}
  408. };
  409.  
  410. /* att = 0 - empty, 1 - your piece, 2 - my piece, 3 - my next move */
  411. /* 4 - empty on edge, 5 - your piece on edge, 6 - my piece on edge */
  412. /* 7 - not my piece (0 || 1), 8 - not your piece (0 || 2) */
  413. /* end patterns */
  414.