12 урок посвящен Enum перечислениям.
Домашнее задание к уроку:
Домашнее задание к уроку:
/*
1. Создать энум с шахматными фигруами (король, ферзь и т.д.). Каждая фигура должна иметь цвет белый либо черный (надеюсь намек понят), а так же букву и цифру для позиции. Создайте пару фигур с расположением на доске, так, чтобы черному королю был мат :) Поместите эти фигуры в массив фигур
2. Сделайте так, чтобы энумовские значения имели rawValue типа String. Каждому типу фигуры установите соответствующее английское название. Создайте функцию, которая выводит в консоль (текстово, без юникода) название фигуры, цвет и расположение. Используя эту функцию распечатайте все фигуры в массиве.
3. Используя красивые юникодовые представления шахматных фигур, выведите в консоли вашу доску. Если клетка не содержит фигуры, то используйте белую или черную клетку. Это должна быть отдельная функция, которая распечатывает доску с фигурами (принимает массив фигур и ничего не возвращает)
4. Создайте функцию, которая будет принимать шахматную фигуру и тюпл новой позиции. Эта функция должна передвигать фигуру на новую позицию, причем перемещение должно быть легальным: нельзя передвинуть фигуру за пределы поля и нельзя двигать фигуры так, как нельзя их двигать в реальных шахматах (для мегамонстров программирования). Вызовите эту функцию для нескольких фигур и распечатайте поле снова.
5. Следите чтобы ваш код был красивым!
*/
enum ChessColor: String {
case white, black
}
enum ChessLetter: String {
case a , b, c, d, e, f, g, h
}
enum ChessDigit: Int {
case one = 1 , two, three, four, five, six, seven, eight
}
enum ChessType: String {
case rook, knight, bishop, pawn, king, queen
}
typealias ChessFigure = (ChessType,ChessColor, ChessLetter, ChessDigit)
var whiteKing: ChessFigure = (ChessType.king, ChessColor.white, ChessLetter.b, ChessDigit.one)
var whiteRook1: ChessFigure = (ChessType.rook, ChessColor.white, ChessLetter.d, ChessDigit.seven)
var whiteRook2: ChessFigure = (ChessType.rook, ChessColor.white, ChessLetter.e, ChessDigit.eight)
var blackKing: ChessFigure = (ChessType.king, ChessColor.black, ChessLetter.f, ChessDigit.eight)
let figureArray = [whiteKing, whiteRook1, whiteRook2, blackKing]
/*
2
*/
func descriptionFigures(figureArray array: [ChessFigure]) {
for figure in array {
print(figure.0.rawValue, figure.1.rawValue, figure.2, figure.3.rawValue)
}
}
descriptionFigures(figureArray: figureArray)
/*
3
*/
print("\nN 3 \n")
func createEmptyChessMate() -> [[Character]] {
var chessArray = [[Character]]()
for vertical in 0...7 {
var line = [Character]()
for horizontal in 0...7 {
line += (horizontal + vertical) % 2 == 0 ? "⬛" : "⬜"
}
chessArray.append(line)
}
return chessArray
}
func showChessMate(chessMate: [[Character]]) {
let letter = " a b c d e f g h"
print(letter)
for (index,lineArray) in chessMate.enumerated().reversed() {
var lineChar = String(index + 1) + " "
for char in lineArray {
lineChar += String(char)
}
print(lineChar)
}
print(letter)
}
func setFiguresInChess(chessMate: [[Character]], figureArray array: [ChessFigure]) -> [[Character]]{
var chessArray = chessMate
for figure in array {
let indexes = indexInChessArray(chessLetter: figure.2, chessDigit: figure.3)
chessArray[indexes.verticalIndex][indexes.horizontalIndex] = unicodeSymbol(figureType: figure.0, figureColor: figure.1)
}
return chessArray
}
func indexInChessArray(chessLetter: ChessLetter, chessDigit: ChessDigit) -> (horizontalIndex: Int, verticalIndex: Int) {
let letters = "abcdefgh"
return (letters.index(of: chessLetter.rawValue.first!)!.encodedOffset, chessDigit.rawValue - 1)
}
func unicodeSymbol(figureType: ChessType, figureColor: ChessColor) -> Character {
switch (figureType, figureColor) {
case (let figureType, let figureColor) where figureType == .king:
return figureColor == .white ? "♔" : "♚"
case (let figureType, let figureColor) where figureType == .queen:
return figureColor == .white ? "♕" : "♛"
case (let figureType, let figureColor) where figureType == .rook:
return figureColor == .white ? "♖" : "♜"
case (let figureType, let figureColor) where figureType == .bishop:
return figureColor == .white ? "♗" : "♝"
case (let figureType, let figureColor) where figureType == .knight:
return figureColor == .white ? "♘" : "♞"
case (let figureType, let figureColor) where figureType == .pawn:
return figureColor == .white ? "♙" : "♟"
default:
return "*"
}
}
var chessMate = createEmptyChessMate()
chessMate = setFiguresInChess(chessMate: chessMate, figureArray: figureArray)
showChessMate(chessMate: chessMate)
/*
4
*/
print("\nN 4\n")
func moveFigureChess(figure: ChessFigure, moveTo coordinate: (ChessLetter, ChessDigit)) {
var emptyChessMate = createEmptyChessMate()
var mutableFigure = figure
let startPosition = setFiguresInChess(chessMate: emptyChessMate, figureArray: [figure])
print("Start Position")
showChessMate(chessMate: startPosition)
mutableFigure.2 = coordinate.0;
mutableFigure.3 = coordinate.1
print("\nFinish Position\n")
let finishPosition = setFiguresInChess(chessMate: emptyChessMate, figureArray: [mutableFigure])
showChessMate(chessMate: finishPosition)
}
moveFigureChess(figure: whiteRook1, moveTo: (ChessLetter.d, ChessDigit.one))
Console:
king white b 1
rook white d 7
rook white e 8
king black f 8
N 3
a b c d e f g h
8 ⬜⬛⬜⬛♖♚⬜⬛
7 ⬛⬜⬛♖⬛⬜⬛⬜
6 ⬜⬛⬜⬛⬜⬛⬜⬛
5 ⬛⬜⬛⬜⬛⬜⬛⬜
4 ⬜⬛⬜⬛⬜⬛⬜⬛
3 ⬛⬜⬛⬜⬛⬜⬛⬜
2 ⬜⬛⬜⬛⬜⬛⬜⬛
1 ⬛♔⬛⬜⬛⬜⬛⬜
a b c d e f g h
N 4
Start Position
a b c d e f g h
8 ⬜⬛⬜⬛⬜⬛⬜⬛
7 ⬛⬜⬛♖⬛⬜⬛⬜
6 ⬜⬛⬜⬛⬜⬛⬜⬛
5 ⬛⬜⬛⬜⬛⬜⬛⬜
4 ⬜⬛⬜⬛⬜⬛⬜⬛
3 ⬛⬜⬛⬜⬛⬜⬛⬜
2 ⬜⬛⬜⬛⬜⬛⬜⬛
1 ⬛⬜⬛⬜⬛⬜⬛⬜
a b c d e f g h
Finish Position
a b c d e f g h
8 ⬜⬛⬜⬛⬜⬛⬜⬛
7 ⬛⬜⬛⬜⬛⬜⬛⬜
6 ⬜⬛⬜⬛⬜⬛⬜⬛
5 ⬛⬜⬛⬜⬛⬜⬛⬜
4 ⬜⬛⬜⬛⬜⬛⬜⬛
3 ⬛⬜⬛⬜⬛⬜⬛⬜
2 ⬜⬛⬜⬛⬜⬛⬜⬛
1 ⬛⬜⬛♖⬛⬜⬛⬜
a b c d e f g h
Комментариев нет:
Отправить комментарий