다시 오신 걸 환영해요
이번 강의에서는 또 다른 과제를 드릴게요
기능과 관련 있죠 이번 도전은 분할 정복에
관한 거예요 네 강의를 중심으로 프로그램을 구성하는
거죠 문제 해결에 더 중점을 둘 거예요
이제 틱택토 게임을 만들어 주세요
네 그럼 여러분이 더 나은 문제 해결사가 되고 기능을
중심으로 프로그램을 구성하는 데 도움이 될 겁니다
네 배열도 활용할 거예요 특정 데이터의
형식을 정하는 방법을 알아내야 합니다 하지만 틱택토
게임의 시뮬레이션이 되겠죠
컴퓨터는 안 만들 거예요
플레이어 1과 플레이어 2의 대결이죠
그러니 틱택토 게임을 하는 캐릭터로 써요
모두가 이 프로그램이나 게임을 좋아하길
바라요
2명의 플레이어로 구성된 3x3 그리드 게임이에요
돌아가면서 해요
X는 코예요
생각나는 게 있으면 좋겠네요
네 이 게임을 설명하고 싶지는 않았지만 틱택토 게임에
익숙하시길 바라요
네 어떻게 작동하는지에 대한 데모를 보여드리도록 하겠습니다 그리고 결과물이 어떻게
실행되어야 하는지에 대한 데모를 보여드리겠습니다
기본적인 틱택토 게임이에요
네 제가 하려는 건 실제 보드를
나타낼 배열을 만드는 거예요 3x3 그리드요
단일 차원 배열이면 충분할 것 같아요
a2D 배열을 생성할 수도 있습니다 행과 열을 나타내기
위해서요
2D가 더 직관적이겠지만 여러분 코드에서
시각화하기가 좀 더 어려울 수도 있어요
어느 쪽이든 괜찮아요
프로그래밍의 장점은 문제에 대한 해결책이 많다는 거죠
네 제가 제시하는 해결책과 디자인에 대한 접근법을 알려드리겠지만 마음대로
디자인을 바꾸셔도 돼요
c 생성자를 올바르게 사용하기만
하면 돼요
C를 사용하는 법을 배우세요
네 프로그램이 조정되고 잘 조직되고 유지하기 쉽고
품질 코드가 잘 되어 있는 한 제가 걱정하는 것은 그겁니다
네 그걸 구현할 방법은 단 한 가지예요 10개의 요소가 있는 단차원
배열로 보드를 표현하는 거죠
여기 10개의 요소가 있는 이유는 당신이 0을 쓰지 않았으면 해서예요
네 이 열 가지 요소는 보드를 나타내지만
보드의 좌표도 나타낼 거예요
이걸 데모로 보여드리고 제가 어떻게 작업할지 보여드릴게요
네 하지만 여러분이 그리고 싶은
박스를 고르는 방법은 요소 번호를 기반으로 할 겁니다
네 보드를 위한 배열을 만드는 것 외에도 이 문제를 어떻게 분해할 것인지 어떻게
정리할 것인지 생각해봐야 합니다, 어떻게 할 것인지요
네 제 생각에는 최소한 3개의 함수가 필요할
것 같은데요 더 필요할 수도 있고요
하지만 적어도 승자를 확인하는 기능은 있어야죠
네 이건 기본적으로 누가 게임에서 이겼는지 확인하거나
무승부를 체크할 수도 있어요
보드를 뽑는 기능이 있어야 해요
선수들 차례가 끝날 때마다 보드를 그려야 하니까요
이걸 재사용할 거예요
네 칠판에 표시하는 기능도 있어요
사용자가 특정 상자에 x나 o를 넣길 원할 때 발생하죠
x나 o로 시작하는 기능이 필요해요
x 혹은 o로 배열을 채울 거예요
그럼 승패를 가늠할 수 있어요
점수판에 잘못된 선택이 있는지도 확인할
수 있어야 해요
유효한 선택이 1부터 9까지고 사용자가 10을 입력하면 여러분은
이러겠죠 이봐요, 그렇게 할 수 없어요 다시 하세요
맞습니다. 이 게임은 사용자 친화적이어야 합니다. 사용자 관점에서
직관적으로 사용할 수 있어야 하고 프로그래밍 관점에서 조직화
되어야 하죠.
잘 생각해 보세요
네 계획도 세우고요 계획도 세우고요 서류도 꺼내고 계획도 세우고요 이 문제를 어떻게 해결할 것인지 어떤 함수를
사용할 것인지에 대한 디자인을 작성해야 합니다
제가 생각하는 건 이게 실행되는 방식이에요
데모를 보여드리죠
네 네 소스 코드는 보여드리지 않겠지만 게임을 실행하면
이런 모습이 될 거예요
제목을 게임이라고 하는 건 어때요?
플레이어에 대한 약간의 정보도 있어요
플레이어 1은 x가 되고 플레이어 2는 o가 되죠
컴퓨터를 할 필요는 없어요
턴 하나하나에 넣으면 돼요
네 그래서 옆에 앉은 친구와 이 게임을 해야 해요 그 친구가
번호를 어디에 적을지 말해줘야 하죠
욕심이 너무 과하면 컴퓨터를 상대로
할 수 있는 게임을 만들 수 있어요
하지만 3 x 3grid에는 처음에 숫자가 있는 게 보이실 거예요
이 번호로 입력하면 돼요
네 플레이어 1이 자기 차례를 맞이하고 x를 나타낸다면
입력하는 숫자에 따라 x가 놓일 위치가 결정되죠
네 그리드를 프린트하고 보드를 표시한 다음 사용자에게
차례를 알려주고 숫자를 입력하라고 해요
이번엔 2번을 입력하고 반환을 누를게요
2를 누르고 반환하면 어떤 일이 일어날까요?
실제로 누가 이겼는지 볼 거예요 화면을 지우고 보드를 다시
그릴 거예요
2를 누르고 엔터를 누른 후에도 타이틀이 있는 게 보이실 거예요 플레이어
1과 플레이어 2가 남았어요
2번 상자에는 x가 있어요
네 또 뭘 했어야 할까요? 승패가 났는지
안 났는지 전광판에 띄우기 전에 확인했어야 했는데
첫 도착지라 둘 다 없어요
네 네 아직 승자도 무승부도 없으니 플레이어에게
숫자를 입력하라고 할 거예요 그럼 여기서 아무 숫자나 고를 수 있죠
10처럼 무효인 숫자를 입력하면 무효란 걸 알려줘야
해요
그럼 다음 단계로 넘어갈 수 있을 거예요
2라고 입력하면 2도 무효가 될 수 있어요
2를 입력하면 x가 이미 2를 차지했다고 나오죠
네 프로그램이 재시험을 허락하면 순서를 바꿀 수 있지만
그건 불공평하죠
이제 어디에 o를 둘까요? 네 5라고 입력하고
무효화 이동이라고 입력하죠 보드를 다시 그릴
거예요 O와 5가 있네요
플레이어 1이라고 나오네요
승자나 무승부가 날 때까지 계속하는 거예요
그냥 9라고 할게요
x가 나왔네요 유효성 검사는 1-3-4-6-7과 8이에요
3으로 할게요
X가 이기도록 X가 이기도록 해보죠 이제 x는 8로 가고 o와 6을
입력할게요 게임이 승자와 함께 잘 돌아간다는 걸 보여드리려고요
엑스게임에 7을 넣었으니 이제 게임 끝이죠 리턴 키를 눌렀어요
1번 플레이어 승 1번 플레이어 승이라고 적혀 있고 저한테 소리도 들려줬어요
내가 좀 멋지게 꾸몄지
1번 플레이어가 이겼어요
플레이어 2가 이기거나 무승부가 돼도 그래야 하고요
이 문제를 어떻게 해결할지 생각해 보세요
멋진 프로그램이죠
솔루션에 대해 알아보고 소스 코드를 제공하는 건 다음 강의에서 할게요 고마워요