Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. def has_three(p, board):
  2. """Checks if player p has three in a row"""
  3. # For every position on the board
  4. for i in xrange(6):
  5. for j in xrange(7):
  6. if board[i][j] == p:
  7. if i<=2 and board[i+1][j]==p and board[i+2][j]==p and board[i+3][j]==0:
  8. return True
  9. if i>=3 and board[i-1][j]==p and board[i-2][j]==p and board[i-3][j]==0:
  10. return True
  11. if j<=3 and board[i][j+1]==p and board[i][j+2]==p and board[i][j+3]==0:
  12. return True
  13. if j>=3 and board[i][j-1]==p and board[i][j-2]==p and board[i][j-3]==0:
  14. return True
  15. if i<=2 and j<=3 and board[i+1][j+1]==p and board[i+2][j+2]==p and board[i+3][j+3]==0:
  16. return True
  17. if i<=2 and j>=3 and board[i+1][j-1]==p and board[i+2][j-2]==p and board[i+3][j-3]==0:
  18. return True
  19. if i>=3 and j<=3 and board[i-1][j+1]==p and board[i-2][j+2]==p and board[i-3][j+3]==0:
  20. return True
  21. if i>=3 and j>=3 and board[i-1][j-1]==p and board[i-2][j-2]==p and board[i-3][j-3]==0:
  22. return True
  23. return False
  24.  
  25. DIRECTIONS = [(1,0),(1,1),(0,1),(-1,1)]
  26.  
  27. def legal_position(i, j, board):
  28. """Return True if position (i, j) is a legal position on 'board'."""
  29. return 0 <= i < len(board) and 0 <= j < len(board[0])
  30.  
  31. def winning_move(player, move, board, n = 3):
  32. """Return True if 'move' is part of a line of length 'n' or longer for 'player'."""
  33. for di, dj in DIRECTIONS:
  34. line = 0
  35. for sign in (-1, 1):
  36. i, j = move
  37. while legal_position(i, j, board) and board[i][j] == player:
  38. i += sign * di
  39. j += sign * dj
  40. line += 1
  41. if line > n: # move was counted twice
  42. return True
  43. return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement