인프런 커뮤니티 질문&답변

그렇구나아하님의 프로필 이미지
그렇구나아하

작성한 질문수

Swift 언어로 만드는 고스톱 게임

다른 종류의 카드가 겹치는 경우와 뒤집는 부분에 카드가 가로 막으면서 오류나는 경우 어디를 수정해야 할지 질문드립니다.

작성

·

320

1

안녕하세요.
좋은 강의 감사드립니다.
아주 세심하게 강의를 해 주시다 보니 어느 덧 끝까지 와 버렸는데 너무 양이 많다 보니 다음 2가지 오류를 제가 어디에서 해결해야 할지 몰라 문의드립니다.

첫째는 아래 사진과 같이 서로 다른 종류가 겹치고 있는데 어느 부분을 찾아 수정해야 할지 몰라 문의드립니다. 

둘째는 뒤집는 부분이 겹쳐지고 다른 카드가 크게 나나타면서 보이지 않게 되고 에러가 납니다.

위 2갸지 어디 부분을 수정해야 할 지 몰라서 문의드립니다.
다시 한번 좋은 강의 감사드립니다.

답변 5

0

쎄뮤님의 프로필 이미지
쎄뮤
지식공유자

안녕하세요,

카드가 중복되는 문제는 해결을 하였습니다. 아래와 같이 코드를 수정해 주시면 해결이 되십니다. 

두번째 문제의 경우 특정조건이 연출되지 않아서 어느 부분이 문제인지 정확하게 접근하지 못하였는데요, 정황상 "나가리"의 상황이 아닌가 의심이 됩니다. 나가리는 플레이어나 컴퓨터 모두 승리를 못한 채로 게임이 종료된 상황인데, 아주 간혹 가다가 이런 상황이 발생되는 듯 합니다. 이 부분도 일단 수정은 하였는데, 제대로 작동할지는 맞는 조건이 발생되지 않아서 정확한 검증이 안되었습니다. 그래도 일단 수정된 부분 안내해 드립니다.

--카드 중복되는 부분 수정--

-- 마지막에 게임이 종료되지 못하는 부분 수정 --

0

명 강의에 친절하신 답변 너무나 감사합니다.
몇몇 강의를 들었고 질문을 남겼지만 구체적이고 빠른 답변은 처음이라  감사한 마음입니다.
첫번째 말씀하신 부분은 강의하실 때 내용과 같아 변화가 없습니다.
강의 들으면서 계속 보여 캡쳐한 것이 몇개 있었는데 오늘 2시간 동안 어떤 상황의 오류인지 확인해 보기 위해 계속 실행해 보았지만 질의한 상황은 1번 밖에 안나와서 정확한 말씀 못드리겠습니다.

코드 확인해 보겠습니다.

감사합니다. 

0

쎄뮤님의 프로필 이미지
쎄뮤
지식공유자

안녕하세요,

첫번째 문제는 이렇게 한번 수정해 보세요. Variable 에 xValue 의 값을 이렇게 수정해 주시면 해결이 될듯 합니다.

두번째 문제의 경우 평상시엔 에러가 안나는데 특정 상황에서만 에러가 발생되는 것이지요?

아마 "보너스카드"라던가 "히든카드" ,"폭탄" 등을 사용하여 예외적인 상황이 연출되었을 경우 발생되는 것으로 보여지는데요.

지금도 첨부해주신 사진을 보면 바닥에 보너스 카드가 이미 2장이 다 나와있는 상황인데 또 보너스 카드가 나온것으로 체크가 되어 에러가 발생된것으로 보입니다.

음.. placeCard 쪽의 문제인것 같은데 보너스카드와 히든카드 등 이벤트가 발생되었을 때 카드를 제대로 주고 받는지(바닥에 placeCard쪽으로 잘 들어가는지 혹은 컴퓨터카드 쪽으로 잘 들어가는지 ) 체크를 해보셔야 할 것 같습니다.

저도 제강의 중 어느곳을 봐야한다라고 정확하게 말씀 드리기 어렵네요^^;

제가 알려드린대로 코드 작성을 하셨다면 아마 저도 특정 조건이 연출되지 않아서 발생이 안되었을수도 있겠네요.

메일주소 알려주시면 제가 작성한 코드 보내드리도록 하겠습니다. 비교 하시면서 어느곳이 잘못 되었는지 비교 한번 해보세요.

저와 코드가 동일하다면 특정상황에서만 오류가 발생되어 아마 제가 오류를 인지하지 못하고 있었을 가능성이 있습니다.

0

빠른 답변 감사드립니다.
말씀하신대로 몇가지 상황은 해결했는데 양이 워낙 많다 보니 자체 해결을 못하고 2가지 질문을 드렸네요. 다시 한번 찾아 보겠습니다.
계속해서 어떤 상황에서 생기는 상황인지 정확히 파악할려고 실행하는데 똑같은 에러 상황 찾기가 쉽지 않네요.

그런데 2번째 질문은 카드가 갑자기 나와서 넘기는 부분을 덮어버려 계속 카드가 넘겨지고 있는 상황은 게임 끝까지 이루어지고 있어서 당황스럽습니다. 그렇다고 덮고 있는 카드가 짝이 맞는 것이 나와 없어 지는 상황은 아니라 해결할려면 강의하신 강의 중 몇번째 강의 내용을 다시 봐야 할지 궁금하네요.
2번째 답변하신 상황 중 사람은 마지막 카드까지 모두 했고 컴퓨터 차례인 것 같은데 마지막에 진행이 안되는 상황이 있긴 있었는데 그것은 질문을 못 드렸네요. 
확실히 장기 강의가 그나마 수월했던 것 같습니다. 2강의 모두 훌륭하신데 이번 것은 너무 분량이 방대해서 해결이 더 어려운 것 같습니다.

감사합니다.

0

쎄뮤님의 프로필 이미지
쎄뮤
지식공유자

안녕하세요,

짧지 않는 강의 내용이였는데 끝까지 완주 하셨네요. 축하드립니다!

일단,  정확한 문제가 무엇인지는 코드를 봐야 알겠지만 대략 짐작가는 상황을 말씀드리겠습니다.

첫번째 문제는 바닥에 있는 카드의 위치값과 카드를 뒤집어서 위치하고자 하는 위치값이 다르기 때문에 발생되는 문제인데요.

자세히 보시면 위치값이 CGFloat타입으로 되어있어서 수숫점 단위로 아주 미세하게 달라지는 현상이 발생됩니다. 따라서 CGFloat으로 되어있는 위치값을 Int 형으로 형 변환 해주시면 문제가 해결될거에요.

두번째 문제는 대략 짐작컨데 마지막 카드를 뒤집었을때 에러가 나는듯 보이는데요,

바닥에 더이상 뒤집을 카드가 없기때문에 발생된것으로 보입니다.  따라서 마지막 카드의 경우 뒤집는 행위를 예외처리를 해주시면 문제가 해결될것으로 보입니다.

문제 해결을 위해 한번 고민해 보세요. 어떻게 해결하지 하고 고민하는 시간이야 말로 프로그래머로써 최고의 축복된 시간 아니겠습니까?^^;

충분히 고민해보시고 해결이 정 안되시면 코드리뷰를 통해 문제점을 찾아드리겠습니다.

감사합니다.

그렇구나아하님의 프로필 이미지
그렇구나아하

작성한 질문수

질문하기