Advertisement
Artyom_Kopan

model.kt

May 30th, 2022
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.48 KB | None | 0 0
  1. const val BUTTONS_COUNT = 9
  2.  
  3. fun fetchButtons() = (0 until BUTTONS_COUNT).map { Button(it) }.toList()
  4.  
  5. fun getWinStatus(buttons: List<Button>): WinStatus {
  6.     var isHorizontalCrossWin = true
  7.     var isHorizontalNoughtsWin = true
  8.     var isVerticalCrossWin = true
  9.     var isVerticalNoughtsWin = true
  10.     var isMainDiagonalCrossWin = true
  11.     var isMainDiagonalNoughtsWin = true
  12.     var isOtherDiagonalCrossWin = true
  13.     var isOtherDiagonalNoughtsWin = true
  14.  
  15.     for (i in 0..2) {
  16.         // проверяем горизонтали
  17.         if (i == 0 || (!isHorizontalCrossWin && !isHorizontalNoughtsWin)) {
  18.             isHorizontalCrossWin = true
  19.             isHorizontalNoughtsWin = true
  20.             (3 * i..3 * i + 2).forEach {
  21.                 isHorizontalCrossWin = isHorizontalCrossWin and (buttons[it].symbol == Symbol.CROSS)
  22.                 isHorizontalNoughtsWin = isHorizontalNoughtsWin and (buttons[it].symbol == Symbol.NOUGHT)
  23.             }
  24.         }
  25.         // проверяем вертикали
  26.         if (i == 0 || (!isVerticalCrossWin && !isVerticalNoughtsWin)) {
  27.             isVerticalCrossWin = true
  28.             isVerticalNoughtsWin = true
  29.             listOf(i, i + 3, i + 6).forEach {
  30.                 isVerticalCrossWin = isVerticalCrossWin and (buttons[it].symbol == Symbol.CROSS)
  31.                 isVerticalNoughtsWin = isVerticalNoughtsWin and (buttons[it].symbol == Symbol.NOUGHT)
  32.             }
  33.         }
  34.     }
  35.  
  36.     // проверяем диагонали
  37.     listOf(0, 4, 8).forEach {
  38.         isMainDiagonalCrossWin = isMainDiagonalCrossWin and (buttons[it].symbol == Symbol.CROSS)
  39.         isMainDiagonalNoughtsWin = isMainDiagonalNoughtsWin and (buttons[it].symbol == Symbol.NOUGHT)
  40.     }
  41.     listOf(2, 4, 6).forEach {
  42.         isOtherDiagonalCrossWin = isOtherDiagonalCrossWin and (buttons[it].symbol == Symbol.CROSS)
  43.         isOtherDiagonalNoughtsWin = isOtherDiagonalNoughtsWin and (buttons[it].symbol == Symbol.NOUGHT)
  44.     }
  45.  
  46.     // проверяем на ничью
  47.     var isBalance = true
  48.     buttons.forEach { isBalance = isBalance and (it.symbol != null) }
  49.  
  50.     return when {
  51.         isHorizontalCrossWin || isVerticalCrossWin || isMainDiagonalCrossWin || isOtherDiagonalCrossWin ->
  52.             WinStatus.CROSSES
  53.         isHorizontalNoughtsWin || isVerticalNoughtsWin || isMainDiagonalNoughtsWin || isOtherDiagonalNoughtsWin ->
  54.             WinStatus.NOUGHTS
  55.         isBalance -> WinStatus.BALANCE
  56.         else -> WinStatus.CONTINUES
  57.     }
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement