본문 바로가기
Swift랑 친해지기/Swift PlayGround

임의의 장소에 보석 놓기 - 코딩 배우기 2

by 데브킹덕 2022. 1. 5.

let totalGems = randomNumberOfGems

var ruby = 0

func getGem() {
    if isOnGem {
        collectGem()
        ruby += 1
    }
}

func turnAround() {
    turnLeft()
    turnLeft()
}

func blocked() {
    if isBlocked {
        turnAround()
        if bluePortal.isActive {
            bluePortal.isActive = false
        }
        else {
            bluePortal.isActive = true
        }
        if pinkPortal.isActive {
            pinkPortal.isActive = false
        }
        else {
            pinkPortal.isActive = true
        }
    }
}

while ruby < totalGems {
    moveForward()
    getGem()
    blocked()
}

1. 주어진 상수 totalGems 을 어떻게 요리할지 생각해본다.

조건에 totalGem과 보석의 개수가 같기 전까지 반복하는 while문으로 정하는게 좋을듯하다.

먼저 변수와 함수를 정의해보자 

var ruby = 0          //ruby 변수 선언 및 0 값을 준다

func getGem(){        // getGem함수를 만들었다.
	if isOnGem{       // 보석이 만약에 있다면
    	collectGem()  // 보석을 수집해라
        ruby += 1     // 변수 ruby 값에 +1을 해라 
    }
}

 2. 벽을 마주하면 뒤로 도는 함수를 만들었다. 

func turnAround() {
	turnLeft()
	turnLeft()
}

3.  벽에 닿을때 마다 포탈이 켜지고 꺼지도록 하는게 좋겠다라는 생각을 했다. 

벽에 닿는 함수를 정의했다.

func blocked() {
    if isBlocked {
        turnAround()
        if bluePortal.isActive {
            bluePortal.isActive = false
        }
        else {
            bluePortal.isActive = true
        }
        if pinkPortal.isActive {
            pinkPortal.isActive = false
        }
        else {
            pinkPortal.isActive = true
        }
    }
}

4.  반복문을 돌려 앞으로 고정적으로 이동할 수 있도록 하였고, 

보석이 있으면 보석을 수집하며, 

앞이 막혀 있으면은 뒤돌아보고 포탈이 켜져있으면 꺼지고, 꺼져있으면 켜질 수 있도록 하였다. 

while ruby < totalGems {
    moveForward()
    getGem()
    blocked()
}

 

* ios

* swift

*playground

스위프트

플레이그라운드