bf17

Chess board total piece influence

Nov 10th, 2025
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.91 KB | None | 0 0
  1. #pythonista 3
  2. #chess engine based on piece influence
  3.  
  4. from array import array
  5.  
  6. n = 9
  7. m = ""    #move string
  8. #         0123456789012"
  9. pieces = ".prnbqkPRNBQK"
  10. adj = 0
  11. x = y = 0
  12.  
  13. board = array('B')
  14. board = [[0] * n for i in range(n)]
  15. inf   = array('B')
  16. inf   = [[0] * n for i in range(n+1)]
  17.  
  18. #king influence field
  19. kf = [[-1,-1],[ 0,-1],[ 1,-1],
  20.       [-1, 0],        [ 1, 0],
  21.       [-1, 1],[ 0, 1],[ 1, 1]]
  22.  
  23. nf = [[-1,-2],[ 1,-2],
  24.       [-2,-1],[ 2,-1],
  25.       [-2, 1],[ 2, 1],
  26.       [-1, 2],[ 1, 2]]
  27.  
  28. '''
  29. #test board
  30. board[8] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# R  8 - 2
  31. board[7] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# N  9 - 3
  32. board[6] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# B 10 - 4
  33. board[5] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# Q 11 - 5
  34. board[4] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# K 12 - 6
  35. board[3] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# P  7 - 1
  36. board[2] = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  37. board[1] = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  38. #              1  2  3  4  5  6  7  8
  39. '''
  40.  
  41. #standard board                            W   B
  42. board[8] = [0, 2, 3, 4, 5, 6, 4, 3, 2]# R  8 - 2
  43. board[7] = [0, 1, 1, 1, 1, 1, 1, 1, 1]# N  9 - 3
  44. board[6] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# B 10 - 4
  45. board[5] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# Q 11 - 5
  46. board[4] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# K 12 - 6
  47. board[3] = [0, 0, 0, 0, 0, 0, 0, 0, 0]# P  7 - 1
  48. board[2] = [0, 7, 7, 7, 7, 7, 7, 7, 7]
  49. board[1] = [0, 8, 9,10,11,12,10, 9, 8]
  50.  
  51. def on(h,v): # on board
  52.     return(int((h>0) and (h<9) and (v>0) and (v<9)))
  53.  
  54. def enter_move(m):
  55.     m = input(":    ")
  56.     if(len(m)==3):
  57.         board[int(m[2])][int(m[1])] = pieces.find(m[0])
  58.     if(len(m)==4):
  59.         board[int(m[3])][int(m[2])] = board[int(m[1])][int(m[0])]
  60.         board[int(m[1])][int(m[0])] = 0
  61.  
  62. def move_gen():
  63.     pass
  64.  
  65. def disp_ascii(): # print out ascii representation
  66.     print("\n          ascii board")
  67.     for j in range(1,n):
  68.         print(n-j,"| ", end="")
  69.         for i in range(1,n):
  70.             print(pieces[board[9-j][i]], end = "  ")
  71.         print()
  72.     print("  ","-"*22)
  73.     print("    1  2  3  4  5  6  7  8")
  74.  
  75. def disp_board():#debug - display numeric board
  76.     print("\n         numeric board")
  77.     for j in range(1,n):
  78.         for i in range(1,n):
  79.             print("%02d" % board[9-j][i], end = " ")
  80.         print()
  81.        
  82. def disp_inf():#debug - display numeric board
  83.     print("\n           influence")
  84.     for j in range(1,n):
  85.         print(n-j,"| ", end="")
  86.         for i in range(1,n):
  87.             print("%02d" % inf[9-j][i], end = " ")
  88.         print()
  89.     print("  ","-"*22)
  90.     print("    1  2  3  4  5  6  7  8")
  91.     print("\ntotal influence: ", sum(sum(inf,[])))
  92.  
  93. def calc_inf():
  94. #this part uses the on() function
  95. #reset influence array
  96.     for j in range(n):
  97.         for i in range(n):
  98.             inf[i][j] = 0
  99.         total_inf = 0
  100.  
  101.     for j in range(1,n):
  102.         for i in range(1,n):
  103.             if(board[i][j]==12 or board[i][j]==6):#kings
  104.                 adj=int(board[i][j]==12) or int(not(board[i][j]==6))-1
  105.                 for w in range(len(kf)):# k-king
  106.                     if(on(i+kf[w][0],j+kf[w][1])):inf[i+kf[w][0]][j+kf[w][1]]+=adj
  107.  
  108.             if(board[i][j]==9 or board[i][j]==3):#knights
  109.                 adj=int(board[i][j]==9) or int(not(board[i][j]==3))-1
  110.                 for w in range(len(nf)):# k-king
  111.                     if(on(i+nf[w][0],j+nf[w][1])):inf[i+nf[w][0]][j+nf[w][1]]+=adj
  112.  
  113.             if(board[i][j]==7):#white pawn
  114.                 adj=1
  115.                 if(on(i+1,j-1)):inf[i+1][j-1]+=adj
  116.                 if(on(i+1,j+1)):inf[i+1][j+1]+=adj
  117.                
  118.             if(board[i][j]==1):#black pawn
  119.                 adj=-1
  120.                 if(on(i-1,j-1)):inf[i-1][j-1]+=adj
  121.                 if(on(i-1,j+1)):inf[i-1][j+1]+=adj
  122.                
  123.             if(board[i][j]==8 or board[i][j]==2):#rooks
  124.                 adj=int(board[i][j]==8) or int(not(board[i][j]==2))-1
  125.                 for w in range(-7,8):
  126.                     if(on(i,j+w)):inf[i][j+w]+=adj
  127.                     if(on(i+w,j)):inf[i+w][j]+=adj
  128.                 inf[i][j]-=2*adj
  129.  
  130.             if(board[i][j]==10 or board[i][j]==4):#bishops
  131.                 adj=int(board[i][j]==10) or int(not(board[i][j]==4))-1
  132.                 for w in range(-7,8):
  133.                     if(on(i+w,j+w)):inf[i+w][j+w]+=adj
  134.                     if(on(i+w,j-w)):inf[i+w][j-w]+=adj
  135.                 inf[i][j]-=2*adj
  136.  
  137.             if(board[i][j]==11 or board[i][j]==5):#queens
  138.                 adj=int(board[i][j]==11) or int(not(board[i][j]==5))-1
  139.                 for w in range(-7,8):
  140.                     if(on(i,j+w)):inf[i][j+w]+=adj     #rook part
  141.                     if(on(i+w,j)):inf[i+w][j]+=adj
  142.                     if(on(i+w,j+w)):inf[i+w][j+w]+=adj #bishop part
  143.                     if(on(i+w,j-w)):inf[i+w][j-w]+=adj
  144.                 inf[i][j]-=4*adj
  145.  
  146. calc_inf()
  147. disp_inf()
  148. disp_ascii()
  149. while(True):
  150.     enter_move(m)
  151.     calc_inf()
  152.     disp_inf()
  153.     disp_ascii()
  154. #    disp_board()
Advertisement
Add Comment
Please, Sign In to add comment