home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1996 June / MACPOWER-1996-06.ISO.7z / MACPOWER-1996-06.ISO / MacPowerオリジナル / キョービのプログラマー / リバースクライアント東山1 / 東山通り.proj / reverseUtils.INCL < prev   
Text File  |  1996-04-01  |  4KB  |  134 lines

  1. '--------------------------------------------------
  2. '----------------- ReverseUtils.INCL -------------
  3. '------------- Reverse Client Program -------------
  4. '--------------------------------------------------
  5. ' Original C version by Takuji Matsubara
  6. ' FutureBASIC II porting by Takayuki Nakano 
  7. '--------------------------------------------------
  8.  
  9. GLOBALS "reverseClient.GLBL"
  10. END GLOBALS
  11.  
  12. INCLUDE FILE _aplIncl
  13.  
  14. '--------------------------------------------------
  15. DEF FN readBoard(orec&,h,v) = PEEK(orec& + _board + h*_BoardSize + v)
  16.  
  17. LOCAL FN countRvStoneOne(orec&, dat&, nData)
  18.  XREF dat%(_BoardSize)
  19.  '----------
  20.  willReverse& = 0
  21.  terminaterFound% = _false
  22.  i=0
  23.  WHILE i < nData
  24.   LONG IF dat%(i) = _EmptyCell
  25.    i = nData                              'break loop
  26.   XELSE
  27.    LONG IF dat%(i) = orec&.myStoneR&
  28.     terminaterFound% = _true
  29.     i = nData                             'break loop
  30.        XELSE
  31.     INC(willReverse&)
  32.    END IF
  33.   END IF
  34.   INC(i)
  35.  WEND
  36.  IF terminaterFound% = _false THEN willReverse& = 0
  37. END FN = willReverse&
  38.  
  39. LOCAL
  40. DIM workData%(_BoardSize)
  41. LOCAL FN countReverseStone(orec&, whichCell&)
  42.  willReverse& = 0
  43.  LONG IF FN readBoard(orec&, whichCell&.h%, whichCell&.v%) = _EmptyCell
  44.   '------ right (h++) -----------------------------------
  45.   i=0 : h = whichCell&.h% + 1
  46.   WHILE h < _BoardSize
  47.    workData%(i) = FN readBoard(orec&, h, whichCell&.v%)
  48.    INC(i) : INC(h)
  49.   WEND
  50.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  51.   '------ left (h--) -----------------------------------
  52.   i=0 : h = whichCell&.h% - 1
  53.   WHILE h >= 0
  54.    workData%(i) = FN readBoard(orec&, h ,whichCell&.v%)
  55.    INC(i) : DEC(h)
  56.   WEND
  57.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  58.   '------ bottom (v++) -----------------------------------
  59.   i=0 : v = whichCell&.v% + 1
  60.   WHILE v < _BoardSize
  61.    workData%(i) = FN readBoard(orec&, whichCell&.h%, v)
  62.    INC(i) : INC(v)
  63.   WEND
  64.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  65.   '------ top (v--) -----------------------------------
  66.   i=0 : v = whichCell&.v% - 1
  67.   WHILE v >= 0
  68.    workData%(i) = FN readBoard(orec&, whichCell&.h%, v)
  69.    INC(i) : DEC(v)
  70.   WEND
  71.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  72.   '------ right-bottom (h++ v++) -----------------------------------
  73.   i=0 : h = whichCell&.h% + 1 : v = whichCell&.v% + 1
  74.   WHILE h < _BoardSize AND v < _BoardSize
  75.    workData%(i) = FN readBoard(orec&, h, v)
  76.    INC(i) : INC(h) : INC(v)
  77.   WEND
  78.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  79.   '------ right-top (h++ v--) -----------------------------------
  80.   i=0 : h = whichCell&.h% + 1 : v = whichCell&.v% - 1
  81.   WHILE h < _BoardSize AND v >= 0
  82.    workData%(i) = FN readBoard(orec&, h, v)
  83.    INC(i) : INC(h) : DEC(v)
  84.   WEND
  85.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  86.   '------ left-bottom (h-- v++) -----------------------------------
  87.   i=0 : h = whichCell&.h% - 1 : v = whichCell&.v% + 1
  88.   WHILE h >= 0 AND v < _BoardSize
  89.    workData%(i) = FN readBoard(orec&, h, v)
  90.    INC(i) : DEC(h) : INC(v)
  91.   WEND
  92.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  93.   '------ left-top (h-- v--) -----------------------------------
  94.   i=0 : h = whichCell&.h% - 1 : v = whichCell&.v% - 1
  95.   WHILE h >= 0 AND v >= 0
  96.    workData%(i) = FN readBoard(orec&, h, v)
  97.    INC(i) : DEC(h) : DEC(v)
  98.   WEND
  99.   willReverse& = willReverse& + FN countRvStoneOne(orec&, @workData%(0), i)
  100.  END IF
  101. END FN = willReverse&
  102.  
  103. LOCAL FN getPlaceInfo(orec&, pinfo&)
  104.  pinfoPt& = pinfo& + _pt
  105.  'XREF pinfoPt.4(_MaxPlaceableCell)       '<-- this causes bus error
  106.  pinfoNReverse& = pinfo& + _nReverse
  107.  XREF pinfoNReverse&(_MaxPlaceableCell)   'enables array in record
  108.  '----------
  109.  pinfo&.nCell& = 0
  110.  h=0
  111.  WHILE h < _BoardSize
  112.   v=0
  113.   WHILE v < _BoardSize
  114.    % pinfoPt& + _h + pinfo&.nCell& *4, h  '<-- pinfoPt.h%(pinfo&.nCell&) = h&
  115.    % pinfoPt& + _v + pinfo&.nCell& *4, v  '<-- pinfoPt.v%(pinfo&.nCell&) = v&
  116.    pinfoNReverse&(pinfo&.nCell&) = FN countReverseStone(orec&, pinfoPt& + pinfo&.nCell& *4)
  117.    IF pinfoNReverse&(pinfo&.nCell&) > 0 THEN INC(pinfo&.nCell&)
  118.    INC(v)
  119.   WEND
  120.   INC(h)
  121.  WEND
  122. END FN = pinfo&.nCell&
  123.  
  124. '------------- utilities by t-nakano -------------
  125. LOCAL FN countStone(orec&)
  126.  count% = 0
  127.  FOR v=0 TO _BoardSize-1
  128.   FOR h=0 TO _BoardSize-1
  129.    IF FN readBoard(orec&,h,v) THEN INC(count%)
  130.   NEXT
  131.  NEXT
  132. END FN = count%
  133.  
  134.