사천성
공동구현:최상희, 황세윤
jsp서버 없이 테스트시 아이디와 비밀번호를 test로 입력. 외부 라이브러리 오류 발생시 '프로젝트경로\src\lib'를 수동으로 잡아주기.
MVC 클래스 내 핵심 메소드 역할
a. CController
-
intro() [구현 : 황세윤] : JFrame을 설정하고, Intro화면을 부르고, 게임에 필요한 사운드를 로드한다.
-
startStage(int stage) [구현 : 최상희] : 선택한 스테이지가 몇 스테이지인지 멤버변수를 세팅하고, 해당 스테이지의 맵을 불러온다.
-
timeControl() [구현 : 황세윤] : 게임 제한시간을 카운트한다. GameTimerTask 클래스를 호출하여 카운팅을 시작한다.
-
GameTimerTask -> run() [cController 내부 클래스] [구현 : 황세윤] : 본 메소드는 제한시간이 흐름에 따라 필요한 처리를 한다. 매초 감소와 7초가 남았을 때는 경고음을 재생한다. 특히, 0초가 됐을 때의 처리가 주요사항이다. 일반모드와 모의고사 모드의 경우의 처리가 다른데, 모의고사 모드의 경우 0초가 됐을 시에 점수를 DB로 전송한다. 그리고 각 모드에 맞는 그래픽 효과를 호출한다.
-
actionPerformed(ActionEvent) [마우스로 버튼 클릭 시 호출] [공동 구현]
- 선택한 두 카드의 x,y 좌표를 Data 쪽으로 넘겨서 두 카드가 제거가 가능한지 확인하는 메소드를 호출한다.
- 남은 카드의 개수가 0개가 되면, 클리어 효과를 준다.
- 카드 선택 시 기타 필요한 효과들을 호출한다.
- 기타 조건에 따른 예외처리를 한다.
- clearCard(int x, int y, int x2, int y2) [공동 구현] : 선택한 두 카드가 제거가 가능한 경우에 호출되며, 두 카드를 제거한다.
- 5, 10 콤보마다 ‘망치’아이템을 사용할 수 있게 해주는데, 원활한 진행을 위한 조건 처리를 한다.
- 모의고사 모드의 경우 점수 산출을 위해 콤보나 제거한 카드 수 등의 카운팅이 필요한데 이때 필요한 메소드를 호출한다.
-
timeAttackCounting(int mode) [구현 : 황세윤] : mode는 카운팅이 필요한 항목을 의미한다. 0의 경우 제거한 카드 쌍을 세고, 1은 5콤보의 횟수, 2는 10콤보의 횟수 그리고 3은 아이템 사용횟수를 카운팅한다. 해당 메소드는 모의고사 모드에서만 사용된다.
-
timeResume() [구현 : 황세윤] : 게임진행 도중에 ‘ESC’키를 누르게되면 일시정지 이벤트를 발생하는데, 그 후에 다시 게임을 재게하는 경우 제한시간 카운팅이 재작동하게 하는 메소드다.
-
stageClear() [구현 : 최상희] : 스테이지 클리어시 호출되는 메소드로 서버에 스테이지를 몇탄까지 깼는지 업데이트한다.
-
기타 여러 get, set 메소드
b-1. CData
-
int getTime() [구현 : 최상희] : 몇 초가 남았는지 리턴해준다.
-
void setTime(int time) [구현 : 최상희] : 남은 시간을 설정한다.
-
void addCombo() [구현 : 최상희] : 콤보를 하나 추가한다. ComboTimerTask 클래스를 생성하여 2초내로 addCombo 메소드가 호출될 경우 콤보를 추가해준다. 2초가 지날 경우 콤보는 0으로 초기화.
-
ComboTimerTask [cData 내부 클래스] [구현 : 최상희] : 콤보를 0으로 초기화해주는 Task.
-
int getCombo() [구현 : 최상희] : 현재 콤보가 몇인지 리턴한다.
-
boolean checkItem3() [구현 : 최상희] : 아이템3 활성화 여부를 확인한다.
-
void setItem(boolean temp) [구현 : 최상희] : 아이템3 활성화 여부를 설정한다.
-
int[][] getMap() [구현 : 최상희] : 2차원배열 맵 전체를 리턴해준다.
-
int getPosData(int x, int y) [구현 : 최상희] : (x,y)에 해당하는 맵값을 리턴해준다.
-
void setPosData(int x, int y, int value) [구현 : 최상희] : (x,y)에 해당하는 맵값을 설정해준다.
-
int[][] newMap() [구현 : 최상희] : 새로운 맵을 만들어서 리턴해준다.
-
void mixMap(int target[][]) [구현 : 최상희] : 맵을 섞어준다.
-
boolean isCorrect(int x, int y, int x2, int y2, int card) [구현 : 최상희] : 맵에서 (x,y) (x2,y2) 두 개의 좌표에 해당하는 값이 같고 두번이내로 꺽이면서 연결되는지 확인한다. (연결여부는 dfs 메소드를 통해 확인한다.
-
Path[] getPathData() [구현 : 최상희] : 지나간 경로 정보를 리턴해준다.
-
int getPathMax() [구현 : 최상희] : 지나간 경로의 길이를 리턴해준다.
-
void addDirection() [구현 : 최상희] : 경로 정보를 Path배열에 입력해준다.
-
void dfs(int x, int y, int x2, int y2, int direction, int corner_count) [구현 : 최상희]
: 재귀 호출을 통해 막혀 있지않은 모든 경로를 탐색하는 메소드입니다. 만약 2번을 초과하여 꺾일경우 해당 경로는 더이상 탐색을 진행하지않으며 (x,y), (x2,y2) 두 좌표가 같을경우 제거 가능한 카드로 판단, 모든 메소드들은 탐색을 중지합니다. 백트래킹 알고리즘이 적용. -
int totalCard() [구현 : 최상희] : 맵에 남아있는 전체 카드수를 리턴해준다.
-
Path[] hint() [구현 : 최상희] : 정답가능한 패중 무작위로 한쌍을 선택하여 리턴해준다.
-
int totalPossible() [구현 : 최상희] : 현재 상태에서 가능한 총 정답수를 리턴해준다. (dfs2 메소드 활용)
-
Path deleteCardLikeThis(int _x, int _y) [구현 : 최상희]
: (_x, _y)와 같은 종류의 카드중 하나의 좌표를 랜덤하게 리턴해준다. -
void dfs2(int x, int y, int direction, int corner_count, int target) [구현 : 최상희]
: dfs와 유사하나 총 정답수를 확인하는 것에 최적화 되어있다.
b-2. Map [CData 내부 클래스]
-
calculateScore() [구현 : 황세윤] : 제거한 카드 쌍, 총 콤보 횟수, 5콤보 횟수, 10콤보 횟수, 아이템 사용 횟수를 통해서 모의고사 모드에서 필요한 점수를 산정해주는 메소드다.
-
addClearCard() [구현 : 황세윤] : 카드 한 쌍 제거 할 때마다 카운팅 해주는 메소드다.
-
addCombo5() [구현 : 황세윤] : 5콤보 달성 할 때마다 카운팅 해주는 메소드다.
-
addCombo10() [구현 : 황세윤] : 10콤보 달성 할 때마다 카운팅 해주는 메소드다.
-
addUseItem() [구현 : 황세윤] : 아이템 1회 사용 할 때마다 카운팅 해주는 메소스다.
c. CView
-
disableButton() [구현 : 최상희] : 게임 종료 시 카드가 클릭되지 않게 한다.
-
enableButton() [구현 : 최상희] : 게임 시작 시 카드가 클릭되게 한다.
-
clearButton() [구현 : 최상희] : 화면상의 버튼 두 개를 삭제한다. controller의 clearCard()에서 호출한다.
-
comboEffect(int combo) [구현 : 황세윤] : 각 콤보에 맞는 효과를 패널에 올려준다.
-
requestFoc() [구현 : 최상희] : 프레임에 포커스가 맞도록 한다.
-
SoundLoad() [구현 : 황세윤] : 게임에 필요한 Sound를 로드해서 HashTable에 저장한다.
-
warningControl(boolean mode) [구현 : 황세윤] : 제한시간이 7초 이하가 되면, 경고음을 재생한다. true인 경우 재생하고 false인 경우 멈춘다.
-
timeoverPlay() [구현 : 황세윤] : 타임오버의 경우 필요한 사운드를 재생한다.
-
failedDraw() [구현 : 황세윤] : 게임 클리어를 실패한 경우 Failed 이미지를 출력한다.
-
failBgmPlay() [구현 : 황세윤] : 게임 클리어를 실패할 경우 필요한 사운드를 재생한다.
-
clearPlay() [구현 : 황세윤] : 게임 클리어시 필요한 사운드를 재생한다.
-
hintPlay() [구현 : 황세윤] : 힌트 아이템 사용 시 효과음을 재생한다.
-
shufflePlay() [구현 : 황세윤] : 뒤섞기 아이템 사용 시 효과음을 재생한다.
-
hammerPlay() [구현 : 황세윤] : 망치 아이템 사용 시 효과음을 재생한다.
-
errorPlay() [구현 : 황세윤] : 선택한 두 카드가 제거 불가능한 경우일 때 재생한다.
-
setRemainCardHud() [구현 : 황세윤] : HUD 상에 출력되는 ‘남은 카드 수’, ‘제거 가능 카드 수’를 Set 한다.
-
setRemainTimeHud() [구현 : 황세윤] : HUD 상에 출력되는 ‘남은 시간’을 Set 한다.
-
setRemainItemHud() [구현 : 황세윤] : HUD 상에 출력되는 남은 아이템 개수를 Set 한다.
-
frameSetting() [구현 : 황세윤] : JFrame을 생성한다.
-
setStageSelectPage() [구현 : 황세윤] : 스테이지 선택 화면을 세팅한다. 1~5단원의 버튼과 모의고사 모드의 버튼이 깔리고, DB상에 로그인 한 ID의 스테이지 진행 상황에 따라 버튼의 활성화와 비활성화를 결정한다.
-
setIntro() [구현 : 황세윤] : Intro 화면을 세팅한다. 게임시작, 순위보기, 로그인, 회원가입의 버튼을 추가하고 로그인과 회원가입 시 필요한 서버 통신이 이루어진다.
-
setMenu() [구현 : 황세윤] : 게임 진행 중에 ‘ESC’ 키를 입력 시 일시정지 메뉴를 띄워주는 메소드다. 돌아가기(게임재개), 단원선택(스테이지선택화면), 책 던지기(프로그램종료) 버튼을 추가했다.
-
selectEffect(int x, int y, int map[][]) [구현 : 황세윤] : 카드 선택 시 발생하는 테두리 효과를 출력한다.
-
deselectEffect(int x, int y, int map[][]) [구현 : 황세윤] : 선택한 두 카드가 제거가 불가능한 경우 selectEffect를 해제 한다.
-
hintEffect(int x, int y, int map[][]) [구현 : 황세윤] : 힌트 아이템 사용 시 제거 가능한 두 카드에 빨간색 테두리를 출력한다.
-
pathEffect(Path[] pathData, int pathMax) [구현 : 황세윤] : 알고리즘 상으로 두 카드가 제거가 가능하게된 경로를 따라서 경로 이미지를 출력한다.
-
openDraw() [구현 : 황세윤] : 게임시작 버튼 클릭 시 DoorOpenAnimation을 출력한다.
-
comboSound(int combo) [구현 : 황세윤] : 각 콤보에 맞는 사운드를 재생하며, 빠르게 카드를 제거한 경우 사운드 재생이 생략되는 것을 방지하였다.
-
scoreDraw(int score) [구현 : 황세윤] : 모의고사 모드에서 게임이 끝난 뒤에 플레이어가 달성한 점수와 이미지를 출력한다.
-
failedDraw() [구현 : 황세윤] : 1~5단원에서 제한시간 내에 모든 카드를 제거하지 못하면 ‘실패’ 애니메이션을 출력한다.
-
clearDraw() [구현 : 황세윤] : 1~5단원에서 제한시간 내에 모든 카드를 제거한 경우 ‘성공’ 애니메이션을 출력한다.
-
viewClear() [구현 : 황세윤] : 최초 플레이가 아닌 순환 게임 재생 시 원할한 View 작동을 위해 일정 부분을 초기화 시켜준다.
-
mapChange(int map[][]) [구현 : 최상희] : 셔플 아이템 사용 시 맵을 섞은 뒤 카드들을 다시 출력해주는 역할을 한다.
-
cardTurnBack() [구현 : 황세윤] : 게임 클리어를 실패한 경우 남은 카드를 모두 안보이게 카드의 뒷면을 출력한다.
-
viewMap(int map[][]) [구현 : 최상희] : View 클래스에서 가장 핵심적인 역할을 하며, LayerePane에 필요한 그래픽들을 올리고 게임 플레이에 필요한 버튼들 또한 이 메소드에서 생성한다.
-
redraw() [구현 : 황세윤] : 카드를 제거한 뒤에 panel을 새로고침 해주는 역할을 한다.
-
createGridButton() [구현 : 최상희] : 모든 카드 버튼에 적용되는 공통 속성을 설정해주는 역할을 한다.
-
RoundedBorder [cView 내부 클래스] [구현 : 최상희] : 버튼들의 꼭지점을 둥글게 만들어 준다.
기타 클래스 역할
a. Intro [구현 : 황세윤]
: Intro 화면 출력을 담당한다. Intro 화면에 있는 '게임 시작‘ 버튼은 View클래스 내 setIntro() 메소드에서 이뤄진다.
b. StageNotice [구현 : 황세윤]
: 게임 배경 출력 전에 몇 스테이지인지 알려주고, 준비/시작을 알려준다. 문이 열리는 효과의 애니메이션 출력을 본 클래스에서 담당한다.
c. BaseDraw [구현 : 황세윤]
: 게임상에 출력되는 배경을 담당하는 클래스이다. 본 클래스에서 배경 이미지 출력은 물론, HUD 중 ‘남은 카드 수’, ‘제거 가능 카드 수’, ‘남은 시간’, ‘남은 아이템 수’의 값을 받아서 화면상에 갱신하는 역할을 한다. 그리고 남은 시간을 그래픽으로 표현할 수 있는 시간게이지를 매초마다 출력한다.
- paintComponent(Graphics g) : 본 클래스의 핵심 메소드다. 다른 클래스에서 넘겨 받은 데이터 값을 통해서 HUD와 배경화면을 갱신한다.
d. FailedNotice [구현 : 황세윤]
: 게임 클리어에 실패 시 출력되는 애니메이션을 담당한다.
e. ClearNotice [구현 : 황세윤] : 게임 클리어 시 출력되는 애니메이션을 담당한다.
f. ScoreDraw [구현 : 황세윤] : 모의고사 모드에서 게임 종료 시 산출 된 점수와 이미지 출력을 담당한다.
g. MenuDraw [구현 : 황세윤] : 게임 도중에 ‘ESC’키 입력 시 메뉴를 출력을 담당한다.
h. ComboEffect [구현 : 황세윤]
: 콤보 발생 시 각 콤보 숫자에 맞는 콤보 효과를 담당한다.
i. Path [구현 : 최상희]
: 하나의 카드 좌표를 저장하기 위한 클래스. direction은 상/하/좌/우중 한가지의 방향을 나타낸다.
j. PathEffectTimer [구현 : 황세윤]
: 선택한 두 카드를 삭제 후, 경로 이미지를 출력 한다. 그런데 이때 플레이어가 경로에 대한 정보를 인지할 수 있도록 100~200 miliseconds 정도 보여준 후 제거해야한다. 그 시간을 컨트롤하는 역할도 한다.
k. GameSound [구현 : 황세윤]
: 게임 재생에 필요한 .wav 파일을 로드한다. 그리고 Play()와 Stop() 메소드를 사용해서 사운드 재생과 정지가 가능하다.
l. GameSoundTimer [구현 : 황세윤]
: 여러 게임 사운드들 중에서 유독 게임 첫 시작 때 재생되는 ‘ReadyGo.wav'와 'BGM.wav'는 재생할 때 싱크가 중요하다. 그 싱크를 맞춰주는 클래스다.
m. Register [구현 : 최상희] : 회원가입을 할 수 있는 프레임이다. 아이디와 비밀번호를 입력받은 후 JSP서버에 요청하여 DB에 등록한다.
n. Score [구현 : 최상희] : 순위를 확인 할 수 있는 프레임이다. 1위부터 20위까지를 JSP서버에 요청하여 받아온다.
서버 [구현 : 최상희] a. getStage.jsp b. login.jsp