본문 바로가기

Archived(CSE)/시스템 프로그래밍

Team project. 산성비(한컴타자연습) cover 게임 구현

참조

1) https://m.blog.naver.com/PostView.nhn?blogId=lime94&logNo=220916520534&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

2) http://janghw.tistory.com/entry/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%80%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-4


설계



다음과 같은 헤더 파일과 curse 라이브러리, pthread 라이브러리, 그리고 다음과 같은 기본적인 틀의 함수들과 그 외에 추가적으로 모드를 적용할 함수들로 나뉘게 되었다. 먼저 우리가 출력할 단어들을 어떠한 자료구조로 표현하는 것이 적절할까에 대해서 많은 고민이 있었는데, 이는 연결리스트로 표현하는 것이 가장 적절하다고 판단하였다. 구조체 연결리스트로 표현을 해야 단어의 현재 row, col의 위치를 계속 저장할 수 있고 또한 다음 단계(level)로 넘어갈 때 삭제해주기가 쉬웠다. 그리고 배열과 같은 형태처럼 공간 낭비가 있지도 않기에 연결리스트로 표현하는 것이 가장 적절하다고 판단하였다.


그리고 스레드를 활용하게 된 것은 사용자의 입력을 처리하는 curse 스크린과 문자열을 출력할 curse 스크린이 동시에 따로 동작이 되어야 사용자의 입력을 처리하기 위해 curse 스크린이 멈추는 것을 방지할 수 있기에 다음과 같이 스레드를 따로 빼서 정리할 수 있도록 설계를 하였다. 그리고 단어를 입력하면 해당 노드 포인터를 삭제하는 형태가 아닌 해당 노드 포인터의 문자열만 빈 문자열로 바꿔줘서 출력이 제대로 이뤄지지 않게 하고 단계(level)이 종료되거나 게임이 종료될 때 한 번에 비우는 것이 시스템 접근 시간 면에서나 디버깅 면에서 여러 모로 효율적이라고 판단하여 그렇게 설계하였다. 또 어떤 문자열을 출력할 지 또한 어떠한 위치에 출력할 지에 대해서는 srandtime 값을 인자로 줘서 실제 난수와 같은 형태로 하여서 임의의 문자열과 임의의 위치를 선정할 수 있도록 처리하고자 하였다.




구현


https://github.com/YoonShinWoong/typingGame



구현은 기본적으로 기존에 오픈소스로 제공되어 있던 산성비 게임 소스코드의 구성을 참조하여 이를 우리가 보고 우리가 편한 방식으로 구현하는 것으로 하였다

구현 진행은 개인 컴퓨터로 구현을 하여 깃 원격 저장소를 통해서 코드를 관리하고 병합하기로 하는 것을 원칙으로 하였다. 구현은 처음 나눴던 역할 분담에 맡게 수행하기로 하였고 변수들과 같은 기본적인 틀은 윤신웅 구성원이 먼저 제공하면 이에 맞춰서 구성원들이 함께 병합해나가기로 하였다. 깃 원격 저장소를 활용하는 것이 익숙치 않아서 시간이 다소 소요되었지만 그럼에도 불구하고 설계된 내용을 기반으로 구현을 진행하였기에 구현은 크게 어렵지 않았다