понедельник, 5 февраля 2018 г.

Swift 17. Subscipts

В 17 уроке рассмотрены санскриты или  индексы в квадратных скобках.
Домашнее задание - эмуляция поля и  ходов в игре крестики/нолики:

/*
 Крестики нолики (Средний уровень)

 1. Создать тип, представляющий собой поле для игры в крестики нолики
 На каждой клетке может быть только одно из значений: Пусто, Крестик, Нолик
 Добавьте возможность красиво распечатывать поле

 2. Добавьте сабскрипт, который устанавливает значение клетки по ряду и столбцу,
 причем вы должны следить за тем, чтобы программа не падала если будет введен не существующий ряд или столбец.

 3. Также следите за тем, чтобы нельзя было устанавливать крестик либо нолик туда, где они уже что-то есть. Добавьте метод очистки поля.

 4. Если хотите, добавте алгоритм, который вычислит победителя
 */


enum FieldType: Character {
    case o = "⭕"
    case x = "❌"
    case empty = "⬜"
}

class TicTacToe {
    let size: Int
    var array: [[FieldType]] = [[FieldType]]()
    init(size: Int) {
        self.size = size
        create()
    }
    func create() {
        print("Create new Tic Tac Toe")
        array = [[FieldType]]()
        for _ in 0..<size {
            let line = Array(repeating: FieldType.empty, count: size)
            array.append(line)
        }
    }
    func show() {
        for line in array {
            var lineString = ""
            for character in line {
                lineString += String(character.rawValue)
            }
            print(lineString)
        }
    }
    subscript (x: Int, y: Int) -> FieldType {
        get {
            if x < 0 || y < 0 || x >= size || y >= size {
                return .empty
            }
            return array[y][x]
        }
        set {
            print("\(newValue.rawValue) - (\(x), \(y))")
            if !(x < 0 || y < 0 || x >= size || y >= size || newValue == .empty || array[y][x] != .empty) {
                array[y][x] = newValue
            }
        }
    }
}

let ticTacToe = TicTacToe(size: 3)
ticTacToe.show()
ticTacToe[0,2] = .x
ticTacToe.show()
ticTacToe[1,1] = .o
ticTacToe.show()
ticTacToe[1,2] = .x
ticTacToe.show()
ticTacToe[2,0] = .o
ticTacToe.show()
ticTacToe[2,2] = .x
ticTacToe.show()
ticTacToe.create()
ticTacToe.show()




Console:

Create new Tic Tac Toe
⬜⬜⬜
⬜⬜⬜
⬜⬜⬜
- (0, 2)
⬜⬜⬜
⬜⬜⬜
❌⬜⬜
- (1, 1)
⬜⬜⬜
⬜⭕⬜
❌⬜⬜
- (1, 2)
⬜⬜⬜
⬜⭕⬜
❌❌⬜
- (2, 0)
⬜⬜⭕
⬜⭕⬜
❌❌⬜
- (2, 2)
⬜⬜⭕
⬜⭕⬜
❌❌❌
Create new Tic Tac Toe
⬜⬜⬜
⬜⬜⬜
⬜⬜⬜

Комментариев нет:

Отправить комментарий