졸업 논문 - jasu's blog
Download
Report
Transcript 졸업 논문 - jasu's blog
게임 프로젝트
ImagePuzzle Game
Java Application
노경섭 (1996301840)
차례
프로젝트 설명
프로젝트 기술
팀 및 자원
프로젝트 제작 기간
참고문헌
다음, 프로젝트 설명
다음 슬라이드
프로제트 설명
프로젝트의 전체적인 GUI
JAVA (J2SDK 1.2x) 코딩 (약 1300 line)
메뉴구성
Game : 게임의 시작과 종료, 순위
Option : 게임에 필요한 옵션설정
Help : 프로그램 정보
특징
자세한 정보는...
다음 슬라이드
Block의 이동한 횟수에 따라 순위가
결정됨
순위는 파일로 특정 폴더에 저장되어
프로그램 종료 후에도 자료유지
블록의 개수를 사용자가 임의로 지정
프로그램이 인스톨된 시스템 내에 있
는 모든 JPG, GIF파일을 게임에 적
용할 수 있음
프로젝트 설명
계속...
다음 슬라이드
새로 게임을 시작함
사용자 순위를 보여줌
순위 레코드 삭제
프로그램 종료
Game 메뉴
프로젝트 설명
Option 메뉴
계속...
다음 슬라이드
Block 크기를 설정함
사운드 On / Off
Number On / Off
순위에 기록될 사용자 변경
프로젝트 설명
Option 메뉴
계속...
다음 슬라이드
게임에 적용할 특정 이미지를 셋팅
프로젝트 설명
Help 메뉴
계속...
다음 슬라이드
제작자 홈페이지를 Explorer로 Open
프로그램 정보
프로젝트 설명
9 By 9 블록 설정, Number 설정시 Start 버튼을 누른 상태
다음, 프로젝트 기술
다음 슬라이드
원본 이미지 view
선택된 이미지의 파일명 표시
가장 좋은 점수 (가장 적은 불록 이
동횟수가 높은 점수임으로 9999로
Default 함)
현재 사용자의 점수 상황 표시
게임의 시작 버튼
선택된 폴더 안에서 다음 이미지로
바뀜 (특정 폴더에서 이미지를 선택
했을 시에 그 폴더 안에 있는 모든
이미지 파일만을 검출하여 게임에
적용하게 함)
프로젝트 기술
Java 에서 이미지를 다룰 수 있는 간단한 패키지를 이용하여 이미지를 pixel 단위로 컨트롤이
가능하다는 것에 착안, 블록 단위로 이미지 자르기 루틴
이동을 원하는 블록을 클릭했을 때 이동 경로
게임을 시작할 때 블록들을 뒤섞는 루틴
Image Setting에서 특정 폴더 안에서 이미지 파일만 축출하여 Next 버튼으로 순서대로 순회
하는 루틴
Number를 체크 했을 때 각각의 블록에 숫자를 뿌려주는 루틴
자세한 정보는...
다음 슬라이드
프로젝트 기술
블록 단위로 이미지 자르기
3 By 3
g.drawImage(
image_state,
0,
0,
getWidth(),
getHeight(),
(image_state.getWidth(this)/intcheck)*isize_loc,
(image_state.getHeight(this)/intcheck)*jsize_loc,
(image_state.getWidth(this)/intcheck)*isize_loc+(image_state.getWidth(this)/intcheck),
(image_state.getHeight(this)/intcheck)*jsize_loc+(image_state.getHeight(this)/intcheck),
this);
isize++;
계속...
다음 슬라이드
프로젝트 기술
이동을 원하는 블록을 클릭했을 때 이동 경로
화면에 보여지는 모양
내부에서 저장되는 1차원 배열
0 1 2
3 4 5
0 1 2
3 4 5
0 1 2
3 4 5
6 7 8
6 7 8
6 7 8
(1)
(2)
(3)
(1)
0 1 2 3 4 5 6 7 8
(2)
0 1 2 3 4 5 6 7 8
(3)
0 1 2 3 4 5 6 7 8
if(color.equals((Color)p[j].getBackground()))
if(j==i-1||j==i+1||j==i+intcheck||j==i-intcheck)
if(!(((i%intcheck)==0)&&(j==(i-1))))
if(!(((j%intcheck)==0)&&(j==(i+1)))){
블록을 바꿔줌;
}
계속...
다음 슬라이드
i : 클릭한 블록의 위치 값을 가지고 있음.
j : 빈 블록의 위치 값을 가지고 있음.
intcheck : 선택한 블록의 가로(세로) 개수
예에서는 3.
프로젝트 기술
게임을 시작할 때 블록들을 뒤섞는 루틴
초기상태 8부분에서 옮 길수 있는 5 or 7중에
Random으로 걸리는 숫자와 빈 블록을 swap
7이 Random으로 걸렸을 경우, 초기상태의 7과
one=p.length-1;
8을 swap해주고 Rnadom으로 6, 4 or 7중에 걸
for(int j=0;j<(p.length*p.length*5);j++){
리는 숫자와 swap을 함
two=(int)(Math.random()*(p.length));
if(((one-1)==two)||((one+1)==two)||((one+intcheck)==two)||((one-intcheck)==two))
if(!(((one%intcheck)==0)&&(two==(one-1))))
if(!(((two%intcheck)==0)&&(two==(one+1)))){
빈 블록과 Random으로 걸린 블록을 Swap
one=two;
} else --j;
}
0 1 2
3 4 5
0 1 2
3 4 5
0 1 2
3 8 5
6 7 8
6 8 7
6 4 7
계속...
다음 슬라이드
전 단계에서 4가 Random으로 걸렸을 경우 빈
블록인 8과 4를 swap하면 다음에 랜덤으로 걸려
서 swap될 수 있는 곳은 1, 3, 5, 4가 된다.
프로젝트 기술
Next 버튼으로 폴더에 있는 이미지를 순서대로 순회하는 루틴
if(bb.getLabel()=="Next"){
if((list_list[list_count])!=null){
file_name=file.getAbsolutePath()+"/"+list_list[list_count++];
display_file.setText(list_list[list_count-1]);
image_state=Toolkit.getDefaultToolkit().getImage(file_name);
replay_proc();
}else{
display_file.setText("File Not Found");
next_button.setLabel("Previous");
list_count--;
}
}
list_list[] : 현재 폴더에 있는 gif, jpg 파일들의 파일명을
저장하고 있는 1차원 배열, 프로그램 초기 시작시에는 image
폴더.
계속...
다음 슬라이드
프로젝트 기술
Number를 체크 했을 때 각각의 블록에 숫자를 뿌려주는 루틴
빈 블록이 아닐 경우에만 블록 위에 완성된 그림
이미지의 순서에 맞게 숫자를 뿌려줌.
g.setFont(font);
if(cont!=block_check)
if(number_check.getState()){
g.drawString(String.valueOf(cont),(getWidth()/2)-3,(getHeight()/2)+5);
}
메뉴에서 Number가 체크되어 있을 경우에는 Panel의 paint 메소드를 이용
하여 cont(블록의 위치번호)를 자신의 블록 가로, 세로 중앙에 뿌려줌.
다음, 프로젝트 팀 및 자원
다음 슬라이드
프로젝트 팀 및 자원
프로젝트에 할당된 자원
– 인원
• 노경섭 1명
– 장비
• SENS 680 (펜티엄 III 850Mhz)
• Window XP Operating System
– 사용툴 및 언어
• Kawa version 3.51a, J2SDK 1.2x
– 지도교수
• 조영임 교수
프로젝트 제작 기간
프로젝트 제작 기간
1 단계
2 단계
3 단계
1일
4일
8일
12일
16일
20일 24일
단계
1단계 : 프로젝트 구상 및 이미지 컨트롤 시험
2단계 : 블록 단위로 이미지 맵핑과 3 By 3 완성
3단계 : 메뉴 항목들에 대한 루틴 완성 및 오류수정, 완성
28일 32일 36일
40일
참고문헌
참고 자료 문헌
–
The Java Programming Language, 3/E
•
•
–
JAVA2 Programming Bible
•
•
–
Deitel & Deitel 공저
유진희, 박성준 공역
JAVA 2
•
–
Arnold, Gosling, Holmes 저
조영임, 길준민, 한연희 공역
정의현, 김성진 공저
Java programming
•
김충석 저