home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / Games / NeXTGo / Source / patterns.c < prev    next >
Encoding:
C/C++ Source or Header  |  1977-12-27  |  7.8 KB  |  392 lines

  1. /*
  2.   GNU GO - the game of Go (Wei-Chi)
  3.   Version 1.1   last revised 3-1-89
  4.   Copyright (C) Free Software Foundation, Inc.
  5.   written by Man L. Li
  6.   modified by Wayne Iba
  7.   documented by Bob Webber
  8.   NeXT version by John Neil
  9.   */
  10. /*
  11.   This program is free software; you can redistribute it and/or modify
  12.   it under the terms of the GNU General Public License as published by
  13.   the Free Software Foundation - version 1.
  14.   
  15.   This program is distributed in the hope that it will be useful,
  16.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.   GNU General Public License in file COPYING for more details.
  19.   
  20.   You should have received a copy of the GNU General Public License
  21.   along with this program; if not, write to the Free Software
  22.   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23.   
  24.   Please report any bug/fix, modification, suggestion to
  25.   
  26.   mail address:   Man L. Li
  27.   Dept. of Computer Science
  28.   University of Houston
  29.   4800 Calhoun Road
  30.   Houston, TX 77004
  31.   
  32.   e-mail address: manli@cs.uh.edu         (Internet)
  33.   coscgbn@uhvax1.bitnet   (BITNET)
  34.   70070,404               (CompuServe)
  35.  
  36. For the NeXT version, please report any bug/fix, modification, suggestion to
  37.  
  38. mail address:   John Neil
  39.                 Mathematics Department
  40.                 Portland State University
  41.                 PO Box 751
  42.                 Portland, OR  97207
  43.  
  44. e-mail address: neil@math.mth.pdx.edu  (Internet)
  45.                 neil@psuorvm.bitnet    (BITNET)
  46.   */
  47.  
  48. #define EMPTY 0
  49. #define PATNO 24
  50.  
  51. /* pattern x, y coor and attribute */
  52. /* for each pattern coordinate 0,0 must have my piece */
  53. /* att = 0 - empty, 1 - your piece, 2 - my piece, 3 - my next move */
  54. /* 4 - empty on edge, 5 - your piece on edge, 6 - my piece on edge */
  55. /*
  56.   struct patval {int x, y, att;};
  57.   */
  58.  
  59. /* patn - patern */
  60. /* patlen - no. of pieces in pattern */
  61. /* trfno - no. of transformation to match pattern */
  62. /*       8 for normal pattern, 4 for symmetrical pattern */
  63. /* patwt - pattern value */
  64. /*
  65.   struct pattern {
  66.   struct patval patn[MAXPC];
  67.   int patlen, trfno, patwt;
  68.   };
  69.   */
  70. static struct pattern pat[PATNO] = {
  71.   /*
  72.     pattern 0: 232   connect if invaded
  73.     010
  74.     */
  75.   {{{0, 0, 2},
  76.       {0, 1, EMPTY},
  77.       {1, 0, 3},
  78.       {1, 1, 1},
  79.       {2, 0, 2},
  80.       {2, 1, EMPTY}}, 6, 4, 82},
  81.   /*
  82.     pattern 1: 230   connect if invaded
  83.     012
  84.     */
  85.   {{{0, 0, 2},
  86.       {0, 1, EMPTY},
  87.       {1, 0, 3},
  88.       {1, 1, 1},
  89.       {2, 0, EMPTY},
  90.       {2, 1, 2}}, 6, 8, 82},
  91.   /*
  92.     pattern 2: 212   try to attack
  93.     030
  94.     */
  95.   {{{0, 0, 2},
  96.       {0, 1, EMPTY},
  97.       {1, 0, 1},
  98.       {1, 1, 3},
  99.       {2, 0, 2},
  100.       {2, 1, EMPTY}}, 6, 4, 82},
  101.   /*
  102.     pattern 3: 2302   connect if invaded
  103.     0100
  104.     */
  105.   {{{0, 0, 2},
  106.       {0, 1, EMPTY},
  107.       {1, 0, 3},
  108.       {1, 1, 1},
  109.       {2, 0, EMPTY},
  110.       {2, 1, EMPTY},
  111.       {3, 0, 2},
  112.       {3, 1, EMPTY}},8, 8, 83},
  113.   /*
  114.     pattern 4: 20302   connect if invaded
  115.     00100
  116.     */
  117.   {{{0, 0, 2},
  118.       {0, 1, EMPTY},
  119.       {1, 0, EMPTY},
  120.       {1, 1, EMPTY},
  121.       {2, 0, 3},
  122.       {2, 1, 1},
  123.       {3, 0, EMPTY},
  124.       {3, 1, EMPTY},
  125.       {4, 0, 2},
  126.       {4, 1, EMPTY}}, 10, 4, 84},
  127.   /*
  128.     pattern 5: 203   form eye to protect
  129.     021
  130.     */
  131.   {{{0, 0, 2},
  132.       {0, 1, EMPTY},
  133.       {1, 0, EMPTY},
  134.       {1, 1, 2},
  135.       {2, 0, 3},
  136.       {2, 1, 1}}, 6, 8, 82},
  137.   /*
  138.     pattern 6: 202    form eye to protect
  139.     031
  140.     */
  141.   {{{0, 0, 2},
  142.       {0, 1, EMPTY},
  143.       {1, 0, EMPTY},
  144.       {1, 1, 3},
  145.       {2, 0, 2},
  146.       {2, 1, 1}}, 6, 8, 82},
  147.   /*
  148.     pattern 7: 230   connect if invaded
  149.     102
  150.     */
  151.   {{{0, 0, 2},
  152.       {0, 1, 1},
  153.       {1, 0, 3},
  154.       {1, 1, EMPTY},
  155.       {2, 0, EMPTY},
  156.       {2, 1, 2}}, 6, 8, 82},
  157.   /*
  158.     pattern 8: 200000
  159.     00030  extend
  160.     00000
  161.     */
  162.   {{{0, 0, 2},
  163.       {1, 0, EMPTY},
  164.       {2, 0, EMPTY},
  165.       {3, 0, EMPTY},
  166.       {4, 0, EMPTY},
  167.       {5, 0, EMPTY},
  168.       {1, 1, EMPTY},
  169.       {2, 1, EMPTY},
  170.       {3, 1, EMPTY},
  171.       {4, 1, 3},
  172.       {5, 1, EMPTY},
  173.       {1, 2, EMPTY},
  174.       {2, 2, EMPTY},
  175.       {3, 2, EMPTY},
  176.       {4, 2, EMPTY},
  177.       {5, 2, EMPTY}}, 16, 8, 80},
  178.   /*
  179.     pattern 9:  2
  180.     000
  181.     000  extend
  182.     000
  183.     030
  184.     000
  185.     */
  186.   {{{ 0, 0, 2},
  187.       {-1, 1, EMPTY},
  188.       { 0, 1, EMPTY},
  189.       { 1, 1, EMPTY},
  190.       {-1, 2, EMPTY},
  191.       { 0, 2, EMPTY},
  192.       { 1, 2, EMPTY},
  193.       {-1, 3, EMPTY},
  194.       { 0, 3, EMPTY},
  195.       { 1, 3, EMPTY},
  196.       {-1, 4, EMPTY},
  197.       { 0, 4, 3},
  198.       { 1, 4, EMPTY},
  199.       {-1, 5, EMPTY},
  200.       { 0, 5, EMPTY},
  201.       { 1, 5, EMPTY}}, 16, 4, 80},
  202.   /*
  203.     pattern 10: 20000
  204.     0030  extend
  205.     0000
  206.     */
  207.   {{{0, 0, 2},
  208.       {1, 0, EMPTY},
  209.       {2, 0, EMPTY},
  210.       {3, 0, EMPTY},
  211.       {4, 0, EMPTY},
  212.       {1, 1, EMPTY},
  213.       {2, 1, EMPTY},
  214.       {3, 1, 3},
  215.       {4, 1, EMPTY},
  216.       {1, 2, EMPTY},
  217.       {2, 2, EMPTY},
  218.       {3, 2, EMPTY},
  219.       {4, 2, EMPTY}}, 13, 8, 79},
  220.   /*
  221.     pattern 11:    2
  222.     000
  223.     000  extend
  224.     030
  225.     000
  226.     */
  227.   {{{ 0, 0, 2},
  228.       {-1, 1, EMPTY},
  229.       { 0, 1, EMPTY},
  230.       { 1, 1, EMPTY},
  231.       {-1, 2, EMPTY},
  232.       { 0, 2, EMPTY},
  233.       { 1, 2, EMPTY},
  234.       {-1, 3, EMPTY},
  235.       { 0, 3, 3},
  236.       { 1, 3, EMPTY},
  237.       {-1, 4, EMPTY},
  238.       { 0, 4, EMPTY},
  239.       { 1, 4, EMPTY}}, 13, 4, 79},
  240.   /*
  241.     pattern 12: 2000
  242.     030  extend
  243.     000
  244.     */
  245.   {{{0, 0, 2},
  246.       {1, 0, EMPTY},
  247.       {2, 0, EMPTY},
  248.       {3, 0, EMPTY},
  249.       {1, 1, EMPTY},
  250.       {2, 1, 3},
  251.       {3, 1, EMPTY},
  252.       {1, 2, EMPTY},
  253.       {2, 2, EMPTY},
  254.       {3, 2, EMPTY}}, 10, 8, 76},
  255.   /*
  256.     pattern 13:    2
  257.     000  extend
  258.     030
  259.     000
  260.     */
  261.   {{{ 0, 0, 2},
  262.       {-1, 1, EMPTY},
  263.       { 0, 1, EMPTY},
  264.       { 1, 1, EMPTY},
  265.       {-1, 2, EMPTY},
  266.       { 0, 2, 3},
  267.       { 1, 2, EMPTY},
  268.       {-1, 3, EMPTY},
  269.       { 0, 3, EMPTY},
  270.       { 1, 3, EMPTY}}, 10, 4, 76},
  271.   /*
  272.     pattern 14: 643   form eye on the edge
  273.     20
  274.     */
  275.   {{{0, 0, 6},
  276.       {1, 0, 4},
  277.       {1, 1, 2},
  278.       {2, 0, 3},
  279.       {2, 1, EMPTY}}, 5, 8, 80},
  280.   /*
  281.     pattern 15: 646    solidify eye on the edge
  282.     231
  283.     */
  284.   {{{0, 0, 6},
  285.       {1, 0, 4},
  286.       {1, 1, 2},
  287.       {2, 0, 6},
  288.       {2, 1, 3},
  289.       {3, 1, 1}}, 6, 8, 75},
  290.   /*
  291.     pattern 16: 646    solidify eye on the edge
  292.     230
  293.     1
  294.     */
  295.   {{{0, 0, 6},
  296.       {1, 0, 4},
  297.       {1, 1, 2},
  298.       {2, 0, 6},
  299.       {2, 1, 3},
  300.       {2, 2, 1},
  301.       {3, 1, EMPTY}}, 7, 8, 75},
  302.   /*
  303.     pattern 17: 646    solidify eye on the edge
  304.     230
  305.     0
  306.     */
  307.   {{{0, 0, 6},
  308.       {1, 0, 4},
  309.       {1, 1, 2},
  310.       {2, 0, 6},
  311.       {2, 1, 3},
  312.       {2, 2, EMPTY},
  313.       {3, 1, EMPTY}}, 7, 8, 75},
  314.   /*
  315.     pattern 18:    2       form eye on center
  316.     202
  317.     3
  318.     */
  319.   {{{0, 0, 2},
  320.       {-1, 1, 2},
  321.       {0, 1, EMPTY},
  322.       {1, 1, 2},
  323.       {0, 2, 3}}, 5, 4, 80},
  324.   /*
  325.     pattern 19:    2       solidify eye on center
  326.     202
  327.     231
  328.     */
  329.   {{{0, 0, 2},
  330.       {-1, 1, 2},
  331.       {0, 1, EMPTY},
  332.       {1, 1, 2},
  333.       {0, 2, 2},
  334.       {1, 2, 3},
  335.       {2, 2, 1}}, 7, 8, 75},
  336.   /*
  337.     pattern 20:    2       solidify eye on center
  338.     202
  339.     230
  340.     0
  341.     */
  342.   {{{0, 0, 2},
  343.       {-1, 1, 2},
  344.       {0, 1, EMPTY},
  345.       {1, 1, 2},
  346.       {0, 2, 2},
  347.       {1, 2, 3},
  348.       {2, 2, EMPTY},
  349.       {1, 3, EMPTY}}, 8, 8, 75},
  350.   /*
  351.     pattern 21:    2      solidify eye on center
  352.     202
  353.     230
  354.     1
  355.     */
  356.   {{{0, 0, 2},
  357.       {-1, 1, 2},
  358.       {0, 1, EMPTY},
  359.       {1, 1, 2},
  360.       {0, 2, 2},
  361.       {1, 2, 3},
  362.       {2, 2, EMPTY},
  363.       {1, 3, 1}}, 8, 8, 75},
  364.   /*
  365.     pattern 23: 20100     connect if invaded
  366.     00302
  367.     */
  368.   {{{0, 0, 2},
  369.       {0, 1, EMPTY},
  370.       {1, 0, EMPTY},
  371.       {1, 1, EMPTY},
  372.       {2, 0, 1},
  373.       {2, 1, 3},
  374.       {3, 0, EMPTY},
  375.       {3, 1, EMPTY},
  376.       {4, 0, EMPTY},
  377.       {4, 1, 2}}, 10, 8, 84},
  378.   /*
  379.     pattern 24: 2100    connect if invaded
  380.     0302
  381.     */
  382.   {{{0, 0, 2},
  383.       {0, 1, EMPTY},
  384.       {1, 0, 1},
  385.       {1, 1, 3},
  386.       {2, 0, EMPTY},
  387.       {2, 1, EMPTY},
  388.       {3, 0, EMPTY},
  389.       {3, 1, 2}}, 10, 8, 83}
  390. };
  391. /* end patterns */
  392.