Может кто помочь объяснить какие свойство или прием использовать... не понимаю как объединить все вместе в одной функции(


#1

//10. Представим, что вы создаете rpg игру. Напишите структуру для хранения координаты игрока, enum для направлений (восток, сервер, запад, юг) и функцию, которая берет к себе на вход позицию и направление и возвращает новую координату (после того как игрок походил на одну клетку в соответствующую сторону). Вызовите эту функцию несколько раз, «походив» своим игроком.
Вот что я натворил…

enum Command {

case up, down, right, left

}

struct CurrentPosition {

static var x: Int = 0

static var y: Int = 0

var level = Command()

func walk(x: Int, y: Int){

<#function body#>

}

init (x: Int, y: Int) {

CurrentPosition. self .x = x

CurrentPosition. self .y = y

}

}

Заранее всем спасибо


#2
  1. static для свойств тут не нужен

  2. функция не принимает у вас направление движения

  3. у функции нету возвращаемого типа

  4. init для структуры в вашем случае излишен, т.к. структура имеет инициализатор по дефолту

  5. как по мне, функция не должна принимать позицию, т.к. позиция уже хранится в самой структуре

  6. для простоты я бы сделал для каждого направления действие с позицией, т.е.

    enum Command {
     case up, down, right, left
    
     var action: Int {
         switch self {
             case .up, .right:
                 return 1
             default:
                 return -1
         }
     }
    }
    

Останется только сделать вычисление в функции в зависимости от направления.


#3

Спасибо за содержательный ответ:) Очень помогли


#4

Я не понял ))) У меня точно такое же задание!!

вот с вашими рекомендациями у меня получилось следующее:

enum Command {
case north, south, east, west

var action: Int {
switch self {
case .north, .east:
return 1
default:
return -1
}
}
}
func RPG( dayrektion: String ) -> (Int, Int, Int, Int) {
var north = 0
var south = 0
var east = 0
var west = 0

switch dayrektion {
case "narth":
    Command.north = north + 1

case "south":
     Command.south = south + 1

case "east":
 Command.east = east + 1

    case "west":
    Command.west = west + 1
default:
    "net takogo nfpravleniy"
}
return (CompassPoint.north, CompassPoint.south, CompassPoint.east, CompassPoint.west)

}
RPG(dayrektion: “west”)
CompassPoint.north = north

Если Вас не затруднит помогите понять почему не работает !! Я честно говоря увы пока не большой в этом профессионал !!