Guest User

Untitled

a guest
Feb 17th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. enum class Team {
  2. RED,
  3. BLACK,
  4. EMPTY;
  5.  
  6. override fun toString(): String = when (this) {
  7. RED -> "R"
  8. BLACK -> "B"
  9. EMPTY -> "O"
  10. }
  11. }
  12.  
  13. class Board() {
  14.  
  15. // Kotlin's way of doing constants
  16. companion object {
  17. const val ROWS = 6;
  18. const val COLS = 7;
  19. }
  20.  
  21. // Init array for board
  22. var board = Array(7*6) { Team.EMPTY }
  23.  
  24. // Overload operator so [row,col] works
  25. operator fun get(row: Int, col: Int): Team? {
  26. if (row < 0 || row > ROWS || col < 0 || col > COLS) {
  27. return null
  28. } else {
  29. return board[row * COLS + col]
  30. }
  31. }
  32.  
  33. // Overload operator so [row,col] = value works
  34. operator fun set(row: Int, col: Int, value: Team) {
  35. board[row * COLS + col] = value
  36. }
  37.  
  38. // Overload toString to output pretty format
  39. override fun toString(): String {
  40. var boardStr = ""
  41. board.forEachIndexed { idx, space -> boardStr += "${space}" + if ((idx + 1) % 7 == 0) "\n" else " " }
  42. return boardStr
  43. }
  44. }
  45.  
  46. fun findWin(board: Board): Team? {
  47. // Ranges are inclusive, so minus 1
  48. for (row in 0..Board.ROWS - 1) {
  49. for (col in 0..Board.COLS - 1) {
  50. val team = board[row, col]
  51. // If the space under test is empty, move on
  52. if (team == Team.EMPTY) {
  53. continue
  54. }
  55.  
  56. if (team == board[row, col + 1] && team == board[row, col + 2] && team == board[row, col + 3]) {
  57. println("Horizontal Winner: ${team}")
  58. return team;
  59. }
  60.  
  61. if (team == board[row + 1, col] && team == board[row + 2, col] && team == board[row + 3, col]) {
  62. println("Vertical Winner: ${team}")
  63. return team;
  64. }
  65.  
  66. if ((team == board[row + 1, col + 1] && team == board[row + 2, col + 2] && team == board[row + 3, col + 3]) ||
  67. team == board[row + 1, col - 1] && team == board[row + 2, col - 2] && team == board[row + 3, col - 3]) {
  68. println("Diagonal Winner: ${team}")
  69. return team;
  70. }
  71. }
  72. }
  73.  
  74. return null
  75. }
  76.  
  77. fun main(args: Array<String>) {
  78. val board = Board()
  79.  
  80. board[2, 6] = Team.RED
  81. board[3, 5] = Team.RED
  82. board[4, 4] = Team.RED
  83. board[5, 3] = Team.RED
  84.  
  85. println(board)
  86.  
  87. findWin(board)
  88. }
Add Comment
Please, Sign In to add comment