lja3723/project-OmokConsole
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
이 문서는 오목 프로그램 개요, 인터페이스 및 기능, 소스 파일을 설명한 기술 문서이다.
==========================================================================================
1. 프로그램 개요
두 명의 사용자가 오목을 두는 프로그램
==========================================================================================
2. 프로그램 인터페이스(기능)
2.1. 오목판
오목판은 점과 선으로 이루어진 오목판과 오목판의 좌표, 커서, 착수된 오목알로 이루어진다.
오목판의 크기는 레귤러(15×15), 점보(19×19) 두 가지가 있다.
2.1.1. 선으로 이루어진 오목판과 오목판의 좌표
선으로 이루어진 오목판과 오목판의 좌표의 예시다.
오목판의 선을 이루는 문자(┌ ┬ ┐ └ ┴ ┘ ├ ─ ┤)는 'ㅂ'을 누르고 한자 키를 누르면 입력할 수 있고,
점 문자(·)는 'ㄱ' 을 누르고 한자키를 누르면 입력할 수 있다.
오목판의 좌표는 알파벳과 숫자로 이루어져 있다.
알파벳은 행의 위치를 나타내고, 숫자는 열의 위치를 나타낸다.
행의 위치는 A부터 시작하고, 열의 위치는 1부터 시작한다.
example(레귤러)
1 5 10 15
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
D ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
H ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
I ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
J ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
example(점보)
1 5 10 15 19
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
D ├─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
H ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
I ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
J ├─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
N ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P ├─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┼─┼─┼─·─┼─┼─┤
Q ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
R ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
S └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
------------------------------------
2.1.2. 커서
오목알을 착수할 위치는 키보드(WASD 또는 방향키)를 통해 커서를 옮겨 선택할 수 있다.
커서를 표현하는 문자는 흑의 차례는 ◐, 백의 차례는 ◑으로 한다.
이 문자는 'ㅁ'을 누르고 한자키를 눌러 입력할 수 있다.
example(레귤러-흑의 차례)
1 5 10 15
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
D ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─┼─┼─┼─┼─┼─□─┼─┼─┼─┼─┤
H ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
I ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
J ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
------------------------------------
2.1.3. 착수된 오목알
커서를 옮긴 후 엔터키나 스페이스 바를 눌러 오목알을 착수할 수 있다.
착수된 오목알은 ●(흑색) 과 ○(백색) 으로 표시한다. 이 문자는 'ㅁ'키를 누르고
한자키를 눌러 입력할 수 있다.
example
1 5 10 15
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
D ├─┼─┼─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─○─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─┼─●─●─○─┼─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─┼─┼─○─●─┼─┼─┼─┼─┼─┼─┤
H ├─┼─·─┼─┼─○─○─●─●─┼─┼─┼─·─┼─┤
I ├─┼─┼─┼─●─●─○─○─○─○─┼─┼─┼─┼─┤
J ├─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
------------------------------------
2.2. 오목 진행 알리미
오목 진행상황을 알려주는 두 줄짜리 글씨다.
누가 오목을 두는지, 착수를 시도한 위치가 불가능한지(33, 44), 커서의 위치가 어디인지를 알려준다.
왼쪽에는 오목을 두는 차례, 오른쪽에는 커서의 위치, 착수 가능 여부는 한줄 아래 가운데에 표시하며,
오목 진행 알리미는 오목판 위에 표시한다. 다음은 예시다.
example
[●의 차례] [I11]
(착수불가여부 표시위치)
1 5 10 15
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
D ├─┼─┼─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─○─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─┼─●─●─○─┼─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─┼─┼─○─●─┼─┼─┼─┼─┼─┼─┤
H ├─┼─·─┼─┼─○─○─●─●─┼─┼─┼─·─┼─┤
I ├─┼─┼─┼─●─●─○─○─○─○─□─┼─┼─┼─┤
J ├─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
------------------------------------
2.3. 게임 종료
흑과 백 두 플레이어중 먼저 5개의 돌을 놓는 사람이 승리한다.
examples
[●의 차례] [I11]
(착수불가여부 표시위치)
1 5 10 15
A ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
B ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
C ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
D ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
E ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
F ├─┼─┼─┼─●─●─●─●─●─┼─┼─┼─┼─┼─┤
G ├─┼─┼─┼─○─○─○─○─┼─┼─┼─┼─┼─┼─┤
H ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
I ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
J ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
K ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
L ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
M ├─┼─·─┼─┼─┼─┼─·─┼─┼─┼─┼─·─┼─┤
O ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
P └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
[게임 결과]
● 의 승리!
○ 의 패배...
==========================================================================================
3. 소스 파일 설명
3.1. omokobj.c / omokobj.h
오목 프로그램에서 사용되는 모든 객체(구조체)를 정의
[객체 종류]
설명 이름 멤버 설명
좌표정보 객체 : OmokCoord 행과 열 정보
오목알 타입 열거형 : StoneType 오목알 종류
커서 객체 : OmokCursor 오목알 정보, 좌표정보
오목알 객체 : Stone 오목알 정보, 좌표정보
오목알 노드 : StoneNode 오목알 저장 객체의 구성 객체
오목알 저장 객체 : StoneStorage 연결 리스트 사용한 구현
오목판 타입 열거형 : OmokPanelType 오목판 종류
오목판 객체 : OmokPanel 오목판 크기, 오목알 저장 객체
게임 진행 현황 객체 : OmokStatus 착수 차례, 착수 회수, 착수 좌표정보
통합 객체 : Omok 커서, 오목판, 게임 진행 현황 객체
3.2. omokobj_manage.c / omokobj_manage.h
오목 프로그램 객체를 관리(설정, 생성, 변환, 제거 등)하는 함수 선언 및 구현
3.3. omokobj_judge.c / omokobj_judge.h
오목 프로그램 객체가 특정 조건을 만족하는지 판단하는 함수 선언 및 구현
3.4. omokobj_conio.c / omokobj_conio.h
자연스러운 콘솔 출력에 필요한 Windows.h 함수를 정의한 뒤
오목 프로그램 객체를 콘솔에 출력하는 함수 선언 및 구현
3.5. omok_algorithm.c / omok_algorithm.h
오목 규칙(33, 44) 준수여부, 승패 여부 등을 판단하는 함수 선언 및 구현
3.6. omok.c / omok.h
오목 프로그램을 실행 및 종료하고, 오목 관련 함수를 이용해 오목 게임을 실제로 구현하는
함수 선언 및 구현
3.7. omok_err.c / omok_err.h
오목 프로그램 실행 중 발생하는 에러를 관리하는 함수 선언 및 구현
3.8. main.c
오목 실행 함수를 호출하는 메인 함수
==========================================================================================
4. 기타
다음은 함수(또는 구조체)에 대해 서술할 때 사용하는 주석 양식임
/**
*
* @brief : 함수(구조체)에 대한 간단한 설명
* @details : 함수(구조체)에 대한 자세한 설명
* @param : 함수의 매개 변수 설명
* @param : 함수 매개변수 수에 따라 @param을 여러 개 적을 수 있음
* @return : 함수의 리턴값 설명
*
* @author : 저작권자(함수(구조체) 작성한 사람)
* @date : 함수 작성 날짜 (예: 2020-00-00 13:20)
* @version : 함수 버전 (예: 0.0.1)
*
*/
이런 양식 doxygen 주석이라 하며, 자세한 정보는 다음 사이트를 참고바람
https://onecellboy.tistory.com/342
https://gamemyth.tistory.com/entry/Doxygen-%EC%A3%BC%EC%84%9D-%EC%82%AC%EC%9A%A9%EB%B2%95
doxygen 주석 양식(아래를 복사해 사용)
/**
*
* @brief
* @details
*
* @param
* @return
*
* @author
* @date
* @version
*
*/