SW교육/EPL

탕수육 게임!?

GrayrabbiT 2016. 2. 15. 23:16
반응형

탕수육 게임….

이 포스팅을 레크레이션의 달인 남모 교사에게 바칩니다.(넌 정말 짱이었어..)



문득 남모 교사가 탕수육 게임을 만들어 왔길래..


교육에 투입해도 재미있을 것 같아서 포스팅 합니다.


문제 : 탕수육 게임을 만들기


라는 문제를 해결하기라고 아이들에게 과제를 주었을 때 아이들의 대부분의 반응은 File:What the....gif


이런 표정일 것이라 예상 됩니다. 뭐.. 그렇죠. 학생들에게 가장 먼저 가르쳐야 할 것은  만드는 기술이 아니라고 생각합니다.


가르쳐야 할 것은 문제를 해결하는 방법이겠죠.


위와 같은 문제를 제시했을 때 대부분의 아이들은 손을 놓아버릴 것입니다. 왜 그럴까요?

우리도 마찬가지로 어떤 문제를 접했을 때 문제의 크기가 너무 크다면 멘탈이 나가는 것과 비슷한 이치일 것입니다.


저 문제는 해결이 불가능하거든요…. 저 커다란 문제를 한방에 푼다는 것은 말이죠.


따라서 문제를 다시 세분화 시키는 것이 중요합니다.


문제 : 탕수육 게임을 만들기.


제일 먼저 물어야 할 것은 탕수육 게임이 무엇인지. 즉 규칙이 무엇인지 파악하는 것이겠죠. 탕수육 게임의 규칙은 의외로 간단합니다.



계속 ‘탕, 수, 육’이 반복되면 되겠죠.



그렇다면 우리의 문제는 이렇게 바뀌어 버린 것을 확인할 수 있습니다.


문제 : 탕수육 게임 만들기


수정된 문제 : 탕, 수, 육 말하기



그렇다면 코드는 이렇게 제시되면 되겠군요.




엄청 쉽습니다.




그런데 문제는 …





아… 탕수육 게임을 혼자하고 있네요. 그렇다면 2명은 있어야 하겠네요. 그렇다면 다시 문제를 수정해야 할 것 같습니다.



문제 : 탕수육 게임 만들기


수정된 문제 : 탕, 수, 육 말하기 <- 이건 망함


수정된 문제 : 캐릭터는 2명 이상이다

                     번갈아가면서 탕, 수 ,육 을 말해야 한다.


문제를 수정하고 난 후 이 문제는 괜찮을 것 같나요?

잘 모르겠습니다. 일단 해보죠.



권투 선수와… 엔트리봇인가요? 뭐 어찌되었건 두 명의 대결이 되었습니다. 그렇다면 이런 경우 어떻게 처리해야 할까요?



자 그렇다면 첫번째 2명 이상이다는 대충 해결한 것 같습니다. 그렇다면 두번째 번갈아가며 서로 말을 해야 하는데요. 이런 경우 어떻게 해야 할까요?


말하는 단어는 단 3개 뿐입니다. 탕, 수, 육


그렇다면 혼자 말하는 경우 3가지 상황 뿐입니다.


그런데 만약 2명이서 말한다면 몇 가지의 상황이 생길까요?


총 6가지의 상황이 발생할 수 있습니다.


1 엔트리봇 ‘ 탕’

2 권투선수 ‘탕’

3 엔트리봇 ‘수’

4 권투선수 ‘수’

5 엔트리봇 ‘육’

6 권투선수 ‘육’


그렇다면 여기서 그냥 수학적인 지식을 동원해 보죠.


매번 6개의 경우로 나올 수 있는 것은? 어떤 수를 6으로 나눈 나머지. 입니다.


나머지는 0,1,2,3,4,5 다섯 가지 밖에 없겠죠.


그렇다면 이렇게 만들어 버릴 수 있습니다.



이것에 엔트리 봇의 코드입니다. 처음부터 생각해 보면 경우는 6가지입니다. 그렇다면. 처음에 엔트리봇이 먼저 시작하면


1 엔트리봇 탕

2 권투선수 수

3 엔트리봇 육

4 권투선수 탕

5 엔트리봇 수

6 권투선수 육


이렇게 6가지로 생각 될 수 있습니다.


즉, 잘 보시면 필승 전략!! 보이시나요? 


엔트리봇은 탕 육 수


권투선수 수 탕 육


헛소리 집어치우겠습니다..  그렇다면 권투선수의 코드는 이렇게 되겠죠.


여기에서 프로그래밍 개념을 설명할 수 있는 몇 가지가 있습니다.


  1. 이벤트 방식

이벤트 저도 참 좋아하는데요. 제가 한번… 음.. 이게 아니고. 이벤트 방식에는 크게 2가지가 있습니다.


폴링 (Polling)


폴링 방식은 하염없이 기다리는 겁니다. 마치 기다리는 공문이 있을 때, 공문함에 왔나, 안 왔나 살펴보는 것처럼. 이런 방식이 폴링 방식입니다. 위의 코드가 바로 폴링 방식이죠. 즉 내차례를 계속 확인합니다. 엔트리봇이 말하고 있어도 권투선수는 자기 차례가 돌아왔나 계속 확인해 보는 겁니다. 이런 식으로 코드를 구현하면 낭비가 심해집니다. 왜나하면 공문함 계속 새로고침 하시면 힘빠지잖아요.



이벤트 드라이븐(Event Driven)


이벤트 드라이븐 방식은 이벤트에 귀는 기울이고 있지만 다른 일을 하는 것입니다. 그 무슨 알림이 그거 마냥. 인터넷 서핑하고 눈누난나 하고 있다가 공문이 도착했다는 표시가 나타나면 그때서야 공문을 처리하면 되는 방식이죠.



2가지 방식 중에 어느 방식을 쓰실 건가요?





그렇다면 문제!.


1. 이벤트 드라이븐 방식으로 위의 코드를 고쳐보세요.


2. 위의  코드에서의 문제점은 2명에 최적화 되어 있습니다. 여러 캐릭터를 추가해도 탕수육 게임을 진행시키기 위해서 어떻게 해야 할까요? 그때마다 숫자를 늘리실건가요?






반응형