멋사 26일차,, 돌려돌려 돌림판~! 만들기 실습을 내주셨다
여러가지 의견이 나왔는데 우리 2조는 소주병 돌리기 룰렛과 슬롯머신을 만들기로 했고 나는 그 중에 슬롯머신 만들기로~
진짜 슬롯머신처럼 이름이 슉슈슉 보이다가 마지막에 벌칙자 이름이 뙇! 보여주고 싶었다. 무슨 방법이 있을까 생각해보다가 일정 시간동안 일정 시간 간격으로 이름을 보여주면 슉슈슉 보여주는 느낌이 날 것 같아 Timer를 사용해서 만들어 보기로 했다!
.alert("앗! 진짜 돌리신다구요?", isPresented: $start) {
Button("Cancel", role: .cancel) {}
Button("OK") {
var count: Int = 0
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { Timer in
if timeRemaining > 0 {
self.timeRemaining -= 1
count += 1
if count > (inputTexts.count - 1) {
count = 0
}
name = inputTexts[count]
} else {
Timer.invalidate()
}
})
timeRemaining = 30 //Play 버튼을 또 눌렀을 때도 다시 슬롯머신 돌아가도록 타이머 시간 설정
name = inputTexts.randomElement()! //벌칙자 두둥
print(name) //벌칙자 이름 확인용
}
}
이렇게 생각했는데 자꾸 같은 사람 이름만 나오고 확인용으로 찍어놓은 print랑도 이름이 일치하지 않는 것이다!!! 저렇게까지 만들고 정규 수업시간은 끝났고 recap 스터디 때 승태님이 계속 같은 사람만 나오는 거면 버그 아니냐면서 뚝딱뚝딱 고쳐주셨다. 역시 따봉승태님
.alert("앗! 진짜 돌리신다구요?", isPresented: $start) {
Button("Cancel", role: .cancel) {}
Button("OK") {
var count: Int = 0
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { Timer in
if timeRemaining > 0 {
self.timeRemaining -= 1
count += 1
if count > (inputTexts.count - 1) {
count = 0
}
name = inputTexts[count]
} else {
Timer.invalidate()
}
})
timeRemaining = Double.random(in: 30...40)
// 3의 배수에 위치한 참여자만 걸리는 사쿠라 제거 by 도희 응관 다혜 승태
print(name) //벌칙자 이름 확인용
}
}
Timer 돌아가는 시간을 random으로 하니까 벌칙자가 다르게 나오기는 하는데,, 나는 돌아가는 시간이 일정하지 않은 것이 너무 거슬리는 것이다,,,
.alert("앗! 진짜 돌리신다구요?", isPresented: $start) {
Button("Cancel", role: .cancel) {}
Button("OK") {
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { Timer in
if timeRemaining > 0 {
self.timeRemaining -= 1
name = inputTexts.randomElement()!
} else {
Timer.invalidate()
}
})
timeRemaining = 30
name = inputTexts.randomElement()!
print(name) //벌칙자 이름 확인용
}
}
count가 문젠가 싶어서 count를 없애고 슬롯이 돌아갈 때 이름이 random으로 보이게 해봤는데, 계속 같은 사람이 나오지는 않지만 이름 확인용 print랑 이름이 다르다,,
뭐가 문젠가 싶어서 이것저것 print를 찍어보다가 슬롯이 돌아갈 때 이름이 어떻게 찍히나 확인해보려고 Timer안에 print문을 찍었더니!!!!!
상상치도 못한 순서 ㄴㅇㄱ
당연히 Timer 안쪽 다 실행하고 밑의 코드 실행할거라고 생각했는데, 밑의 코드를 다 실행하고 Timer가 실행됐던 것이다! 그래서 count가 있을 때 4명 넣은 배열에서 index 2인 사람이 계속 나왔나보다,, 종환님이 자꾸 자기만 나오는 것 같다고 했을 때 기분탓이라고 함구시켜버렸는데,, 헤헷~ 죗옹ㅎ
Timer를 만들면 타이머는 0.1초 마다 알아서 돌아가고 있고, 0.1초 뒤에 또 작업을 하기 전에 밑의 코드들이 처리되어서 이런 순서가 된 것이 아닐까 추측해본다! 확실하게 하기 위해서 자료가 있는지 찾아서 추가해야겠다