Swift Playgrounds на русском, Initialization 4 урок | It Takes Two

preview_player
Показать описание
Друзья, я рад приветствовать всех на второй части по урокам в Swift Playgrounds. Мы с вами приступаем к четвертому уроку в части по Инициализации. Успехов в прохождении!!!

Мой телеграм канал, где перевод уроков по swift playgrounds выходит чаще и раньше чем видео! Если отключат Ютьюб, вы знаете где найти уроки по Свифту)

1-4 It Takes Two 1-4
Инициализация

Всем привет, сегодня у нас четвёртый урок по инициализации, урок называется: Понадобятся оба.

Приступим к уроку

Испытание: Создайте экземпляры типа Character и Expert и пусть они работают вместе для решения этой головоломки.

В этой головоломке, вам нужно инициализировать экземпляры вашего Персонажа и Эксперта, и использовать их вместе чтобы решить эту головоломку. Но вместо того, чтобы фокусироваться только на каждом отдельном экземпляре, вам необходимо сочетать поведения обоих экземпляров чтобы заставить их работать вместе.

Начните с создания экземпляра вашего персонажа и экземпляра вашего эксперта. Используйте эксперта для поворота одного из замков чтобы ваш персонаж смог достичь кристалл или свитчера. Затем поверните другой замок таким образом чтобы ваш персонаж смог пройти испытание.

#swiftplaygroundsнарусском #swiftplayground #learntocode2 #swift
Рекомендации по теме
Комментарии
Автор

Инициализация оказалось самым интересным и легким заданием для меня) Вот мой вариант)

func fiolet() {
expert.turnLeft()
expert.moveForward()
expert.moveForward()
expert.moveForward()
expert.turnRight()
expert.moveForward()
expert.moveForward()
expert.turnLeft()
expert.turnLockDown()
expert.turnLockDown()
}

func down() {
character.moveForward()
character.moveForward()
character.collectGem()
}

func second () {
expert.turnRight()
expert.moveForward()
expert.moveForward()
expert.turnRight()
expert.moveForward()
expert.moveForward()
expert.moveForward()
expert.moveForward()
expert.moveForward()
expert.moveForward()
expert.turnRight()
expert.moveForward()
expert.moveForward()
expert.turnLeft()
expert.turnLockUp()
}

func go() {
character.moveForward()
character.moveForward()
character.toggleSwitch()
}



fiolet()
down()
second()
go()

str-yydd
Автор

Здравствуй. Когда планируешь заливать следующие уроки?

daniils
Автор

Я уже даже и не знаю плохо или хорошо стал писать коды. Все же наверное сложно, хотя я просто стараюсь применять все знания из предыдущих уроков. Спасибо за твои видео. Тем кому не сложно или даже сам автор, прокомментируйте мой код.

var switchCounter = 0
func characterNavigation() {
if character.isBlockedLeft && switchCounter < 1 {
character.moveForward()
}
}
func expertNavigationLong() {
for i in 1 ... 3{
expert.moveForward()
}
}
func expertNavigationShort() {
for i in 1 ... 2 {
expert.moveForward()
}
}
func solveForLocks() {
if character.isOnGem {
character.collectGem()
expertNavigationLong()
expert.turnRight()
expertNavigationShort()
expert.turnLeft()
expert.turnLockUp()

} else if character.isOnClosedSwitch {
character.toggleSwitch()
switchCounter += 1
}else if character.isBlocked {
expert.turnLeft()
expertNavigationLong()
expert.turnRight()
expertNavigationShort()
expert.turnLeft()
for i in 1 ... 2 {
expert.turnLockDown()
}
expert.turnRight()
expertNavigationShort()
expert.turnRight()
expertNavigationLong()
}
}
while switchCounter < 1 {
solveForLocks()
characterNavigation()
}

MrHotie
Автор

А мы можем навигацию движения вписать в while? Например, если не заблокирован справа - повернуть направо, иначе идти вперед? Если да, то в какой момент он должен остановиться и повернуть ключ?

VaLerA
Автор

Ребят, помогите, я случайно добавил в код двойной апостроф и он зафексировался, как его убрать?

АртемЧебан-ью
Автор

xpert.turnLeft()
for i in 1 ... 5 {
expert.moveForward()
if expert.isBlocked {
expert.turnRight()
}
}
expert.turnLeft()
expert.turnLockDown()
expert.turnLockDown()

