* 행맨 게임 - C프로그램설계(2학년 1학기) 2차 설계 과제
* 사용 언어 : C
* 개발 환경 : Linux / vi editor
* 개발 인원 : 1
: 텍스트 모드로 동작하는 행맨 게임을 제작한다. 임의의 하나의 단어를 선택하여 그 길이만큼 화면에 밑줄로 표시한다. 사용자가 하나의 영문자를 입력할 때마다 숨겨진 단어에 그 문자가 포함되어 있는지를 확인한다. 포함되어 있으면 그 문자를 보여주고, 포함되어 있지 않으면 실패 횟수를 증가시킨다. 실패 횟수 12번이 되기 전에 단어를 맞추면 게임에서 이기게 되고, 12번 이내에 맞추지 못하면 게임에서 지게 된다.

-. 사용자는 “실행파일명 사전파일명 사용자정보파일명”을 입력하여 프로그램을 구동한다.
-. 사용자는 본인 이름을 입력하여, 본인의 게임 정보를 load한다.
* 등록한 적이 없는 사용자인 경우에는 새로운 사용자로 등록한다.
* 등록된 적이 있으면 사용자의 게임 정보를 load한다.
* 사용자 입력 메뉴에 따라 프로그램을 실행한다.
* 사용자가 게임 시작을 선택하면 행맨 게임을 시작한다.
-. 게임 진행
-. 이전 게임 점수 보기를 선택하면, 지금 실행하고 있는 프로그램 이전의 승패를 보인다.
-. 현재 게임 점수 보기를 선택하면, 지금 실행하고 있는 상황에서의 승패를 보인다.
-. 사용자가 현재 등수 보기를 선택하면, 지금 실행하고 있는 프로그램 이전의 전체 사용자의 등수를 승률 기준으로 정렬하여
보인다. 같은 승률을 가지는 사람이 존재하는 경우 같은 등수를 출력한다. 예를 들어 “1등 2등 2등 4등”의 형식으로 출력해
야 한다. 승률 값 출력에서는 소수점 세 자리에서 반올림한 소수점 두 자리를 출력한다.
-. 사용자가 “저장 후 종료”를 선택하면, 현재의 게임 결과를 사용자 정보 파일에 저장한다.
-. 사용자가 “저장하지 않고 종료”를 선택하면 저장하지 않고 바로 프로그램을 종료한다.
-. 사용자 정보 파일을 읽어 사용자 이름과 게임 전적 정보를 저장하는 struct형 배열을 구성한다.
* 전체 사용자 정보가 하나의 파일에 저장되어야 한다.
* 사용자 이름은 고정 길이의 배열으로 선언하고 선언한 길이 이상의 사용자 이름이 들어오면 다시 입력 받도록 한다.
* 새로운 사용자가 등록되면 그 정보를 struct 배열에 저장하고, 프로그램 종료시에 배열의 내용을 사용자 정보 파일에도
기록하여 새로운 사용자 정보가 지속적으로 남도록 한다.
* 파일에서 읽으면서 사용자 정보를 승률 순으로 정렬하여 유지한다.
* 사용자 정보는 사용자의 가변성을 고려하여 linked list로 구성한다.
배열을 이용할 시 항상 신경써야할 부분이면서 over indexing에 대해서 따로 처리를 하지 않았었는데 이번에 파일에서 읽어올 때 본인이 정해놓은 배열보다 큰 사전이나 사용자 이름이 들어오는 test case가 발생하였다. 그래서 배열의 사용하는 부분에는 최대 크기를 넘어가게 될 경우 넘어가지 않은 만큼만 받거나, 생략하고 건너뛰게 처리를 해주었다. 파일 입.출력 시 파일의 형식과 프로그램 간에 발생할 수 있는 예외를 신경 쓰느라 많은 시간을 지체하게 되었다. 파일의 형식을 지키지 않는 파일에 대해서는 별다른 장치를 두지 않았고, 사실 그런 예외를 모두 처리하기란 어렵다는 판단이고 처리한다고 해도 투자한 만큼의 성과를 거두기 쉽지 않을 듯 했다. UI에 손을 좀 대면 콘솔 모드에서 손색없을 행맨 게임이 될 것 같다.


