home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / CHESS20396612282006.psc / Defenitions1.021.bas < prev   
BASIC Source File  |  2006-12-28  |  68KB  |  2,774 lines

  1. Attribute VB_Name = "Module1"
  2. ' this moudle for all need data functions for move genertation validation evaluation and board updating
  3.  
  4.  
  5. 'pieces wieght for evaluation
  6. Public Const PawnWieght = 100
  7. Public Const KnightWieght = 300
  8. Public Const BishopWieght = 300
  9. Public Const RockWieght = 500
  10. Public Const QueenWieght = 900
  11. Public Const KingWieght = 9000
  12. Public Const PassedWieght = 30
  13. Public Const BackwardWieght = 10
  14. Public Const ConectedWieght = 25
  15. Public Const SaftyWieght = 100
  16.  
  17.  
  18.  
  19.  
  20. Public MoveNotation As String ' move notation to be displayed or checked for validating the move
  21.  
  22.  
  23. Public PostValue As Long
  24.  
  25. Type Mask    ' mask for attacking moves
  26. Attack(0 To 63) As Byte
  27. End Type
  28.  
  29. Public WhitePawn_enPassent(0 To 63) As Byte   ' to store enpassent squeres white ,black
  30. Public Blackpawn_enPassent(0 To 63) As Byte
  31. ' be needed for  castle implementaion
  32. Public RWRockMoved As Boolean
  33. Public LWRockMoved As Boolean
  34. Public RBRockMoved As Boolean
  35. Public LBRockMoved As Boolean
  36. Public WKingMoved As Boolean
  37. Public BKingMoved As Boolean
  38. Public WKO_O As Boolean
  39. Public WKO_O_O As Boolean
  40. Public BKO_O As Boolean
  41. Public BKO_O_O As Boolean
  42.  
  43. ' Chess board containin all pieces and Buffers
  44. Public Chess_Board(0 To 63) As Byte
  45. Public Chess_BoardBuffer(0 To 63) As Byte
  46.  
  47.  
  48. Public MT(0 To 6, 0 To 7) As Integer 'MT "movment table" i used only for king and knight number of squeres to move
  49. Public MB(0 To 119) As Integer ' used to check if the to squere generated is out of the board or not""
  50. Public LookUp(0 To 63) As Integer ' it is used to calculate the squere value inside  MB if it is -1 then this squere out of the board.
  51. 'these maskes for attacking squeres
  52. Public WKing_Mask(0 To 63) As Mask
  53. Public Wknight_Mask(0 To 63) As Mask
  54. Public WQueen_Mask(0 To 63) As Mask
  55. Public WRock_Mask(0 To 63) As Mask
  56. Public WBishop_Mask(0 To 63) As Mask
  57. Public WPawn_Mask(0 To 63) As Mask
  58.  
  59. Public BKing_Mask(0 To 63) As Mask
  60. Public Bknight_Mask(0 To 63) As Mask
  61. Public BQueen_Mask(0 To 63) As Mask
  62. Public BRock_Mask(0 To 63) As Mask
  63. Public BBishop_Mask(0 To 63) As Mask
  64. Public BPawn_Mask(0 To 63) As Mask
  65.  
  66. Public RankLookUp(0 To 63, 0 To 1) As Byte   'the rank begin and end squeres for each squere in the board
  67. Public FileLookUp(0 To 63, 0 To 1) As Byte   'the file bein and end squeres  for each squere in the board
  68. ' the begin end for diagonals for each squere for the a1-h8 and h1-a8 directions
  69. Public Diagonal1LookUp(0 To 63, 0 To 1) As Byte
  70. Public Diagonal2LookUp(0 To 63, 0 To 1) As Byte
  71.  
  72.  
  73. ' maskes used for each type of piece for each color potions
  74. Public Whitepawn_Position(0 To 63) As Byte
  75. Public WhiteKing_Position(0 To 63) As Byte
  76. Public WhiteQueen_Position(0 To 63) As Byte
  77. Public WhiteKnight_Position(0 To 63) As Byte
  78. Public WhiteBishop_Position(0 To 63) As Byte
  79. Public WhiteRock_Position(0 To 63) As Byte
  80. Public WhitePieces_Position(0 To 63) As Byte
  81.  
  82.  
  83.  
  84. Public Blackpawn_Position(0 To 63) As Byte
  85. Public BlackKing_Position(0 To 63) As Byte
  86. Public BlackQueen_Position(0 To 63) As Byte
  87. Public BlackKnight_Position(0 To 63) As Byte
  88. Public BlackBishop_Position(0 To 63) As Byte
  89. Public BlackRock_Position(0 To 63) As Byte
  90. Public BlackPieces_Position(0 To 63) As Byte
  91.  
  92.  
  93.  
  94. Public Whitepawn_PositionBuffer(0 To 63) As Byte
  95. Public WhiteKing_PositionBuffer(0 To 63) As Byte
  96. Public WhiteQueen_PositionBuffer(0 To 63) As Byte
  97. Public WhiteKnight_PositionBuffer(0 To 63) As Byte
  98. Public WhiteBishop_PositionBuffer(0 To 63) As Byte
  99. Public WhiteRock_PositionBuffer(0 To 63) As Byte
  100. Public WhitePieces_PositionBuffer(0 To 63) As Byte
  101.  
  102.  
  103. Public Blackpawn_PositionBuffer(0 To 63) As Byte
  104. Public BlackKing_PositionBuffer(0 To 63) As Byte
  105. Public BlackQueen_PositionBuffer(0 To 63) As Byte
  106. Public BlackKnight_PositionBuffer(0 To 63) As Byte
  107. Public BlackBishop_PositionBuffer(0 To 63) As Byte
  108. Public BlackRock_PositionBuffer(0 To 63) As Byte
  109. Public BlackPieces_PositionBuffer(0 To 63) As Byte
  110. 'to clear any board or any 64 array
  111. Public Empty_Mask(0 To 63) As Byte
  112.  
  113. ' this type  used to collect all needed information about a single move
  114. Public Type MoveList
  115. From  As Byte
  116. ToMov As Byte
  117. PieceF As Byte
  118. PieceT As Byte
  119. Location As String
  120. SideF As Integer
  121. SideT As Integer
  122. Attackvalue As Integer
  123. DefenseValue As Integer
  124. End Type
  125.  
  126.  
  127. Public CurnTurn As Integer ' to identify whose  turn
  128. Const WhiteTurn = 1
  129. Const BlackTurn = 0
  130.  
  131. Const CheckMate = 1000000100  'high value for check mate
  132.  
  133. ' exta points to encourage pawns advancaging in the center
  134.  
  135. Public WCenter_Points(0 To 63) As Integer
  136. Public BCenter_Points(0 To 63) As Integer
  137.  
  138. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (anyDestination As Any, anySource As Any, ByVal lngLength As Long)
  139. Public Declare Function GetTickCount Lib "kernel32" () As Long
  140. Sub main_1()
  141.  
  142. End Sub
  143. 'this is where the computer evaluating all posations by using the parameters are defined before
  144. Function EVALUATION() As Long
  145. For i = 0 To 63
  146. If Whitepawn_Position(i) = 1 Then
  147. wscore = wscore + 100 + WCenter_Points(i)
  148.  
  149. ElseIf WhiteKnight_Position(i) = 1 Then
  150. wscore = wscore + 250
  151. ElseIf WhiteBishop_Position(i) = 1 Then
  152. wscore = wscore + 300
  153. ElseIf WhiteRock_Position(i) = 1 Then
  154. wscore = wscore + 700
  155.  
  156. ElseIf WhiteQueen_Position(i) = 1 Then
  157. wscore = wscore + 9000
  158. ElseIf WhiteKing_Position(i) = 1 Then
  159. wscore = wscore + 15000
  160. ElseIf Blackpawn_Position(i) = 1 Then
  161. bscore = bscore - 100 + BCenter_Points(i)
  162. ElseIf BlackKnight_Position(i) = 1 Then
  163. bscore = bscore - 250
  164. ElseIf BlackBishop_Position(i) = 1 Then
  165. bscore = bscore - 300
  166. ElseIf BlackRock_Position(i) = 1 Then
  167.  
  168. bscore = bscore - 700
  169.  
  170. ElseIf BlackQueen_Position(i) = 1 Then
  171. bscore = bscore - 9000
  172. ElseIf BlackKing_Position(i) = 1 Then
  173. bscore = bscore - 15000
  174. End If
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182. Next i
  183.  
  184.  
  185. score = wscore + bscore
  186.  
  187. EVALUATION = score
  188.  
  189. End Function
  190.  
  191. Sub KingMove()
  192. ' generating king moves
  193.  
  194. For i = 0 To 63
  195. If WhiteKing_Position(i) = 1 Then
  196. CopyMemory WKing_Mask(i).Attack(0), Empty_Mask(0), 64
  197.  
  198. For B = 0 To 7
  199. c = MB(LookUp(i) + MT(6, B))
  200. If (c <> -1) Then
  201. If WhitePieces_Position(c) <> 1 Then
  202. WKing_Mask(i).Attack(c) = 1
  203. End If
  204.  
  205. End If
  206. Next B
  207.  
  208. ElseIf BlackKing_Position(i) = 1 Then
  209. CopyMemory BKing_Mask(i).Attack(0), Empty_Mask(0), 64
  210.  
  211. For B = 0 To 7
  212. c = MB(LookUp(i) + MT(6, B))
  213. If (c <> -1) Then
  214. If BlackPieces_Position(c) <> 1 Then
  215. BKing_Mask(i).Attack(c) = 1
  216. End If
  217.  
  218. End If
  219. Next B
  220. End If
  221. Next i
  222.  
  223. End Sub
  224. Sub RockMove()
  225. ' generating rook moves
  226. Dim rockCount, rockMovment, A As Integer
  227. rockCount = 0
  228. rockMovment = 0
  229. For A = 0 To 63
  230. CopyMemory WRock_Mask(A).Attack(0), Empty_Mask(0), 64
  231.  
  232.     If rockCount < 11 Then
  233.           If WhiteRock_Position(A) = 1 Then
  234.              rockCount = rockCount + 1
  235.              rockMovment = 0
  236.              For i = A + 1 To RankLookUp(A, 1) Step 1
  237.                  If rockMovment < 28 Then
  238.                    If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  239.                         WRock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  240. 'Brock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  241.                         rockMovment = rockMovment + 1
  242.                         Exit For
  243.  
  244.                     End If
  245.                    Else
  246.                     Exit For
  247.            End If
  248.         WRock_Mask(A).Attack(i) = 1
  249.  
  250. Next i
  251.  
  252.    For i = A - 1 To RankLookUp(A, 0) Step -1
  253.        If rockMovment < 28 Then
  254.           If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  255.              WRock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  256. 'Brock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  257.              rockMovment = rockMovment + 1
  258.               Exit For
  259.  
  260.              End If
  261.        Else
  262.          Exit For
  263.     End If
  264.         WRock_Mask(A).Attack(i) = 1
  265.  
  266.    Next i
  267.  
  268.    rockMovment = 0
  269. For i = A + 8 To FileLookUp(A, 1) Step 8
  270. If rockMovment < 28 Then
  271. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  272. WRock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  273. 'Brock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  274. rockMovment = rockMovment + 1
  275. Exit For
  276.  
  277. End If
  278. Else
  279. Exit For
  280. End If
  281. WRock_Mask(A).Attack(i) = 1
  282.  
  283. Next i
  284.  
  285.  For i = A - 8 To FileLookUp(A, 0) Step -8
  286. If rockMovment < 28 Then
  287. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  288. WRock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  289. 'Brock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  290. rockMovment = rockMovment + 1
  291. Exit For
  292.  
  293. End If
  294. Else
  295. Exit For
  296. End If
  297. WRock_Mask(A).Attack(i) = 1
  298. Next i
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308. End If
  309. Else
  310. Exit For
  311. End If
  312. WRock_Mask(A).Attack(A) = 0
  313. Next A
  314.  
  315.  
  316.  
  317. '//////////////////
  318. rockCount = 0
  319. rockMovment = 0
  320. For A = 0 To 63
  321. CopyMemory BRock_Mask(A).Attack(0), Empty_Mask(0), 64
  322.  
  323. If rockCount < 11 Then
  324.        If BlackRock_Position(A) = 1 Then
  325.           rockCount = rockCount + 1
  326.           rockMovment = 0
  327.           For i = A + 1 To RankLookUp(A, 1) Step 1
  328. If rockMovment < 28 Then
  329. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  330. 'Wrock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  331. BRock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  332. rockMovment = rockMovment + 1
  333. Exit For
  334.  
  335. End If
  336. Else
  337. Exit For
  338. End If
  339. BRock_Mask(A).Attack(i) = 1
  340.  
  341. Next i
  342.  
  343.  For i = A - 1 To RankLookUp(A, 0) Step -1
  344. If rockMovment < 28 Then
  345. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  346. 'Wrock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  347. BRock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  348. rockMovment = rockMovment + 1
  349. Exit For
  350.  
  351. End If
  352. Else
  353. Exit For
  354. End If
  355.  
  356. BRock_Mask(A).Attack(i) = 1
  357. Next i
  358.  
  359.  
  360.  
  361.  
  362.  
  363.           rockMovment = 0
  364.           For i = A + 8 To FileLookUp(A, 1) Step 8
  365. If rockMovment < 28 Then
  366. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  367. 'Wrock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  368. BRock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  369. rockMovment = rockMovment + 1
  370. Exit For
  371.  
  372. End If
  373. Else
  374. Exit For
  375. End If
  376. BRock_Mask(A).Attack(i) = 1
  377.  
  378. Next i
  379.  
  380.  For i = A - 8 To FileLookUp(A, 0) Step -8
  381. If rockMovment < 28 Then
  382. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  383. 'Brock_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  384. BRock_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  385. rockMovment = rockMovment + 1
  386. Exit For
  387.  
  388. End If
  389. Else
  390. Exit For
  391. End If
  392.  
  393. BRock_Mask(A).Attack(i) = 1
  394. Next i
  395.  
  396. End If
  397.  
  398. Else
  399. Exit For
  400. End If
  401. BRock_Mask(A).Attack(A) = 0
  402.  
  403. Next A
  404.  
  405. '//////////////////
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413. End Sub
  414. Sub BishopMove()
  415. 'generating bishop moves
  416. For A = 0 To 63
  417. If WhiteBishop_Position(A) = 1 Then
  418. CopyMemory WBishop_Mask(A).Attack(0), Empty_Mask(0), 64
  419.  
  420. For i = A - 7 To Diagonal2LookUp(A, 0) Step -7
  421. If WhitePieces_Position(i) <> 1 Then
  422. If BlackPieces_Position(i) <> 1 Then
  423. WBishop_Mask(A).Attack(i) = 1
  424. Else
  425. WBishop_Mask(A).Attack(i) = 1
  426. Exit For
  427. End If
  428. Else
  429. Exit For
  430. End If
  431.  
  432. Next i
  433.  
  434. For i = A + 7 To Diagonal2LookUp(A, 1) Step 7
  435. If WhitePieces_Position(i) <> 1 Then
  436. If BlackPieces_Position(i) <> 1 Then
  437. WBishop_Mask(A).Attack(i) = 1
  438. Else
  439. WBishop_Mask(A).Attack(i) = 1
  440. Exit For
  441. End If
  442. Else
  443. Exit For
  444. End If
  445.  
  446. Next i
  447. For i = A - 9 To Diagonal1LookUp(A, 0) Step -9
  448. If WhitePieces_Position(i) <> 1 Then
  449. If BlackPieces_Position(i) <> 1 Then
  450. WBishop_Mask(A).Attack(i) = 1
  451. Else
  452. WBishop_Mask(A).Attack(i) = 1
  453. Exit For
  454. End If
  455. Else
  456. Exit For
  457. End If
  458.  
  459. Next i
  460. For i = A + 9 To Diagonal1LookUp(A, 1) Step 9
  461. If WhitePieces_Position(i) <> 1 Then
  462. If BlackPieces_Position(i) <> 1 Then
  463. WBishop_Mask(A).Attack(i) = 1
  464. Else
  465. WBishop_Mask(A).Attack(i) = 1
  466. Exit For
  467. End If
  468. Else
  469. Exit For
  470. End If
  471.  
  472. Next i
  473. WBishop_Mask(A).Attack(A) = 0
  474. End If
  475.  
  476. Next A
  477.  
  478.  
  479. For A = 0 To 63
  480. If BlackBishop_Position(A) = 1 Then
  481. CopyMemory BBishop_Mask(A).Attack(0), Empty_Mask(0), 64
  482.  
  483. For i = A - 7 To Diagonal2LookUp(A, 0) Step -7
  484. If BlackPieces_Position(i) <> 1 Then
  485. If WhitePieces_Position(i) <> 1 Then
  486. BBishop_Mask(A).Attack(i) = 1
  487. Else
  488. BBishop_Mask(A).Attack(i) = 1
  489. Exit For
  490. End If
  491. Else
  492. Exit For
  493. End If
  494.  
  495.  
  496. Next i
  497.  
  498. For i = A + 7 To Diagonal2LookUp(A, 1) Step 7
  499. If BlackPieces_Position(i) <> 1 Then
  500. If WhitePieces_Position(i) <> 1 Then
  501. BBishop_Mask(A).Attack(i) = 1
  502. Else
  503. BBishop_Mask(A).Attack(i) = 1
  504. Exit For
  505. End If
  506. Else
  507. Exit For
  508. End If
  509.  
  510. Next i
  511. For i = A - 9 To Diagonal1LookUp(A, 0) Step -9
  512. If BlackPieces_Position(i) <> 1 Then
  513. If WhitePieces_Position(i) <> 1 Then
  514. BBishop_Mask(A).Attack(i) = 1
  515. Else
  516. BBishop_Mask(A).Attack(i) = 1
  517. Exit For
  518. End If
  519. Else
  520. Exit For
  521. End If
  522.  
  523. Next i
  524. For i = A + 9 To Diagonal1LookUp(A, 1) Step 9
  525. If BlackPieces_Position(i) <> 1 Then
  526. If WhitePieces_Position(i) <> 1 Then
  527. BBishop_Mask(A).Attack(i) = 1
  528. Else
  529. BBishop_Mask(A).Attack(i) = 1
  530. Exit For
  531. End If
  532. Else
  533. Exit For
  534. End If
  535.  
  536. Next i
  537. BBishop_Mask(A).Attack(A) = 0
  538. End If
  539.  
  540. Next A
  541. End Sub
  542.  
  543. Sub QueenMove()
  544. ' generating queen moves
  545. Dim QueenCount, QueenMovment, A As Integer
  546. QueenCount = 0
  547. QueenMovment = 0
  548. For A = 0 To 63
  549. CopyMemory WQueen_Mask(A).Attack(0), Empty_Mask(0), 64
  550.  
  551.     If QueenCount < 11 Then
  552.           If WhiteQueen_Position(A) = 1 Then
  553.              QueenCount = QueenCount + 1
  554.              QueenMovment = 0
  555.              For i = A + 1 To RankLookUp(A, 1) Step 1
  556.                  If QueenMovment < 28 Then
  557.                    If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  558.                         WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  559. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  560.                         QueenMovment = QueenMovment + 1
  561.                         Exit For
  562.  
  563.                     End If
  564.                    Else
  565.                     Exit For
  566.            End If
  567.         WQueen_Mask(A).Attack(i) = 1
  568.  
  569. Next i
  570.  
  571.    For i = A - 1 To RankLookUp(A, 0) Step -1
  572.        If QueenMovment < 28 Then
  573.           If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  574.              WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  575. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  576.              QueenMovment = QueenMovment + 1
  577.               Exit For
  578.  
  579.              End If
  580.        Else
  581.          Exit For
  582.     End If
  583.         WQueen_Mask(A).Attack(i) = 1
  584.  
  585.    Next i
  586.  
  587.    QueenMovment = 0
  588. For i = A + 8 To FileLookUp(A, 1) Step 8
  589. If QueenMovment < 28 Then
  590. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  591. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  592. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  593. QueenMovment = QueenMovment + 1
  594. Exit For
  595.  
  596. End If
  597. Else
  598. Exit For
  599. End If
  600. WQueen_Mask(A).Attack(i) = 1
  601.  
  602. Next i
  603.  
  604.  For i = A - 8 To FileLookUp(A, 0) Step -8
  605. If QueenMovment < 28 Then
  606. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  607. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  608. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  609. QueenMovment = QueenMovment + 1
  610. Exit For
  611.  
  612. End If
  613. Else
  614. Exit For
  615. End If
  616. WQueen_Mask(A).Attack(i) = 1
  617. Next i
  618.  
  619.          For i = A + 9 To Diagonal1LookUp(A, 1) Step 9
  620. If QueenMovment < 28 Then
  621. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  622. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  623. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  624. QueenMovment = QueenMovment + 1
  625. Exit For
  626.  
  627. End If
  628. Else
  629. Exit For
  630. End If
  631. WQueen_Mask(A).Attack(i) = 1
  632.  
  633. Next i
  634.  
  635.  For i = A - 9 To Diagonal1LookUp(A, 0) Step -9
  636. If QueenMovment < 28 Then
  637. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  638. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  639. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  640. QueenMovment = QueenMovment + 1
  641. Exit For
  642.  
  643. End If
  644. Else
  645. Exit For
  646. End If
  647. WQueen_Mask(A).Attack(i) = 1
  648.  
  649. Next i
  650.  
  651.  
  652.  
  653.  
  654.  
  655.           For i = A + 7 To Diagonal2LookUp(A, 1) Step 7
  656. If QueenMovment < 28 Then
  657. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  658. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  659. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  660. QueenMovment = QueenMovment + 1
  661. Exit For
  662.  
  663. End If
  664. Else
  665. Exit For
  666. End If
  667. WQueen_Mask(A).Attack(i) = 1
  668.  
  669. Next i
  670.  
  671.  For i = A - 7 To Diagonal2LookUp(A, 0) Step -7
  672. If QueenMovment < 28 Then
  673. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  674. WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  675. 'BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  676. QueenMovment = QueenMovment + 1
  677. Exit For
  678.  
  679. End If
  680. Else
  681. Exit For
  682. End If
  683. WQueen_Mask(A).Attack(i) = 1
  684.  
  685. Next i
  686.  
  687. End If
  688. Else
  689. Exit For
  690. End If
  691. WQueen_Mask(A).Attack(A) = 0
  692. Next A
  693.  
  694.  
  695.  
  696. '//////////////////
  697. QueenCount = 0
  698. QueenMovment = 0
  699. For A = 0 To 63
  700. CopyMemory BQueen_Mask(A).Attack(0), Empty_Mask(0), 64
  701.  
  702. If QueenCount < 11 Then
  703.        If BlackQueen_Position(A) = 1 Then
  704.           QueenCount = QueenCount + 1
  705.           QueenMovment = 0
  706.           For i = A + 1 To RankLookUp(A, 1) Step 1
  707. If QueenMovment < 28 Then
  708. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  709. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  710. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  711. QueenMovment = QueenMovment + 1
  712. Exit For
  713.  
  714. End If
  715. Else
  716. Exit For
  717. End If
  718. BQueen_Mask(A).Attack(i) = 1
  719.  
  720. Next i
  721.  
  722.  For i = A - 1 To RankLookUp(A, 0) Step -1
  723. If QueenMovment < 28 Then
  724. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  725. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  726. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  727. QueenMovment = QueenMovment + 1
  728. Exit For
  729.  
  730. End If
  731. Else
  732. Exit For
  733. End If
  734.  
  735. BQueen_Mask(A).Attack(i) = 1
  736. Next i
  737.  
  738.  
  739.  
  740.  
  741.  
  742.           QueenMovment = 0
  743.           For i = A + 8 To FileLookUp(A, 1) Step 8
  744. If QueenMovment < 28 Then
  745. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  746. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  747. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  748. QueenMovment = QueenMovment + 1
  749. Exit For
  750.  
  751. End If
  752. Else
  753. Exit For
  754. End If
  755. BQueen_Mask(A).Attack(i) = 1
  756.  
  757. Next i
  758.  
  759.  For i = A - 8 To FileLookUp(A, 0) Step -8
  760. If QueenMovment < 28 Then
  761. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  762. 'BQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  763. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  764. QueenMovment = QueenMovment + 1
  765. Exit For
  766.  
  767. End If
  768. Else
  769. Exit For
  770. End If
  771.  
  772. BQueen_Mask(A).Attack(i) = 1
  773. Next i
  774.  
  775.           For i = A + 9 To Diagonal1LookUp(A, 1) Step 9
  776. If QueenMovment < 28 Then
  777. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  778. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  779. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  780. QueenMovment = QueenMovment + 1
  781. Exit For
  782.  
  783. End If
  784. Else
  785. Exit For
  786. End If
  787. BQueen_Mask(A).Attack(i) = 1
  788.  
  789. Next i
  790.  
  791.  For i = A - 9 To Diagonal1LookUp(A, 0) Step -9
  792. If QueenMovment < 28 Then
  793. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  794. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  795. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  796. QueenMovment = QueenMovment + 1
  797. Exit For
  798.  
  799. End If
  800. Else
  801. Exit For
  802. End If
  803.  
  804. BQueen_Mask(A).Attack(i) = 1
  805. Next i
  806.  
  807.  
  808.  
  809.  
  810.  
  811.           QueenMovment = 0
  812.           For i = A + 7 To Diagonal2LookUp(A, 1) Step 7
  813. If QueenMovment < 28 Then
  814. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  815. 'WQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  816. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  817. QueenMovment = QueenMovment + 1
  818. Exit For
  819.  
  820. End If
  821. Else
  822. Exit For
  823. End If
  824. BQueen_Mask(A).Attack(i) = 1
  825.  
  826. Next i
  827.  
  828.  For i = A - 7 To Diagonal2LookUp(A, 0) Step -7
  829. If QueenMovment < 28 Then
  830. If WhitePieces_Position(i) = 1 Or BlackPieces_Position(i) = 1 Then
  831. 'BQueen_Mask(A).Attack(i) = 255 Xor ((WhitePieces_Position(i) And Not BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  832. BQueen_Mask(A).Attack(i) = 255 Xor ((Not WhitePieces_Position(i) And BlackPieces_Position(i)) Xor (Not WhitePieces_Position(i) And Not BlackPieces_Position(i)))
  833. QueenMovment = QueenMovment + 1
  834. Exit For
  835.  
  836. End If
  837. Else
  838. Exit For
  839. End If
  840.  
  841. BQueen_Mask(A).Attack(i) = 1
  842. Next i
  843.  
  844. End If
  845.  
  846. Else
  847. Exit For
  848. End If
  849. BQueen_Mask(A).Attack(A) = 0
  850.  
  851. Next A
  852.  
  853. '//////////////////
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864. End Sub
  865. Sub KnightMove()
  866. ' knight move generation
  867. For a1 = 0 To 63
  868. CopyMemory Wknight_Mask(a1).Attack(0), Empty_Mask(0), 64
  869. CopyMemory Bknight_Mask(a1).Attack(0), Empty_Mask(0), 64
  870.  
  871. Next a1
  872.  
  873. For i = 0 To 63
  874. If WhiteKnight_Position(i) = 1 Then
  875. For B = 0 To 7
  876. c = MB(LookUp(i) + MT(2, B))
  877. If (c <> -1) Then
  878. 'If Not WhitePieces_Position(c) Then
  879.  If WhitePieces_Position(c) <> 1 Then
  880. Wknight_Mask(i).Attack(c) = 1
  881.  
  882. End If
  883.  
  884. End If
  885. Next B
  886. Wknight_Mask(i).Attack(i) = 0
  887. End If
  888. Next i
  889. For i = 0 To 63
  890. If BlackKnight_Position(i) = 1 Then
  891. For B = 0 To 7
  892.  
  893. c = MB(LookUp(i) + MT(2, B))
  894. If (c <> -1) Then
  895.  
  896. 'If Not WhitePieces_Position(c) Then
  897. If BlackPieces_Position(c) <> 1 Then
  898. Bknight_Mask(i).Attack(c) = 1
  899. 'End If
  900. End If
  901. End If
  902.  
  903. Next B
  904. Bknight_Mask(i).Attack(i) = 0
  905. End If
  906.  
  907. Next i
  908. End Sub
  909.  
  910. Function ValidMove(ByVal From As Integer, ByVal ToM As Integer) As Boolean
  911. 'used to validate moves
  912. Dim Side As Integer ' side = 1 for white ...side =0 for black
  913. Dim sidefrm, sideto As Integer
  914.  
  915. Dim validation As Boolean
  916. validation = False
  917. Dim PType  As Integer
  918.  
  919.  
  920. Side = -1
  921. sidefrm = -1
  922. sideto = -1
  923.  
  924.  
  925. If WhitePieces_Position(From) Then
  926. Side = 1
  927. sidefrm = 1
  928.  
  929.  
  930. ElseIf BlackPieces_Position(From) Then
  931. Side = 0
  932. sidefrm = 0
  933.  
  934.  
  935. End If
  936.  
  937. If WhitePieces_Position(ToM) Then
  938. sideto = 1
  939. ElseIf BlackPieces_Position(ToM) Then
  940. sideto = 0
  941. End If
  942. If WhiteKing_Position(ToM) Then
  943. ValidMove = False
  944. Exit Function
  945. End If
  946. If BlackKing_Position(ToM) Then
  947. ValidMove = False
  948. Exit Function
  949. End If
  950.  
  951. If Side Then
  952.  
  953.  
  954. If Whitepawn_Position(From) Then
  955. If WPawn_Mask(From).Attack(ToM) = 1 Then
  956. validation = True
  957. PType = 1
  958. Else
  959. validation = False
  960. End If
  961.  
  962. End If
  963.  
  964. If WhiteKnight_Position(From) Then
  965. If (Wknight_Mask(From).Attack(ToM) = 1) Then
  966. validation = True
  967. PType = 2
  968. Else
  969. validation = False
  970. End If
  971. End If
  972.  
  973. If WhiteBishop_Position(From) Then
  974. If WBishop_Mask(From).Attack(ToM) = 1 Then
  975. validation = True
  976. PType = 3
  977. Else
  978. validation = False
  979. End If
  980. End If
  981.  
  982. If WhiteRock_Position(From) Then
  983. If WRock_Mask(From).Attack(ToM) = 1 Then
  984. validation = True
  985. PType = 4
  986. Else
  987. validation = False
  988. End If
  989. End If
  990.  
  991. If WhiteQueen_Position(From) Then
  992. If WQueen_Mask(From).Attack(ToM) = 1 Then
  993. validation = True
  994. PType = 5
  995. Else
  996. validation = False
  997. End If
  998.  
  999. End If
  1000.  
  1001. If WhiteKing_Position(From) Then
  1002. If WKing_Mask(From).Attack(ToM) = 1 Then
  1003. validation = True
  1004. PType = 6
  1005. Else
  1006. validation = False
  1007. End If
  1008.  
  1009. End If
  1010.  
  1011.  
  1012.  
  1013.  
  1014. Else
  1015.  
  1016. If Blackpawn_Position(From) Then
  1017. If BPawn_Mask(From).Attack(ToM) = 1 Then
  1018. validation = True
  1019. PType = 1
  1020. Else
  1021. validation = False
  1022. End If
  1023.  
  1024. End If
  1025.  
  1026. If BlackKnight_Position(From) Then
  1027. If Bknight_Mask(From).Attack(ToM) = 1 Then
  1028. validation = True
  1029. PType = 2
  1030.  
  1031. Else
  1032. validation = False
  1033. End If
  1034.  
  1035. End If
  1036.  
  1037. If BlackBishop_Position(From) Then
  1038. If BBishop_Mask(From).Attack(ToM) = 1 Then
  1039. validation = True
  1040. PType = 3
  1041. Else
  1042. validation = False
  1043. End If
  1044.  
  1045. End If
  1046.  
  1047. If BlackRock_Position(From) Then
  1048. If BRock_Mask(From).Attack(ToM) = 1 Then
  1049. validation = True
  1050. PType = 4
  1051. Else
  1052. validation = False
  1053. End If
  1054.  
  1055. End If
  1056.  
  1057. If BlackQueen_Position(From) Then
  1058. If BQueen_Mask(From).Attack(ToM) = 1 Then
  1059. validation = True
  1060. PType = 5
  1061. Else
  1062. validation = False
  1063. End If
  1064.  
  1065. End If
  1066.  
  1067. If BlackKing_Position(From) Then
  1068. If BKing_Mask(From).Attack(ToM) = 1 Then
  1069. validation = True
  1070. PType = 6
  1071. Else
  1072. validation = False
  1073. End If
  1074. End If
  1075. End If
  1076.  
  1077. If sideto = 1 Then
  1078.  
  1079.  If Whitepawn_Position(ToM) Then
  1080.  PtoType = 1
  1081.  ElseIf WhiteKnight_Position(ToM) Then
  1082.  PtoType = 2
  1083.  ElseIf WhiteBishop_Position(ToM) Then
  1084.  PtoType = 3
  1085.  ElseIf WhiteRock_Position(ToM) Then
  1086.  PtoType = 4
  1087.  ElseIf WhiteQueen_Position(ToM) Then
  1088.  PtoType = 5
  1089.  ElseIf WhiteKing_Position(ToM) Then
  1090.  PtoType = 6
  1091. End If
  1092.  ElseIf sideto = 0 Then
  1093.  If Blackpawn_Position(ToM) Then
  1094.  PtoType = 1
  1095.  ElseIf BlackKnight_Position(ToM) Then
  1096.  PtoType = 2
  1097.  ElseIf BlackBishop_Position(ToM) Then
  1098.  PtoType = 3
  1099.  ElseIf BlackRock_Position(ToM) Then
  1100.  PtoType = 4
  1101.  ElseIf BlackQueen_Position(ToM) Then
  1102.  PtoType = 5
  1103.  ElseIf BlackKing_Position(ToM) Then
  1104.  PtoType = 6
  1105. End If
  1106.  Else
  1107.  PtoType = 0
  1108.  End If
  1109.  
  1110.  If validation Then
  1111. MovFrm = From
  1112. MovTo = ToM
  1113. MoveNotation = ""
  1114. MoveNotation = MovToStr(MovFrm, PType, ToM, PtoType)
  1115.  Call UpdateBoards(MovFrm, PType, sidefrm, ToM, PtoType, sideto)
  1116.  End If
  1117.  
  1118.  
  1119.  
  1120. ValidMove = validation
  1121.  
  1122. End Function
  1123. Sub PawnMove()
  1124. ' generating pawn moves
  1125. For i = 0 To 63
  1126. CopyMemory WPawn_Mask(i).Attack(0), Empty_Mask(0), 64
  1127. CopyMemory BPawn_Mask(i).Attack(0), Empty_Mask(0), 64
  1128.  
  1129. Next i
  1130.  
  1131. Dim B
  1132.  
  1133. For i = 48 To 55
  1134. If Whitepawn_Position(i) = 1 Then
  1135. c = i - 8
  1136. B = MB(LookUp(i) - 11)
  1137. If B <> -1 Then
  1138. If (BlackPieces_Position(B) = 1) Then
  1139. WPawn_Mask(i).Attack(B) = 1
  1140. End If
  1141. End If
  1142. B = MB(LookUp(i) - 9)
  1143. If B <> -1 Then
  1144. If (BlackPieces_Position(B) = 1) Then
  1145. WPawn_Mask(i).Attack(B) = 1
  1146. End If
  1147. End If
  1148. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1149. WPawn_Mask(i).Attack(c) = 1
  1150.  
  1151.  
  1152. c = c - 8
  1153. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1154. WPawn_Mask(i).Attack(c) = 1
  1155. End If
  1156. End If
  1157. End If
  1158. Next i
  1159.  
  1160. For i = 8 To 47
  1161. If Whitepawn_Position(i) = 1 Then
  1162. B = MB(LookUp(i) - 11)
  1163. If B <> -1 Then
  1164. If (BlackPieces_Position(B) = 1) Then
  1165. WPawn_Mask(i).Attack(B) = 1
  1166. End If
  1167. End If
  1168. B = MB(LookUp(i) - 9)
  1169. If B <> -1 Then
  1170. If (BlackPieces_Position(B) = 1) Then
  1171. WPawn_Mask(i).Attack(B) = 1
  1172. End If
  1173. End If
  1174. c = i - 8
  1175.  
  1176. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1177. WPawn_Mask(i).Attack(c) = 1
  1178.  
  1179. End If
  1180. End If
  1181.  
  1182. Next i
  1183.  
  1184.  
  1185.  
  1186. For i = 8 To 15
  1187. If Blackpawn_Position(i) = 1 Then
  1188. c = i + 8
  1189. B = MB(LookUp(i) + 11)
  1190. If B <> -1 Then
  1191. If (WhitePieces_Position(B) = 1) Then
  1192. BPawn_Mask(i).Attack(B) = 1
  1193. End If
  1194. End If
  1195. B = MB(LookUp(i) + 9)
  1196. If B <> -1 Then
  1197. If (WhitePieces_Position(B) = 1) Then
  1198. BPawn_Mask(i).Attack(B) = 1
  1199. End If
  1200. End If
  1201. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1202. BPawn_Mask(i).Attack(c) = 1
  1203.  
  1204. c = c + 8
  1205. B = MB(LookUp(i) + 11)
  1206. If B <> -1 Then
  1207. If (WhitePieces_Position(B) = 1) Then
  1208. BPawn_Mask(i).Attack(B) = 1
  1209. End If
  1210. End If
  1211. B = MB(LookUp(i) + 9)
  1212. If B <> -1 Then
  1213. If (WhitePieces_Position(B) = 1) Then
  1214. BPawn_Mask(i).Attack(B) = 1
  1215. End If
  1216. End If
  1217. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1218. BPawn_Mask(i).Attack(c) = 1
  1219.  
  1220. End If
  1221. End If
  1222. End If
  1223. Next i
  1224.  
  1225. For i = 8 To 55
  1226. If Blackpawn_Position(i) = 1 Then
  1227.  
  1228. c = i + 8
  1229. B = MB(LookUp(i) + 11)
  1230. If B <> -1 Then
  1231. If (WhitePieces_Position(B) = 1) Then
  1232. BPawn_Mask(i).Attack(B) = 1
  1233. End If
  1234. End If
  1235. B = MB(LookUp(i) + 9)
  1236. If B <> -1 Then
  1237. If (WhitePieces_Position(B) = 1) Then
  1238. BPawn_Mask(i).Attack(B) = 1
  1239. End If
  1240. End If
  1241. If WhitePieces_Position(c) <> 1 And BlackPieces_Position(c) <> 1 Then
  1242. BPawn_Mask(i).Attack(c) = 1
  1243.  
  1244. End If
  1245. End If
  1246. Next i
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255. End Sub
  1256. Sub UpdateBoards(ByVal MovFrm As Integer, ByVal piecfrm As Integer, ByVal sidefrm As Integer, ByVal MovTo As Integer, ByVal piecto As Integer, ByVal sideto As Integer)
  1257. ' updating the board with the move
  1258. Select Case sidefrm
  1259.  
  1260. Case 1:
  1261. Select Case piecfrm
  1262. Case 1: Whitepawn_Position(MovFrm) = 0
  1263.         Whitepawn_Position(MovTo) = 1
  1264.         
  1265. Case 2: WhiteKnight_Position(MovFrm) = 0
  1266.         WhiteKnight_Position(MovTo) = 1
  1267.  
  1268. Case 3: WhiteBishop_Position(MovFrm) = 0
  1269.         WhiteBishop_Position(MovTo) = 1
  1270.         
  1271. Case 4: WhiteRock_Position(MovFrm) = 0
  1272.         WhiteRock_Position(MovTo) = 1
  1273.  
  1274. Case 5: WhiteQueen_Position(MovFrm) = 0
  1275.         WhiteQueen_Position(MovTo) = 1
  1276.         
  1277. Case 6: WhiteKing_Position(MovFrm) = 0
  1278.         WhiteKing_Position(MovTo) = 1
  1279.  
  1280. End Select
  1281. WhitePieces_Position(MovFrm) = 0
  1282. WhitePieces_Position(MovTo) = 1
  1283. Chess_Board(MovFrm) = 0
  1284. Chess_Board(MovTo) = 1
  1285.  
  1286. Case 0:
  1287. Select Case piecfrm
  1288. Case 1: Blackpawn_Position(MovFrm) = 0
  1289.         Blackpawn_Position(MovTo) = 1
  1290.         
  1291. Case 2: BlackKnight_Position(MovFrm) = 0
  1292.         BlackKnight_Position(MovTo) = 1
  1293.  
  1294. Case 3: BlackBishop_Position(MovFrm) = 0
  1295.         BlackBishop_Position(MovTo) = 1
  1296.         
  1297. Case 4: BlackRock_Position(MovFrm) = 0
  1298.         BlackRock_Position(MovTo) = 1
  1299.  
  1300. Case 5: BlackQueen_Position(MovFrm) = 0
  1301.         BlackQueen_Position(MovTo) = 1
  1302.         
  1303. Case 6: BlackKing_Position(MovFrm) = 0
  1304.         BlackKing_Position(MovTo) = 1
  1305.  
  1306. End Select
  1307. BlackPieces_Position(MovFrm) = 0
  1308. BlackPieces_Position(MovTo) = 1
  1309. Chess_Board(MovFrm) = 0
  1310. Chess_Board(MovTo) = 1
  1311.  
  1312. Case -1:
  1313.  
  1314. End Select
  1315.  
  1316. Select Case sideto
  1317.  
  1318. Case 1:
  1319. Select Case piecto
  1320. Case 1: Whitepawn_Position(MovTo) = 0
  1321.         
  1322. Case 2: WhiteKnight_Position(MovTo) = 0
  1323.  
  1324. Case 3: WhiteBishop_Position(MovTo) = 0
  1325.         
  1326. Case 4: WhiteRock_Position(MovTo) = 0
  1327.  
  1328. Case 5: WhiteQueen_Position(MovTo) = 0
  1329.         
  1330. Case 6: WhiteKing_Position(MovTo) = 0
  1331.  
  1332. End Select
  1333. WhitePieces_Position(MovTo) = 0
  1334. Chess_Board(MovFrm) = 0
  1335. Chess_Board(MovTo) = 1
  1336. Case 0:
  1337. Select Case piecto
  1338. Case 1: Blackpawn_Position(MovTo) = 0
  1339.         
  1340. Case 2: BlackKnight_Position(MovTo) = 0
  1341.  
  1342. Case 3: BlackBishop_Position(MovTo) = 0
  1343.         
  1344. Case 4: BlackRock_Position(MovTo) = 0
  1345.         
  1346. Case 5: BlackQueen_Position(MovTo) = 0
  1347.         
  1348. Case 6: BlackKing_Position(MovTo) = 0
  1349.  
  1350. End Select
  1351.  
  1352. BlackPieces_Position(MovTo) = 0
  1353. Chess_Board(MovFrm) = 0
  1354. Chess_Board(MovTo) = 1
  1355.  
  1356. Case -1:
  1357. End Select
  1358. Dim Mobility As Integer
  1359. Side = 0
  1360.  
  1361.  
  1362. Dim move_list(100) As MoveList
  1363.  
  1364.  
  1365. End Sub
  1366. Sub Gen_Movment()
  1367. 'this function used to start all move generation functions
  1368. Call BishopMove
  1369. Call QueenMove
  1370. Call RockMove
  1371. Call KingMove
  1372. Call KnightMove
  1373. Call PawnMove
  1374. End Sub
  1375. Sub Generate_Moves(ByVal Side As Integer, ByRef Mobility As Integer, ByRef move_list() As MoveList)
  1376. ' generate move list for the side to move depending on the pieces postion at that time and return also the mobility for number of possible moves
  1377.  
  1378. Dim Mobile As Integer
  1379. Dim sf, st, frm, Tos, pf, pt As Integer
  1380. Call Gen_Movment
  1381.  
  1382. If Side = 1 Then
  1383. sf = 1
  1384. For A = 0 To 63
  1385. If Whitepawn_Position(A) = 1 Then
  1386. For i = 0 To 63
  1387. If WPawn_Mask(A).Attack(i) = 1 Then
  1388.           If BlackPieces_Position(i) = 1 Then
  1389.             
  1390. sideto = 0
  1391. Else
  1392. sideto = -1
  1393. End If
  1394. If sideto = 0 Then
  1395.  If Blackpawn_Position(i) = 1 Then
  1396.  pt = 1
  1397.  ElseIf BlackKnight_Position(i) = 1 Then
  1398.  pt = 2
  1399.  ElseIf BlackBishop_Position(i) = 1 Then
  1400.  pt = 3
  1401.  ElseIf BlackRock_Position(i) = 1 Then
  1402.  pt = 4
  1403.  ElseIf BlackQueen_Position(i) = 1 Then
  1404.  pt = 5
  1405.  ElseIf BlackKing_Position(i) = 1 Then
  1406.  pt = 6
  1407. End If
  1408.  Else
  1409.  pt = 0
  1410.  End If
  1411. Mobile = Mobile + 1
  1412. '
  1413. MovNot = MovToStr(A, 1, i, pt)
  1414. move_list(Mobile).From = A
  1415. move_list(Mobile).ToMov = i
  1416. move_list(Mobile).Location = MovNot
  1417. move_list(Mobile).PieceF = 1
  1418. move_list(Mobile).PieceT = pt
  1419. move_list(Mobile).SideF = 1
  1420. move_list(Mobile).SideT = sideto
  1421. Select Case pt
  1422. Case 0: move_list(Mobile).Attackvalue = 0
  1423. Case 1: move_list(Mobile).Attackvalue = 1
  1424. Case 2: move_list(Mobile).Attackvalue = 3
  1425. Case 3: move_list(Mobile).Attackvalue = 4
  1426. Case 4: move_list(Mobile).Attackvalue = 5
  1427. Case 5: move_list(Mobile).Attackvalue = 10
  1428. Case 6: move_list(Mobile).Attackvalue = 100
  1429. End Select
  1430.  
  1431. End If
  1432.  
  1433. Next i
  1434. ElseIf WhiteKnight_Position(A) = 1 Then
  1435.  
  1436. For i = 0 To 63
  1437. If Wknight_Mask(A).Attack(i) = 1 Then
  1438.           If BlackPieces_Position(i) = 1 Then
  1439.             
  1440. sideto = 0
  1441. Else
  1442. sideto = -1
  1443. End If
  1444. If sideto = 0 Then
  1445.  If Blackpawn_Position(i) = 1 Then
  1446.  pt = 1
  1447.  ElseIf BlackKnight_Position(i) = 1 Then
  1448.  pt = 2
  1449.  ElseIf BlackBishop_Position(i) = 1 Then
  1450.  pt = 3
  1451.  ElseIf BlackRock_Position(i) = 1 Then
  1452.  pt = 4
  1453.  ElseIf BlackQueen_Position(i) = 1 Then
  1454.  pt = 5
  1455.  ElseIf BlackKing_Position(i) = 1 Then
  1456.  pt = 6
  1457. End If
  1458.  Else
  1459.  pt = 0
  1460.  End If
  1461. Mobile = Mobile + 1
  1462. '
  1463. MovNot = MovToStr(A, 2, i, pt)
  1464. move_list(Mobile).From = A
  1465. move_list(Mobile).ToMov = i
  1466. move_list(Mobile).Location = MovNot
  1467. move_list(Mobile).PieceF = 2
  1468. move_list(Mobile).PieceT = pt
  1469. move_list(Mobile).SideF = 1
  1470. move_list(Mobile).SideT = sideto
  1471. Select Case pt
  1472. Case 0: move_list(Mobile).Attackvalue = 0
  1473. Case 1: move_list(Mobile).Attackvalue = 1
  1474. Case 2: move_list(Mobile).Attackvalue = 3
  1475. Case 3: move_list(Mobile).Attackvalue = 4
  1476. Case 4: move_list(Mobile).Attackvalue = 5
  1477. Case 5: move_list(Mobile).Attackvalue = 10
  1478. Case 6: move_list(Mobile).Attackvalue = 100
  1479. End Select
  1480. End If
  1481.  
  1482. Next i
  1483.  
  1484. ElseIf WhiteBishop_Position(A) = 1 Then
  1485. For i = 0 To 63
  1486. If WBishop_Mask(A).Attack(i) = 1 And WhitePieces_Position(i) <> 1 Then
  1487.           If BlackPieces_Position(i) = 1 Then
  1488.             
  1489. sideto = 0
  1490. Else
  1491. sideto = -1
  1492. End If
  1493. If sideto = 0 Then
  1494.  If Blackpawn_Position(i) = 1 Then
  1495.  pt = 1
  1496.  ElseIf BlackKnight_Position(i) = 1 Then
  1497.  pt = 2
  1498.  ElseIf BlackBishop_Position(i) = 1 Then
  1499.  pt = 3
  1500.  ElseIf BlackRock_Position(i) = 1 Then
  1501.  pt = 4
  1502.  ElseIf BlackQueen_Position(i) = 1 Then
  1503.  pt = 5
  1504.  ElseIf BlackKing_Position(i) = 1 Then
  1505.  pt = 6
  1506. End If
  1507.  Else
  1508.  pt = 0
  1509.  End If
  1510. Mobile = Mobile + 1
  1511. '
  1512. MovNot = MovToStr(A, 3, i, pt)
  1513. move_list(Mobile).From = A
  1514. move_list(Mobile).ToMov = i
  1515. move_list(Mobile).Location = MovNot
  1516. move_list(Mobile).PieceF = 3
  1517. move_list(Mobile).PieceT = pt
  1518. move_list(Mobile).SideF = 1
  1519. move_list(Mobile).SideT = sideto
  1520. Select Case pt
  1521. Case 0: move_list(Mobile).Attackvalue = 0
  1522. Case 1: move_list(Mobile).Attackvalue = 1
  1523. Case 2: move_list(Mobile).Attackvalue = 3
  1524. Case 3: move_list(Mobile).Attackvalue = 4
  1525. Case 4: move_list(Mobile).Attackvalue = 5
  1526. Case 5: move_list(Mobile).Attackvalue = 10
  1527. Case 6: move_list(Mobile).Attackvalue = 100
  1528. End Select
  1529. End If
  1530.  
  1531. Next i
  1532.  
  1533. ElseIf WhiteRock_Position(A) = 1 Then
  1534. For i = 0 To 63
  1535. If WRock_Mask(A).Attack(i) = 1 Then
  1536.           If BlackPieces_Position(i) = 1 Then
  1537.             
  1538. sideto = 0
  1539. Else
  1540. sideto = -1
  1541. End If
  1542. If sideto = 0 Then
  1543.  If Blackpawn_Position(i) Then
  1544.  pt = 1
  1545.  ElseIf BlackKnight_Position(i) = 1 Then
  1546.  pt = 2
  1547.  ElseIf BlackBishop_Position(i) = 1 Then
  1548.  pt = 3
  1549.  ElseIf BlackRock_Position(i) = 1 Then
  1550.  pt = 4
  1551.  ElseIf BlackQueen_Position(i) = 1 Then
  1552.  pt = 5
  1553.  ElseIf BlackKing_Position(i) = 1 Then
  1554.  pt = 6
  1555. End If
  1556.  Else
  1557.  pt = 0
  1558.  End If
  1559. Mobile = Mobile + 1
  1560. '
  1561. MovNot = MovToStr(A, 4, i, pt)
  1562. move_list(Mobile).From = A
  1563. move_list(Mobile).ToMov = i
  1564. move_list(Mobile).Location = MovNot
  1565. move_list(Mobile).PieceF = 4
  1566. move_list(Mobile).PieceT = pt
  1567. move_list(Mobile).SideF = 1
  1568. move_list(Mobile).SideT = sideto
  1569. Select Case pt
  1570. Case 0: move_list(Mobile).Attackvalue = 0
  1571. Case 1: move_list(Mobile).Attackvalue = 1
  1572. Case 2: move_list(Mobile).Attackvalue = 3
  1573. Case 3: move_list(Mobile).Attackvalue = 4
  1574. Case 4: move_list(Mobile).Attackvalue = 5
  1575. Case 5: move_list(Mobile).Attackvalue = 10
  1576. Case 6: move_list(Mobile).Attackvalue = 100
  1577. End Select
  1578. End If
  1579.  
  1580. Next i
  1581. ElseIf WhiteQueen_Position(A) = 1 Then
  1582. For i = 0 To 63
  1583.  
  1584.  
  1585. If WQueen_Mask(A).Attack(i) = 1 Then
  1586.           If BlackPieces_Position(i) = 1 Then
  1587.           
  1588. sideto = 0
  1589. Else
  1590. sideto = -1
  1591. End If
  1592. If sideto = 0 Then
  1593.  If Blackpawn_Position(i) = 1 Then
  1594.  pt = 1
  1595.  ElseIf BlackKnight_Position(i) = 1 Then
  1596.  pt = 2
  1597.  ElseIf BlackBishop_Position(i) = 1 Then
  1598.  pt = 3
  1599.  ElseIf BlackRock_Position(i) = 1 Then
  1600.  pt = 4
  1601.  ElseIf BlackQueen_Position(i) = 1 Then
  1602.  pt = 5
  1603.  ElseIf BlackKing_Position(i) = 1 Then
  1604.  pt = 6
  1605. End If
  1606.  Else
  1607.  pt = 0
  1608.  End If
  1609. Mobile = Mobile + 1
  1610. '
  1611. MovNot = MovToStr(A, 5, i, pt)
  1612. move_list(Mobile).From = A
  1613. move_list(Mobile).ToMov = i
  1614. move_list(Mobile).Location = MovNot
  1615. move_list(Mobile).PieceF = 5
  1616. move_list(Mobile).PieceT = pt
  1617. move_list(Mobile).SideF = 1
  1618. move_list(Mobile).SideT = sideto
  1619. Select Case pt
  1620. Case 0: move_list(Mobile).Attackvalue = 0
  1621. Case 1: move_list(Mobile).Attackvalue = 1
  1622. Case 2: move_list(Mobile).Attackvalue = 3
  1623. Case 3: move_list(Mobile).Attackvalue = 4
  1624. Case 4: move_list(Mobile).Attackvalue = 5
  1625. Case 5: move_list(Mobile).Attackvalue = 10
  1626. Case 6: move_list(Mobile).Attackvalue = 100
  1627. End Select
  1628. End If
  1629.  
  1630. Next i
  1631.  
  1632. ElseIf WhiteKing_Position(A) = 1 Then
  1633. For i = 0 To 63
  1634. If WKing_Mask(A).Attack(i) = 1 Then
  1635.           If BlackPieces_Position(i) = 1 Then
  1636.             
  1637. sideto = 0
  1638. Else
  1639. sideto = -1
  1640. End If
  1641. If sideto = 0 Then
  1642.  If Blackpawn_Position(i) Then
  1643.  pt = 1
  1644.  ElseIf BlackKnight_Position(i) = 1 Then
  1645.  pt = 2
  1646.  ElseIf BlackBishop_Position(i) = 1 Then
  1647.  pt = 3
  1648.  ElseIf BlackRock_Position(i) = 1 Then
  1649.  pt = 4
  1650.  ElseIf BlackQueen_Position(i) = 1 Then
  1651.  pt = 5
  1652.  ElseIf BlackKing_Position(i) = 1 Then
  1653.  pt = 6
  1654. End If
  1655.  Else
  1656.  pt = 0
  1657.  End If
  1658. Mobile = Mobile + 1
  1659. '
  1660. MovNot = MovToStr(A, 6, i, pt)
  1661. move_list(Mobile).From = A
  1662. move_list(Mobile).ToMov = i
  1663. move_list(Mobile).Location = MovNot
  1664. move_list(Mobile).PieceF = 6
  1665. move_list(Mobile).PieceT = pt
  1666. move_list(Mobile).SideF = 1
  1667. move_list(Mobile).SideT = sideto
  1668. Select Case pt
  1669. Case 0: move_list(Mobile).Attackvalue = 0
  1670. Case 1: move_list(Mobile).Attackvalue = 1
  1671. Case 2: move_list(Mobile).Attackvalue = 3
  1672. Case 3: move_list(Mobile).Attackvalue = 4
  1673. Case 4: move_list(Mobile).Attackvalue = 5
  1674. Case 5: move_list(Mobile).Attackvalue = 110
  1675. Case 6: move_list(Mobile).Attackvalue = 0
  1676. End Select
  1677. End If
  1678.  
  1679. Next i
  1680. End If
  1681.  
  1682. Next A
  1683.  
  1684.  
  1685. ElseIf Side = 0 Then
  1686. sf = 0
  1687.  
  1688. For A = 0 To 63
  1689. If Blackpawn_Position(A) = 1 Then
  1690. For i = 0 To 63
  1691. If BPawn_Mask(A).Attack(i) = 1 Then
  1692.           If WhitePieces_Position(i) = 1 Then
  1693.             
  1694. sideto = 1
  1695. Else
  1696. sideto = -1
  1697. End If
  1698. If sideto = 1 Then
  1699.  If Whitepawn_Position(i) = 1 Then
  1700.  pt = 1
  1701.  ElseIf WhiteKnight_Position(i) = 1 Then
  1702.  pt = 2
  1703.  ElseIf WhiteBishop_Position(i) = 1 Then
  1704.  pt = 3
  1705.  ElseIf WhiteRock_Position(i) = 1 Then
  1706.  pt = 4
  1707.  ElseIf WhiteQueen_Position(i) = 1 Then
  1708.  pt = 5
  1709.  ElseIf WhiteKing_Position(i) = 1 Then
  1710.  pt = 6
  1711. End If
  1712.  Else
  1713.  pt = 0
  1714.  End If
  1715. Mobile = Mobile + 1
  1716. '
  1717. MovNot = MovToStr(A, 1, i, pt)
  1718. move_list(Mobile).From = A
  1719. move_list(Mobile).ToMov = i
  1720. move_list(Mobile).Location = MovNot
  1721. move_list(Mobile).PieceF = 1
  1722. move_list(Mobile).PieceT = pt
  1723. move_list(Mobile).SideF = 0
  1724. move_list(Mobile).SideT = sideto
  1725. Select Case pt
  1726. Case 0: move_list(Mobile).Attackvalue = 0
  1727. Case 1: move_list(Mobile).Attackvalue = 1
  1728. Case 2: move_list(Mobile).Attackvalue = 3
  1729. Case 3: move_list(Mobile).Attackvalue = 4
  1730. Case 4: move_list(Mobile).Attackvalue = 5
  1731. Case 5: move_list(Mobile).Attackvalue = 10
  1732. Case 6: move_list(Mobile).Attackvalue = 100
  1733. End Select
  1734. End If
  1735.  
  1736. Next i
  1737. ElseIf BlackKnight_Position(A) = 1 Then
  1738.  
  1739. For i = 0 To 63
  1740. If Bknight_Mask(A).Attack(i) = 1 Then
  1741.           If WhitePieces_Position(i) = 1 Then
  1742.             
  1743. sideto = 1
  1744. Else
  1745. sideto = -1
  1746. End If
  1747. If sideto = 1 Then
  1748.  If Whitepawn_Position(i) = 1 Then
  1749.  pt = 1
  1750.  ElseIf WhiteKnight_Position(i) = 1 Then
  1751.  pt = 2
  1752.  ElseIf WhiteBishop_Position(i) = 1 Then
  1753.  pt = 3
  1754.  ElseIf WhiteRock_Position(i) = 1 Then
  1755.  pt = 4
  1756.  ElseIf WhiteQueen_Position(i) = 1 Then
  1757.  pt = 5
  1758.  ElseIf WhiteKing_Position(i) = 1 Then
  1759.  pt = 6
  1760. End If
  1761.  Else
  1762.  pt = 0
  1763.  End If
  1764. Mobile = Mobile + 1
  1765. '
  1766. MovNot = MovToStr(A, 2, i, pt)
  1767. move_list(Mobile).From = A
  1768. move_list(Mobile).ToMov = i
  1769. move_list(Mobile).Location = MovNot
  1770. move_list(Mobile).PieceF = 2
  1771. move_list(Mobile).PieceT = pt
  1772. move_list(Mobile).SideF = 0
  1773. move_list(Mobile).SideT = sideto
  1774. Select Case pt
  1775. Case 0: move_list(Mobile).Attackvalue = 0
  1776. Case 1: move_list(Mobile).Attackvalue = 1
  1777. Case 2: move_list(Mobile).Attackvalue = 3
  1778. Case 3: move_list(Mobile).Attackvalue = 4
  1779. Case 4: move_list(Mobile).Attackvalue = 5
  1780. Case 5: move_list(Mobile).Attackvalue = 10
  1781. Case 6: move_list(Mobile).Attackvalue = 100
  1782. End Select
  1783. End If
  1784. Next i
  1785.  
  1786. ElseIf BlackBishop_Position(A) = 1 Then
  1787. For i = 0 To 63
  1788. If BBishop_Mask(A).Attack(i) = 1 Then
  1789.           If WhitePieces_Position(i) = 1 Then
  1790.             
  1791. sideto = 1
  1792. Else
  1793. sideto = -1
  1794. End If
  1795. If sideto = 1 Then
  1796.  If Whitepawn_Position(i) = 1 Then
  1797.  pt = 1
  1798.  ElseIf WhiteKnight_Position(i) = 1 Then
  1799.  pt = 2
  1800.  ElseIf WhiteBishop_Position(i) = 1 Then
  1801.  pt = 3
  1802.  ElseIf WhiteRock_Position(i) = 1 Then
  1803.  pt = 4
  1804.  ElseIf WhiteQueen_Position(i) = 1 Then
  1805.  pt = 5
  1806.  ElseIf WhiteKing_Position(i) = 1 Then
  1807.  pt = 6
  1808. End If
  1809.  Else
  1810.  pt = 0
  1811.  End If
  1812. Mobile = Mobile + 1
  1813. '
  1814. MovNot = MovToStr(A, 3, i, pt)
  1815. move_list(Mobile).From = A
  1816. move_list(Mobile).ToMov = i
  1817. move_list(Mobile).Location = MovNot
  1818. move_list(Mobile).PieceF = 3
  1819. move_list(Mobile).PieceT = pt
  1820. move_list(Mobile).SideF = 0
  1821. move_list(Mobile).SideT = sideto
  1822. Select Case pt
  1823. Case 0: move_list(Mobile).Attackvalue = 0
  1824. Case 1: move_list(Mobile).Attackvalue = 1
  1825. Case 2: move_list(Mobile).Attackvalue = 3
  1826. Case 3: move_list(Mobile).Attackvalue = 4
  1827. Case 4: move_list(Mobile).Attackvalue = 5
  1828. Case 5: move_list(Mobile).Attackvalue = 10
  1829. Case 6: move_list(Mobile).Attackvalue = 100
  1830. End Select
  1831. End If
  1832. Next i
  1833.  
  1834. ElseIf BlackRock_Position(A) = 1 Then
  1835. For i = 0 To 63
  1836. If BRock_Mask(A).Attack(i) = 1 Then
  1837.           If WhitePieces_Position(i) = 1 Then
  1838.             
  1839. sideto = 1
  1840. Else
  1841. sideto = -1
  1842. End If
  1843. If sideto = 1 Then
  1844.  If Whitepawn_Position(i) = 1 Then
  1845.  pt = 1
  1846.  ElseIf WhiteKnight_Position(i) = 1 Then
  1847.  pt = 2
  1848.  ElseIf WhiteBishop_Position(i) = 1 Then
  1849.  pt = 3
  1850.  ElseIf WhiteRock_Position(i) = 1 Then
  1851.  pt = 4
  1852.  ElseIf WhiteQueen_Position(i) = 1 Then
  1853.  pt = 5
  1854.  ElseIf WhiteKing_Position(i) = 1 Then
  1855.  pt = 6
  1856. End If
  1857.  Else
  1858.  pt = 0
  1859.  End If
  1860. Mobile = Mobile + 1
  1861. '
  1862. MovNot = MovToStr(A, 4, i, pt)
  1863. move_list(Mobile).From = A
  1864. move_list(Mobile).ToMov = i
  1865. move_list(Mobile).Location = MovNot
  1866. move_list(Mobile).PieceF = 4
  1867. move_list(Mobile).PieceT = pt
  1868. move_list(Mobile).SideF = 0
  1869. move_list(Mobile).SideT = sideto
  1870. Select Case pt
  1871. Case 0: move_list(Mobile).Attackvalue = 0
  1872. Case 1: move_list(Mobile).Attackvalue = 1
  1873. Case 2: move_list(Mobile).Attackvalue = 3
  1874. Case 3: move_list(Mobile).Attackvalue = 4
  1875. Case 4: move_list(Mobile).Attackvalue = 5
  1876. Case 5: move_list(Mobile).Attackvalue = 10
  1877. Case 6: move_list(Mobile).Attackvalue = 100
  1878. End Select
  1879. End If
  1880.  
  1881. Next i
  1882. ElseIf BlackQueen_Position(A) = 1 Then
  1883. For i = 0 To 63
  1884. If BQueen_Mask(A).Attack(i) = 1 Then
  1885.           If WhitePieces_Position(i) = 1 Then
  1886.             
  1887. sideto = 1
  1888. Else
  1889. sideto = -1
  1890. End If
  1891. If sideto = 1 Then
  1892.  If Whitepawn_Position(i) = 1 Then
  1893.  pt = 1
  1894.  ElseIf WhiteKnight_Position(i) = 1 Then
  1895.  pt = 2
  1896.  ElseIf WhiteBishop_Position(i) = 1 Then
  1897.  pt = 3
  1898.  ElseIf WhiteRock_Position(i) = 1 Then
  1899.  pt = 4
  1900.  ElseIf WhiteQueen_Position(i) = 1 Then
  1901.  pt = 5
  1902.  ElseIf WhiteKing_Position(i) = 1 Then
  1903.  pt = 6
  1904. End If
  1905.  Else
  1906.  pt = 0
  1907.  End If
  1908. Mobile = Mobile + 1
  1909. '
  1910. MovNot = MovToStr(A, 5, i, pt)
  1911. move_list(Mobile).From = A
  1912. move_list(Mobile).ToMov = i
  1913. move_list(Mobile).Location = MovNot
  1914. move_list(Mobile).PieceF = 5
  1915. move_list(Mobile).PieceT = pt
  1916. move_list(Mobile).SideF = 0
  1917. move_list(Mobile).SideT = sideto
  1918. Select Case pt
  1919. Case 0: move_list(Mobile).Attackvalue = 0
  1920. Case 1: move_list(Mobile).Attackvalue = 1
  1921. Case 2: move_list(Mobile).Attackvalue = 3
  1922. Case 3: move_list(Mobile).Attackvalue = 4
  1923. Case 4: move_list(Mobile).Attackvalue = 5
  1924. Case 5: move_list(Mobile).Attackvalue = 10
  1925. Case 6: move_list(Mobile).Attackvalue = 100
  1926.  
  1927.  
  1928. End Select
  1929. End If
  1930.  
  1931. Next i
  1932.  
  1933. ElseIf BlackKing_Position(A) = 1 Then
  1934. For i = 0 To 63
  1935. If BKing_Mask(A).Attack(i) = 1 Then
  1936.           If BlackPieces_Position(i) = 1 Then
  1937.             
  1938. sideto = 1
  1939. Else
  1940. sideto = -1
  1941. End If
  1942. If sideto = 1 Then
  1943.  If Whitepawn_Position(i) = 1 Then
  1944.  pt = 1
  1945.  ElseIf WhiteKnight_Position(i) = 1 Then
  1946.  pt = 2
  1947.  ElseIf WhiteBishop_Position(i) = 1 Then
  1948.  pt = 3
  1949.  ElseIf WhiteRock_Position(i) = 1 Then
  1950.  pt = 4
  1951.  ElseIf WhiteQueen_Position(i) = 1 Then
  1952.  pt = 5
  1953.  ElseIf WhiteKing_Position(i) = 1 Then
  1954.  pt = 6
  1955. End If
  1956.  Else
  1957.  pt = 0
  1958.  End If
  1959. Mobile = Mobile + 1
  1960. '
  1961. MovNot = MovToStr(A, 6, i, pt)
  1962. move_list(Mobile).From = A
  1963. move_list(Mobile).ToMov = i
  1964. move_list(Mobile).Location = MovNot
  1965. move_list(Mobile).PieceF = 6
  1966. move_list(Mobile).PieceT = pt
  1967. move_list(Mobile).SideF = 0
  1968. move_list(Mobile).SideT = sideto
  1969. Select Case pt
  1970. Case 0: move_list(Mobile).Attackvalue = 0
  1971. Case 1: move_list(Mobile).Attackvalue = 1
  1972. Case 2: move_list(Mobile).Attackvalue = 3
  1973. Case 3: move_list(Mobile).Attackvalue = 4
  1974. Case 4: move_list(Mobile).Attackvalue = 5
  1975. Case 5: move_list(Mobile).Attackvalue = 110
  1976. Case 6: move_list(Mobile).Attackvalue = 0
  1977. End Select
  1978. End If
  1979.  
  1980. Next i
  1981. End If
  1982.  
  1983. Next A
  1984.  
  1985. End If
  1986. Mobility = Mobile
  1987.  
  1988. Call SortList(move_list)
  1989.  
  1990.  
  1991. End Sub
  1992. Function MovToStr(ByVal From As Integer, ByVal piecfrm As Integer, ByVal Tos As Integer, ByVal piecto As Integer) As String
  1993. ' used to convert the from and to squeres to notaions
  1994. Dim Fstr, Tstr, pfstr, ptstr, Movstr1 As String
  1995. pfstr = ""
  1996. ptstr = ""
  1997.  
  1998. Select Case piecfrm
  1999.  
  2000. Case 1: pfstr = "P"
  2001.         
  2002. Case 2: pfstr = "N"
  2003.  
  2004. Case 3: pfstr = "B"
  2005.         
  2006. Case 4: pfstr = "R"
  2007.  
  2008. Case 5: pfstr = "Q"
  2009.         
  2010. Case 6: pfstr = "K"
  2011. End Select
  2012.  
  2013. Select Case piecto
  2014. Case 1: ptstr = "P"
  2015.         
  2016. Case 2: ptstr = "N"
  2017.  
  2018. Case 3: ptstr = "B"
  2019.         
  2020. Case 4: ptstr = "R"
  2021.  
  2022. Case 5: ptstr = "Q"
  2023.         
  2024. Case 6: ptstr = "K"
  2025. End Select
  2026. Select Case From
  2027.  
  2028. Case 0: Fstr = "a8"
  2029. Case 1: Fstr = "b8"
  2030. Case 2: Fstr = "c8"
  2031. Case 3: Fstr = "d8"
  2032. Case 4: Fstr = "e8"
  2033. Case 5: Fstr = "f8"
  2034. Case 6: Fstr = "g8"
  2035. Case 7: Fstr = "h8"
  2036.  
  2037. Case 8: Fstr = "a7"
  2038. Case 9: Fstr = "b7"
  2039. Case 10: Fstr = "c7"
  2040. Case 11: Fstr = "d7"
  2041. Case 12: Fstr = "e7"
  2042. Case 13: Fstr = "f7"
  2043. Case 14: Fstr = "g7"
  2044. Case 15: Fstr = "h7"
  2045.  
  2046. Case 16: Fstr = "a6"
  2047. Case 17: Fstr = "b6"
  2048. Case 18: Fstr = "c6"
  2049. Case 19: Fstr = "d6"
  2050. Case 20: Fstr = "e6"
  2051. Case 21: Fstr = "f6"
  2052. Case 22: Fstr = "g6"
  2053. Case 23: Fstr = "h6"
  2054.  
  2055. Case 24: Fstr = "a5"
  2056. Case 25: Fstr = "b5"
  2057. Case 26: Fstr = "c5"
  2058. Case 27: Fstr = "d5"
  2059. Case 28: Fstr = "e5"
  2060. Case 29: Fstr = "f5"
  2061. Case 30: Fstr = "g5"
  2062. Case 31: Fstr = "h5"
  2063.  
  2064. Case 32: Fstr = "a4"
  2065. Case 33: Fstr = "b4"
  2066. Case 34: Fstr = "c4"
  2067. Case 35: Fstr = "d4"
  2068. Case 36: Fstr = "e4"
  2069. Case 37: Fstr = "f4"
  2070. Case 38: Fstr = "g4"
  2071. Case 39: Fstr = "h4"
  2072.  
  2073. Case 40: Fstr = "a3"
  2074. Case 41: Fstr = "b3"
  2075. Case 42: Fstr = "c3"
  2076. Case 43: Fstr = "d3"
  2077. Case 44: Fstr = "e3"
  2078. Case 45: Fstr = "f3"
  2079. Case 46: Fstr = "g3"
  2080. Case 47: Fstr = "h3"
  2081.  
  2082. Case 48: Fstr = "a2"
  2083. Case 49: Fstr = "b2"
  2084. Case 50: Fstr = "c2"
  2085. Case 51: Fstr = "d2"
  2086. Case 52: Fstr = "e2"
  2087. Case 53: Fstr = "f2"
  2088. Case 54: Fstr = "g2"
  2089. Case 55: Fstr = "h2"
  2090.  
  2091. Case 56: Fstr = "a1"
  2092. Case 57: Fstr = "b1"
  2093. Case 58: Fstr = "c1"
  2094. Case 59: Fstr = "d1"
  2095. Case 60: Fstr = "e1"
  2096. Case 61: Fstr = "f1"
  2097. Case 62: Fstr = "g1"
  2098. Case 63: Fstr = "h1"
  2099. End Select
  2100.  
  2101. Select Case Tos
  2102.  
  2103. Case 0: Tstr = "a8"
  2104. Case 1: Tstr = "b8"
  2105. Case 2: Tstr = "c8"
  2106. Case 3: Tstr = "d8"
  2107. Case 4: Tstr = "e8"
  2108. Case 5: Tstr = "f8"
  2109. Case 6: Tstr = "g8"
  2110. Case 7: Tstr = "h8"
  2111.  
  2112. Case 8: Tstr = "a7"
  2113. Case 9: Tstr = "b7"
  2114. Case 10: Tstr = "c7"
  2115. Case 11: Tstr = "d7"
  2116. Case 12: Tstr = "e7"
  2117. Case 13: Tstr = "f7"
  2118. Case 14: Tstr = "g7"
  2119. Case 15: Tstr = "h7"
  2120.  
  2121. Case 16: Tstr = "a6"
  2122. Case 17: Tstr = "b6"
  2123. Case 18: Tstr = "c6"
  2124. Case 19: Tstr = "d6"
  2125. Case 20: Tstr = "e6"
  2126. Case 21: Tstr = "f6"
  2127. Case 22: Tstr = "g6"
  2128. Case 23: Tstr = "h6"
  2129.  
  2130. Case 24: Tstr = "a5"
  2131. Case 25: Tstr = "b5"
  2132. Case 26: Tstr = "c5"
  2133. Case 27: Tstr = "d5"
  2134. Case 28: Tstr = "e5"
  2135. Case 29: Tstr = "f5"
  2136. Case 30: Tstr = "g5"
  2137. Case 31: Tstr = "h5"
  2138.  
  2139. Case 32: Tstr = "a4"
  2140. Case 33: Tstr = "b4"
  2141. Case 34: Tstr = "c4"
  2142. Case 35: Tstr = "d4"
  2143. Case 36: Tstr = "e4"
  2144. Case 37: Tstr = "f4"
  2145. Case 38: Tstr = "g4"
  2146. Case 39: Tstr = "h4"
  2147.  
  2148. Case 40: Tstr = "a3"
  2149. Case 41: Tstr = "b3"
  2150. Case 42: Tstr = "c3"
  2151. Case 43: Tstr = "d3"
  2152. Case 44: Tstr = "e3"
  2153. Case 45: Tstr = "f3"
  2154. Case 46: Tstr = "g3"
  2155. Case 47: Tstr = "h3"
  2156.  
  2157. Case 48: Tstr = "a2"
  2158. Case 49: Tstr = "b2"
  2159. Case 50: Tstr = "c2"
  2160. Case 51: Tstr = "d2"
  2161. Case 52: Tstr = "e2"
  2162. Case 53: Tstr = "f2"
  2163. Case 54: Tstr = "g2"
  2164. Case 55: Tstr = "h2"
  2165.  
  2166. Case 56: Tstr = "a1"
  2167. Case 57: Tstr = "b1"
  2168. Case 58: Tstr = "c1"
  2169. Case 59: Tstr = "d1"
  2170. Case 60: Tstr = "e1"
  2171. Case 61: Tstr = "f1"
  2172. Case 62: Tstr = "g1"
  2173. Case 63: Tstr = "h1"
  2174. End Select
  2175. Movstr1 = pfstr & Fstr & "-" & ptstr & Tstr
  2176. MovToStr = Movstr1
  2177. End Function
  2178.  
  2179. Sub do_Move(Mov As MoveList)
  2180. ' used to make the move on the board to evaluated or to generate the oppenent moves depending on the chanes happen by this move
  2181.  
  2182. CopyMemory Whitepawn_PositionBuffer(0), Whitepawn_Position(0), 64
  2183. CopyMemory WhiteKing_PositionBuffer(0), WhiteKing_Position(0), 64
  2184. CopyMemory WhiteBishop_PositionBuffer(0), WhiteBishop_Position(0), 64
  2185. CopyMemory WhiteKnight_PositionBuffer(0), WhiteKnight_Position(0), 64
  2186. CopyMemory WhiteRock_PositionBuffer(0), WhiteRock_Position(0), 64
  2187. CopyMemory WhiteQueen_PositionBuffer(0), WhiteQueen_Position(0), 64
  2188. CopyMemory WhitePieces_PositionBuffer(0), WhitePieces_Position(0), 64
  2189. CopyMemory Blackpawn_PositionBuffer(0), Blackpawn_Position(0), 64
  2190. CopyMemory BlackKing_PositionBuffer(0), BlackKing_Position(0), 64
  2191. CopyMemory BlackBishop_PositionBuffer(0), BlackBishop_Position(0), 64
  2192. CopyMemory BlackKnight_PositionBuffer(0), BlackKnight_Position(0), 64
  2193. CopyMemory BlackRock_PositionBuffer(0), BlackRock_Position(0), 64
  2194. CopyMemory BlackQueen_PositionBuffer(0), BlackQueen_Position(0), 64
  2195. CopyMemory BlackPieces_PositionBuffer(0), BlackPieces_Position(0), 64
  2196. CopyMemory Chess_BoardBuffer(0), Chess_Board(0), 64
  2197.  
  2198.  
  2199. If Mov.SideF = 1 Then
  2200. If Mov.SideT = 0 Then
  2201. WhitePieces_Position(Mov.From) = 0
  2202. WhitePieces_Position(Mov.ToMov) = 1
  2203. BlackPieces_Position(Mov.ToMov) = 0
  2204.  
  2205. Select Case Mov.PieceT
  2206. Case 1: Blackpawn_Position(Mov.ToMov) = 0
  2207.         
  2208. Case 2: BlackKnight_Position(Mov.ToMov) = 0
  2209.         
  2210. Case 3: BlackBishop_Position(Mov.ToMov) = 0
  2211.         
  2212. Case 4: BlackRock_Position(Mov.ToMov) = 0
  2213.         
  2214. Case 5: BlackQueen_Position(Mov.ToMov) = 0
  2215.         
  2216. Case 6: BlackKing_Position(Mov.ToMov) = 0
  2217.         
  2218. End Select
  2219.  
  2220.  
  2221. Else
  2222. WhitePieces_Position(Mov.From) = 0
  2223. WhitePieces_Position(Mov.ToMov) = 1
  2224. End If
  2225. Select Case Mov.PieceF
  2226. Case 1: Whitepawn_Position(Mov.From) = 0
  2227.         Whitepawn_Position(Mov.ToMov) = 1
  2228. Case 2: WhiteKnight_Position(Mov.From) = 0
  2229.         WhiteKnight_Position(Mov.ToMov) = 1
  2230. Case 3: WhiteBishop_Position(Mov.From) = 0
  2231.         WhiteBishop_Position(Mov.ToMov) = 1
  2232. Case 4: WhiteRock_Position(Mov.From) = 0
  2233.         WhiteRock_Position(Mov.ToMov) = 1
  2234. Case 5: WhiteQueen_Position(Mov.From) = 0
  2235.         WhiteQueen_Position(Mov.ToMov) = 1
  2236. Case 6: WhiteKing_Position(Mov.From) = 0
  2237.         WhiteKing_Position(Mov.ToMov) = 1
  2238. End Select
  2239.  
  2240.  
  2241.  
  2242. ElseIf Mov.SideF = 0 Then
  2243.  
  2244. If Mov.SideT = 1 Then
  2245. BlackPieces_Position(Mov.From) = 0
  2246. BlackPieces_Position(Mov.ToMov) = 1
  2247. WhitePieces_Position(Mov.ToMov) = 0
  2248.  
  2249. Select Case Mov.PieceT
  2250. Case 1: Whitepawn_Position(Mov.ToMov) = 0
  2251.         
  2252. Case 2: WhiteKnight_Position(Mov.ToMov) = 0
  2253.         
  2254. Case 3: WhiteBishop_Position(Mov.ToMov) = 0
  2255.         
  2256. Case 4: WhiteRock_Position(Mov.ToMov) = 0
  2257.         
  2258. Case 5: WhiteQueen_Position(Mov.ToMov) = 0
  2259.         
  2260. Case 6: WhiteKing_Position(Mov.ToMov) = 0
  2261.         
  2262. End Select
  2263.  
  2264.  
  2265. Else
  2266. BlackPieces_Position(Mov.From) = 0
  2267. BlackPieces_Position(Mov.ToMov) = 1
  2268. End If
  2269. Select Case Mov.PieceF
  2270. Case 1: Blackpawn_Position(Mov.From) = 0
  2271.         Blackpawn_Position(Mov.ToMov) = 1
  2272. Case 2: BlackKnight_Position(Mov.From) = 0
  2273.         BlackKnight_Position(Mov.ToMov) = 1
  2274. Case 3: BlackBishop_Position(Mov.From) = 0
  2275.         BlackBishop_Position(Mov.ToMov) = 1
  2276. Case 4: BlackRock_Position(Mov.From) = 0
  2277.         BlackRock_Position(Mov.ToMov) = 1
  2278. Case 5: BlackQueen_Position(Mov.From) = 0
  2279.         BlackQueen_Position(Mov.ToMov) = 1
  2280. Case 6: BlackKing_Position(Mov.From) = 0
  2281.         BlackKing_Position(Mov.ToMov) = 1
  2282. End Select
  2283.  
  2284.  
  2285. End If
  2286.  
  2287. Call Gen_Movment
  2288. End Sub
  2289.  
  2290.  
  2291. Sub UnDo_move(Movment As MoveList)
  2292.  
  2293. ' used to un make this move and take back the board to the postion before make that move
  2294. 'CopyMemory Whitepawn_Position(0), Whitepawn_PositionBuffer(0), 64
  2295. 'CopyMemory WhiteKing_Position(0), WhiteKing_PositionBuffer(0), 64
  2296. 'CopyMemory WhiteBishop_Position(0), WhiteBishop_PositionBuffer(0), 64
  2297. 'CopyMemory WhiteKnight_Position(0), WhiteKnight_PositionBuffer(0), 64
  2298. 'CopyMemory WhiteRock_Position(0), WhiteRock_PositionBuffer(0), 64
  2299. 'CopyMemory WhiteQueen_Position(0), WhiteQueen_PositionBuffer(0), 64
  2300. 'CopyMemory WhitePieces_Position(0), WhitePieces_PositionBuffer(0), 64
  2301. 'CopyMemory Blackpawn_Position(0), Blackpawn_PositionBuffer(0), 64
  2302. 'CopyMemory BlackKing_Position(0), BlackKing_PositionBuffer(0), 64
  2303. 'CopyMemory BlackBishop_Position(0), BlackBishop_PositionBuffer(0), 64
  2304. 'CopyMemory BlackKnight_Position(0), BlackKnight_PositionBuffer(0), 64
  2305. 'CopyMemory BlackRock_Position(0), BlackRock_PositionBuffer(0), 64
  2306. 'CopyMemory BlackQueen_Position(0), BlackQueen_PositionBuffer(0), 64
  2307. 'CopyMemory BlackPieces_Position(0), BlackPieces_PositionBuffer(0), 64
  2308. 'CopyMemory Chess_Board(0), Chess_BoardBuffer(0), 64
  2309. '
  2310.  
  2311.  
  2312. If Movment.SideF = 1 Then
  2313. If Movment.SideT = 0 Then
  2314. WhitePieces_Position(Movment.From) = 1
  2315. WhitePieces_Position(Movment.ToMov) = 0
  2316. BlackPieces_Position(Movment.ToMov) = 1
  2317.  
  2318. Select Case Movment.PieceT
  2319. Case 1: Blackpawn_Position(Movment.ToMov) = 1
  2320.         
  2321. Case 2: BlackKnight_Position(Movment.ToMov) = 1
  2322.         
  2323. Case 3: BlackBishop_Position(Movment.ToMov) = 1
  2324.         
  2325. Case 4: BlackRock_Position(Movment.ToMov) = 1
  2326.         
  2327. Case 5: BlackQueen_Position(Movment.ToMov) = 1
  2328.         
  2329. Case 6: BlackKing_Position(Movment.ToMov) = 0
  2330.         
  2331. End Select
  2332.  
  2333.  
  2334. Else
  2335. WhitePieces_Position(Movment.From) = 1
  2336. WhitePieces_Position(Movment.ToMov) = 0
  2337. End If
  2338. Select Case Movment.PieceF
  2339. Case 1: Whitepawn_Position(Movment.From) = 1
  2340.         Whitepawn_Position(Movment.ToMov) = 0
  2341. Case 2: WhiteKnight_Position(Movment.From) = 1
  2342.         WhiteKnight_Position(Movment.ToMov) = 0
  2343. Case 3: WhiteBishop_Position(Movment.From) = 1
  2344.         WhiteBishop_Position(Movment.ToMov) = 0
  2345. Case 4: WhiteRock_Position(Movment.From) = 1
  2346.         WhiteRock_Position(Movment.ToMov) = 0
  2347. Case 5: WhiteQueen_Position(Movment.From) = 1
  2348.         WhiteQueen_Position(Movment.ToMov) = 0
  2349. Case 6: WhiteKing_Position(Movment.From) = 1
  2350.         WhiteKing_Position(Movment.ToMov) = 0
  2351. End Select
  2352.  
  2353.  
  2354.  
  2355. ElseIf Movment.SideF = 0 Then
  2356.  
  2357. If Movment.SideT = 1 Then
  2358. BlackPieces_Position(Movment.From) = 1
  2359. BlackPieces_Position(Movment.ToMov) = 0
  2360. WhitePieces_Position(Movment.ToMov) = 1
  2361.  
  2362. Select Case Movment.PieceT
  2363. Case 1: Whitepawn_Position(Movment.ToMov) = 1
  2364.         
  2365. Case 2: WhiteKnight_Position(Movment.ToMov) = 1
  2366.         
  2367. Case 3: WhiteBishop_Position(Movment.ToMov) = 1
  2368.         
  2369. Case 4: WhiteRock_Position(Movment.ToMov) = 1
  2370.         
  2371. Case 5: WhiteQueen_Position(Movment.ToMov) = 1
  2372.         
  2373. Case 6: WhiteKing_Position(Movment.ToMov) = 0
  2374.         
  2375. End Select
  2376.  
  2377.  
  2378. Else
  2379. BlackPieces_Position(Movment.From) = 1
  2380. BlackPieces_Position(Movment.ToMov) = 0
  2381. End If
  2382. Select Case Movment.PieceF
  2383. Case 1: Blackpawn_Position(Movment.From) = 1
  2384.         Blackpawn_Position(Movment.ToMov) = 0
  2385. Case 2: BlackKnight_Position(Movment.From) = 1
  2386.         BlackKnight_Position(Movment.ToMov) = 0
  2387. Case 3: BlackBishop_Position(Movment.From) = 1
  2388.         BlackBishop_Position(Movment.ToMov) = 0
  2389. Case 4: BlackRock_Position(Movment.From) = 1
  2390.         BlackRock_Position(Movment.ToMov) = 0
  2391. Case 5: BlackQueen_Position(Movment.From) = 1
  2392.         BlackQueen_Position(Movment.ToMov) = 0
  2393. Case 6: BlackKing_Position(Movment.From) = 1
  2394.         BlackKing_Position(Movment.ToMov) = 0
  2395. End Select
  2396.  
  2397.  
  2398. End If
  2399.  
  2400.  
  2401.  
  2402.  
  2403.  
  2404.  
  2405. Call Gen_Movment
  2406.  
  2407.  
  2408. End Sub
  2409.  
  2410.  
  2411. Sub StrToMov(StMov As String, Mov1 As MoveList)
  2412. ' used to  convert move notation to "from , to "squeres
  2413. Dim pf1, pt1 As Integer
  2414.  
  2415. Dim x As Integer
  2416. Dim st, frmstr, tostr, pfstr, ptstr As String
  2417. endstr = Len(StMov)
  2418. For i = 1 To endstr
  2419. st = Mid(StMov, i, 1)
  2420. If st <> "-" Then
  2421. frmstr = frmstr & st
  2422.  
  2423. Else
  2424. x = i + 1
  2425. Exit For
  2426. End If
  2427. Next i
  2428. For j = x To endstr
  2429. st = Mid(StMov, j, 1)
  2430. tostr = tostr & st
  2431. Next j
  2432. pfstr = Mid(frmstr, 1, 1)
  2433.  
  2434. frmstr = Mid(frmstr, 2, 2)
  2435. If Len(tostr) < 3 Then
  2436. tostr = tostr
  2437. ptstr = "/"
  2438. sideto1 = -1
  2439. Else
  2440. ptstr = Mid(tostr, 1, 1)
  2441. tostr = Mid(tostr, 2, 2)
  2442. End If
  2443.  
  2444.  
  2445. Select Case frmstr
  2446.  
  2447. Case "a8": frm = 0
  2448. Case "b8": frm = 1
  2449. Case "c8": frm = 2
  2450. Case "d8": frm = 3
  2451. Case "e8": frm = 4
  2452. Case "f8": frm = 5
  2453. Case "g8": frm = 6
  2454. Case "h8": frm = 7
  2455.  
  2456. Case "a7": frm = 8
  2457. Case "b7": frm = 9
  2458. Case "c7": frm = 10
  2459. Case "d7": frm = 11
  2460. Case "e7": frm = 12
  2461. Case "f7": frm = 13
  2462. Case "g7": frm = 14
  2463. Case "h7": frm = 15
  2464.  
  2465. Case "a6": frm = 16
  2466. Case "b6": frm = 17
  2467. Case "c6": frm = 18
  2468. Case "d6": frm = 19
  2469. Case "e6": frm = 20
  2470. Case "f6": frm = 21
  2471. Case "g6": frm = 22
  2472. Case "h6": frm = 23
  2473.  
  2474. Case "a5": frm = 24
  2475. Case "b5": frm = 25
  2476. Case "c5": frm = 26
  2477. Case "d5": frm = 27
  2478. Case "e5": frm = 28
  2479. Case "f5": frm = 29
  2480. Case "g5": frm = 30
  2481. Case "h5": frm = 31
  2482.  
  2483. Case "a4": frm = 32
  2484. Case "b4": frm = 33
  2485. Case "c4": frm = 34
  2486. Case "d4": frm = 35
  2487. Case "e4": frm = 36
  2488. Case "f4": frm = 37
  2489. Case "g4": frm = 38
  2490. Case "h4": frm = 39
  2491.  
  2492. Case "a3": frm = 40
  2493. Case "b3": frm = 41
  2494. Case "c3": frm = 42
  2495. Case "d3": frm = 43
  2496. Case "e3": frm = 44
  2497. Case "f3": frm = 45
  2498. Case "g3": frm = 46
  2499. Case "h3": frm = 47
  2500.  
  2501. Case "a2": frm = 48
  2502. Case "b2": frm = 49
  2503. Case "c2": frm = 50
  2504. Case "d2": frm = 51
  2505. Case "e2": frm = 52
  2506. Case "f2": frm = 53
  2507. Case "g2": frm = 54
  2508. Case "h2": frm = 55
  2509.  
  2510. Case "a1": frm = 56
  2511. Case "b1": frm = 57
  2512. Case "c1": frm = 58
  2513. Case "d1": frm = 59
  2514. Case "e1": frm = 60
  2515. Case "f1": frm = 61
  2516. Case "g1": frm = 62
  2517. Case "h1": frm = 63
  2518. End Select
  2519.  
  2520.  
  2521.  
  2522.  
  2523.  
  2524. Select Case tostr
  2525.  
  2526. Case "a8": Tol = 0
  2527. Case "b8": Tol = 1
  2528. Case "c8": Tol = 2
  2529. Case "d8": Tol = 3
  2530. Case "e8": Tol = 4
  2531. Case "f8": Tol = 5
  2532. Case "g8": Tol = 6
  2533. Case "h8": Tol = 7
  2534.  
  2535. Case "a7": Tol = 8
  2536. Case "b7": Tol = 9
  2537. Case "c7": Tol = 10
  2538. Case "d7": Tol = 11
  2539. Case "e7": Tol = 12
  2540. Case "f7": Tol = 13
  2541. Case "g7": Tol = 14
  2542. Case "h7": Tol = 15
  2543.  
  2544. Case "a6": Tol = 16
  2545. Case "b6": Tol = 17
  2546. Case "c6": Tol = 18
  2547. Case "d6": Tol = 19
  2548. Case "e6": Tol = 20
  2549. Case "f6": Tol = 21
  2550. Case "g6": Tol = 22
  2551. Case "h6": Tol = 23
  2552.  
  2553. Case "a5": Tol = 24
  2554. Case "b5": Tol = 25
  2555. Case "c5": Tol = 26
  2556. Case "d5": Tol = 27
  2557. Case "e5": Tol = 28
  2558. Case "f5": Tol = 29
  2559. Case "g5": Tol = 30
  2560. Case "h5": Tol = 31
  2561.  
  2562. Case "a4": Tol = 32
  2563. Case "b4": Tol = 33
  2564. Case "c4": Tol = 34
  2565. Case "d4": Tol = 35
  2566. Case "e4": Tol = 36
  2567. Case "f4": Tol = 37
  2568. Case "g4": Tol = 38
  2569. Case "h4": Tol = 39
  2570.  
  2571. Case "a3": Tol = 40
  2572. Case "b3": Tol = 41
  2573. Case "c3": Tol = 42
  2574. Case "d3": Tol = 43
  2575. Case "e3": Tol = 44
  2576. Case "f3": Tol = 45
  2577. Case "g3": Tol = 46
  2578. Case "h3": Tol = 47
  2579.  
  2580. Case "a2": Tol = 48
  2581. Case "b2": Tol = 49
  2582. Case "c2": Tol = 50
  2583. Case "d2": Tol = 51
  2584. Case "e2": Tol = 52
  2585. Case "f2": Tol = 53
  2586. Case "g2": Tol = 54
  2587. Case "h2": Tol = 55
  2588.  
  2589. Case "a1": Tol = 56
  2590. Case "b1": Tol = 57
  2591. Case "c1": Tol = 58
  2592. Case "d1": Tol = 59
  2593. Case "e1": Tol = 60
  2594. Case "f1": Tol = 61
  2595. Case "g1": Tol = 62
  2596. Case "h1": Tol = 63
  2597. End Select
  2598.  
  2599. Select Case pfstr
  2600.  
  2601. Case "P": pf1 = 1
  2602.         
  2603. Case "N": pf1 = 2
  2604.  
  2605. Case "B": pf1 = 3
  2606.         
  2607. Case "R": pf1 = 4
  2608.  
  2609. Case "Q": pf1 = 5
  2610.         
  2611. Case "K": pf1 = 6
  2612. Case "/": pf1 = 0
  2613. End Select
  2614.  
  2615.  
  2616.  
  2617. Select Case ptstr
  2618.  
  2619. Case "P": pt1 = 1
  2620.         
  2621. Case "N": pt1 = 2
  2622.  
  2623. Case "B": pt1 = 3
  2624.         
  2625. Case "R": pt1 = 4
  2626.  
  2627. Case "Q": pt1 = 5
  2628.         
  2629. Case "K": pt1 = 6
  2630. Case "/": pt1 = 0
  2631. End Select
  2632.  
  2633. Mov1.From = frm
  2634. Mov1.ToMov = Tol
  2635. Mov1.PieceF = pf1
  2636. Mov1.PieceT = pt1
  2637. Mov1.SideT = sideto1
  2638.  
  2639. End Sub
  2640.  
  2641.  
  2642.  
  2643. Sub Computer_Move(CompMOve As MoveList)
  2644. ' ot update the board and make the computer move
  2645. If CompMOve.SideF = 1 Then
  2646. If CompMOve.SideT = 0 Then
  2647. WhitePieces_Position(CompMOve.From) = 0
  2648. WhitePieces_Position(CompMOve.ToMov) = 1
  2649. BlackPieces_Position(CompMOve.ToMov) = 0
  2650.  
  2651. Select Case CompMOve.PieceT
  2652. Case 1: Blackpawn_Position(CompMOve.ToMov) = 0
  2653.         
  2654. Case 2: BlackKnight_Position(CompMOve.ToMov) = 0
  2655.         
  2656. Case 3: BlackBishop_Position(CompMOve.ToMov) = 0
  2657.         
  2658. Case 4: BlackRock_Position(CompMOve.ToMov) = 0
  2659.         
  2660. Case 5: BlackQueen_Position(CompMOve.ToMov) = 0
  2661.         
  2662. 'Case 6: BlackKing_Position(compmove.tomov) = 0
  2663.         
  2664. End Select
  2665.  
  2666.  
  2667. Else
  2668. WhitePieces_Position(CompMOve.From) = 0
  2669. WhitePieces_Position(CompMOve.ToMov) = 1
  2670. End If
  2671. Select Case CompMOve.PieceF
  2672. Case 1: Whitepawn_Position(CompMOve.From) = 0
  2673.         Whitepawn_Position(CompMOve.ToMov) = 1
  2674. Case 2: WhiteKnight_Position(CompMOve.From) = 0
  2675.         WhiteKnight_Position(CompMOve.ToMov) = 1
  2676. Case 3: WhiteBishop_Position(CompMOve.From) = 0
  2677.         WhiteBishop_Position(CompMOve.ToMov) = 1
  2678. Case 4: WhiteRock_Position(CompMOve.From) = 0
  2679.         WhiteRock_Position(CompMOve.ToMov) = 1
  2680. Case 5: WhiteQueen_Position(CompMOve.From) = 0
  2681.         WhiteQueen_Position(CompMOve.ToMov) = 1
  2682. Case 6: WhiteKing_Position(CompMOve.From) = 0
  2683.         WhiteKing_Position(CompMOve.ToMov) = 1
  2684. End Select
  2685.  
  2686.  
  2687.  
  2688. ElseIf CompMOve.SideF = 0 Then
  2689.  
  2690. If CompMOve.SideT = 1 Then
  2691. BlackPieces_Position(CompMOve.From) = 0
  2692. BlackPieces_Position(CompMOve.ToMov) = 1
  2693. WhitePieces_Position(CompMOve.ToMov) = 0
  2694.  
  2695. Select Case CompMOve.PieceT
  2696. Case 1: Whitepawn_Position(CompMOve.ToMov) = 0
  2697.         
  2698. Case 2: WhiteKnight_Position(CompMOve.ToMov) = 0
  2699.         
  2700. Case 3: WhiteBishop_Position(CompMOve.ToMov) = 0
  2701.         
  2702. Case 4: WhiteRock_Position(CompMOve.ToMov) = 0
  2703.         
  2704. Case 5: WhiteQueen_Position(CompMOve.ToMov) = 0
  2705.         
  2706. 'Case 6: whiteKing_Position(compmove.tomov) = 0
  2707.         
  2708. End Select
  2709.  
  2710.  
  2711. Else
  2712. BlackPieces_Position(CompMOve.From) = 0
  2713. BlackPieces_Position(CompMOve.ToMov) = 1
  2714. End If
  2715. Select Case CompMOve.PieceF
  2716. Case 1: Blackpawn_Position(CompMOve.From) = 0
  2717.         Blackpawn_Position(CompMOve.ToMov) = 1
  2718. Case 2: BlackKnight_Position(CompMOve.From) = 0
  2719.         BlackKnight_Position(CompMOve.ToMov) = 1
  2720. Case 3: BlackBishop_Position(CompMOve.From) = 0
  2721.         BlackBishop_Position(CompMOve.ToMov) = 1
  2722. Case 4: BlackRock_Position(CompMOve.From) = 0
  2723.         BlackRock_Position(CompMOve.ToMov) = 1
  2724. Case 5: BlackQueen_Position(CompMOve.From) = 0
  2725.         BlackQueen_Position(CompMOve.ToMov) = 1
  2726. Case 6: BlackKing_Position(CompMOve.From) = 0
  2727.         BlackKing_Position(CompMOve.ToMov) = 1
  2728. End Select
  2729.  
  2730.  
  2731. End If
  2732.  
  2733. End Sub
  2734. Sub SortList(movelst() As MoveList)
  2735.  
  2736. ' this is needed to order the move to check them first
  2737. Dim temp As MoveList
  2738. For i = 1 To UBound(movelst)
  2739. For j = 1 To UBound(movelst)
  2740. If movelst(j).Attackvalue < movelst(i).Attackvalue Then
  2741.  
  2742.  
  2743.  
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.  
  2750. temp.From = movelst(i).From
  2751. temp.ToMov = movelst(i).ToMov
  2752. temp.Location = movelst(i).Location
  2753. temp.PieceF = movelst(i).PieceF
  2754. temp.PieceT = movelst(i).PieceT
  2755. temp.SideF = movelst(i).SideF
  2756. temp.SideT = movelst(i).SideT
  2757. temp.Attackvalue = movelst(i).Attackvalue
  2758.  
  2759. movelst(i).From = movelst(j).From
  2760. movelst(i).ToMov = movelst(j).ToMov
  2761. movelst(i).Location = movelst(j).Location
  2762. movelst(i).PieceF = movelst(j).PieceF
  2763. movelst(i).PieceT = movelst(j).PieceT
  2764. movelst(i).SideF = movelst(j).SideF
  2765. movelst(i).SideT = movelst(j).SideT
  2766. movelst(i).Attackvalue = movelst(j).Attackvalue
  2767.  
  2768. movelst(j).From = temp.From
  2769. movelst(j).ToMov = temp.ToMov
  2770. movelst(j).Location = temp.Location
  2771. movelst(j).PieceF = temp.PieceFCompMOve.ToMov) = p.PieceF = mcompmove.tomov) = 0
  2772.     st(j).Pieftion(CompMO= temp.PieceFCompMOve.ToMov) = p.Pieve.tomov) = 0
  2773.         
  2774. End Ove.ToMov) = p.Pieve.tomov) = 0ceFC bil=A