character.moveForward()
character.moveForward()
if character.isOnGem {
character.collectGem()
expert.turnLeft()
for i in 1 ... 10 {
expert.moveForward()
if expert.isBlocked {
expert.turnLeft ()
}

}
expert.turnRight ()
expert.turnLockUp()

}
for i in 1 ... 2 {
character.moveForward()
if character.isOnClosedSwitch {
character.toggleSwitch()
}

}

kerimliramil
Автор

Инициализация оказалась довольно легкой, но от размеров кода и из-за отключения "!" жить стало грустно, ведь автоматизировать не получается.

let expert = Expert()
let character = Character()

func expertPurple() {
expert.turnLeft()
for i in 1 ... 3 {
expert.moveForward()
}
expert.turnRight()
for i in 1 ... 2 {
expert.moveForward()
}
expert.turnLeft()
for i in 1 ... 2 {
expert.turnLockDown()
}
}

func expertGreen() {
expert.turnRight()
for i in 1 ... 2 {
expert.moveForward()
}
expert.turnRight()
for i in 1 ... 6 {
expert.moveForward()
}
expert.turnRight()
for i in 1 ... 2 {
expert.moveForward()
}
expert.turnLeft()
expert.turnLockUp()
}

func charGem() {
for i in 1 ... 2 {
character.moveForward()
}
character.collectGem()

}

func charSwitch() {
for i in 1 ... 2 {
character.moveForward()
}
character.toggleSwitch()
}

В ИТОГЕ:
expertPurple()
charGem()
expertGreen()
charSwitch()

leonidkresss
Автор

не хотел описывать прям пошагово
хотел что-то необычное написать, и вот что вышло - посмотрите если несложно, интересно мнение любого

var gemCounter = 0
var openSwitch = 0

func UpOrDown(value: Int){
if(value == 1){
expert.turnLockUp()
}
if(value == 2){
expert.turnLockDown()
expert.turnLockDown()
}
}


func vertical(value: Int) {
if(value == 1) {
for i in 1 ... 2 {
expert.moveForward()
}
expert.turnLeft()
UpOrDown(value: 1)
expert.turnRight()
for i in 1 ... 2 {
expert.moveForward()
}

}
if (value == 2){
for i in 1 ... 2 {
expert.moveForward()
}
expert.turnLeft()
UpOrDown(value: 2)
expert.turnRight()
expert.moveForward()
expert.moveForward()
expert.turnRight()
horizontMove()
}
}


func moveCollectAndOpen() {
if !character.isBlocked {
character.moveForward()
}else if character.isOnGem{
character.collectGem()
gemCounter += 1
}else if character.isOnClosedSwitch{
character.toggleSwitch()
openSwitch += 1
}
}


func horizontMove() {
for i in 1 ... 3 {
expert.moveForward()
}
}




expert.turnLeft()


while gemCounter != 1 {
horizontMove()
if expert.isBlocked {
expert.turnRight()
}
vertical(value: 2)
while gemCounter != 1 {
moveCollectAndOpen()
}


}

while openSwitch != 1 {
horizontMove()
if expert.isBlocked {
expert.turnRight()
}
vertical(value: 1)
while openSwitch != 1 {
moveCollectAndOpen()
}


}

sawyerhowbeit
Автор

Вот мое решение :
func forwardAndRight() {
for i in 1 ... 5 {
expert.moveForward()
if !expert.isBlockedRight {
expert.turnRight()
}
}
}

expert.turnLeft()
forwardAndRight()
expert.turnLeft()
expert.turnLockDown()
expert.turnLockDown()
expert.turnRight()
forwardAndRight()
forwardAndRight()
expert.turnLeft()
expert.turnLockUp()
while !character.isBlocked {
character.moveForward()
if character.isOnGem {
character.collectGem()
}else if character.isOnClosedSwitch {
character.toggleSwitch()
}
}

AquaRioUK
Автор

слишком изи) скучно. У меня получилось короче. Не заигрывайтесь с функциями и не забывайте про "for"
func twoSteps (){
expert.moveForward()
expert.moveForward()
}
func goToLock (){
expert.turnRight()
twoSteps()
expert.turnLeft()
}
expert.turnLeft()
twoSteps()
expert.moveForward()
goToLock()
expert.turnLockDown()
expert.turnLockDown()

character.moveForward()
character.moveForward()
character.collectGem()

expert.turnRight()
twoSteps()
expert.turnRight()
for i in 1 ... 3 {
twoSteps()
}
goToLock()
expert.turnLockUp()
character.moveForward()
character.moveForward()
character.toggleSwitch()

KrisBond-ebge