팀프 #2 starwars

20
팀팀 #2 STARWARS 201211353 서서서 201211389 서서서

Upload: kalila

Post on 11-Feb-2016

51 views

Category:

Documents


0 download

DESCRIPTION

팀프 #2 STARWARS. 201211353 서동현 201211389 함진아. 목차. 초기 구현 계획 (1/4). 주요 프로세스 (2/4). Weapon 요구사항 분석 (3/4). Player 요구사항 분석 (4/4). 팀프 #1 의 구현 기능 (1/3). 팀프 #1 의 최종 구현 기능 (2/3). 팀프 #1 의 최종 구현 기능 (3/3). 전체 설계도. 사용한 디자인 패턴. 가이드 라인 ( Gui 설계 )(1/4). 전체 프로세스 ( 수정 )(2/4). 고민과 해결 방법 (3/4). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 팀프 #2  STARWARS

팀프 #2 STARWARS201211353 서동현201211389 함진아

Page 2: 팀프 #2  STARWARS

목차

1 •팀프#1 초기 계획2 •팀프#1 최종 구현 기능3 •사용한 디자인 패턴4 •팀프#2 수정 및 추가사항5 •데모6 •아쉬운 점

Page 3: 팀프 #2  STARWARS

초기 구현 계획 (1/4)상속 , 추상클래스 및 인터페이스를 이용한 다형성

적절한 디자인 패턴 활용• Factory 패턴 ( 팩토리 패턴 )

안정성 ( 예외처리 )• Throw, try – catch 문을 통한 예외처리 추구

GUI 제외한 콘솔기반으로 작성• 팀프 #2 에서 GUI 추가

Page 4: 팀프 #2  STARWARS

주요 프로세스 (2/4)

Player 설정 •Player의 이름 받아서 player 설정 •초기 무기 자동 생성 (주무기 / 보조무기)

Enemy와 대결 •1 : 1의 대결 방식 •한 쪽이 죽을 때까지 자동 전투 진행

재정비 •Enemy로부터 랜덤 보상(enemy의 무기)•사용자 정보 출력 및 재정비

종료 •사용자가 종료를 원하면 게임 종료

Page 5: 팀프 #2  STARWARS

Weapon 요구사항 분석 (3/4)Weapon 클래스

• 이름 , 공격력 (Ap), 정확도 (Accuracy), 레벨 등Weapon 은 일회성 , 소모성 , 비 소모성 무기로 나뉜다 .

• 일회성 : 한 번의 공격만 가능한 무기 (ex – 수류탄 등 )• 소모성 : 화살과 탄피 등 어떤 요소를 소모하는 무기 (ex – 활 , 총 등 )• 비소모성 : 소모되지 않는 무기 . ( 가 ), ( 나 ) 를 제외한 나머지 무기 (ex – 칼 등 )

소모성 무기는 고유의 탄을 소유 및 소모한다 .• 매 공격 시 공격의 성공 여부와는 관계없이 탄은 소모된다 .• 각각의 탄은 탄창 클래스를 상속받으며 , 고유의 이름과 개수를 가진다 .• 소모성 무기 클래스와 HAS-A 관계

Weapon 은 Attackable 인터페이스를 구현한다 .• 소모성 : Consumeable 인터페이스를 구현• 각 무기들은 적절한 인터페이스를 구현하고 있다 . (ex – 총류 : Shootable, 검류 : Hackable/Pierce-

able, 창류 : Pierceable 등 )

Magicable 인터페이스• 일정레벨 이상이 된 무기는 Player 가 mp 를 소모하여 마법 기술을 발동시킬 수 있다 .

Page 6: 팀프 #2  STARWARS

Player 요구사항 분석 (4/4)Player

• 주무기 / 보조무기• 한 번의 대결에 쓰이는 무기는 이 두 가지다 . ( 주무기의 사용이 불가해질 경우 보조무기를 사용하여 공격할 수 있다 .)• Hp / mp / 이름 / 전적 등

게임 종료 조건• 한 쪽 Player 의 hp 가 모두 소모될 경우 한 텀이 종료된다 .

마법 무기 사용• Player 의 mp 보다 높은 mp 소모량을 가진 마법 무기는 사용할 수 없다 . 또한 , 마법 무기를 한 번 사용할 때마다 Player 의 mp 는 감소한다 .

Enemy• Player 클래스를 상속받는 Enemy 클래스의 객체 .

Page 7: 팀프 #2  STARWARS

팀프 #1 의 구현 기능 (1/3)• Weapon, warhead( 탄창 ), defense 상속• 새로운 아이템 추가 가능하도록 구조 변경• ItemManager 를 두어 아이템 관리를 좀 더 유용하게 하였다 .

Item

• 해당 기능에 따른 인터페이스를 구현 , 구현 기능에 따른 공격을 위하여 최상위 클래스 Weapon 의 attack 을 상속받아 오버라이딩• 상점에서 무기 강화를 통해 무기의 레벨 증가 가능• 일정 레벨 이상이 되면 마법 공격 가능• 마법 공격은 Enemy 가 가지는 속성에 반하는 속성을 가지므로 인하여 보통의 공격력보다 1.5 배 강한 공격이 가능

Weapon

Page 8: 팀프 #2  STARWARS

팀프 #1 의 최종 구현 기능 (2/3)• 머리 , 몸통 , 신발 방어구 ( 부위에 따른 분류 )• player 는 방어력과 회피율을 얻어 상대의 공격에 대해 방어가 가능Defense

• 아이템 생성 : 아이템의 큰 틀 ( 종류 ) 에 따라 몇 가지의 factory 를 만들어 세부적인 아이템의 종류는 String 으로 판단• Weapon 의 경우 소모성 무기 공장 , 일회성 무기 공장 , 일반 무기 공장 세 가지의 공장만을 만들어서 그 내부에 각각의 세부 무기들 ( 총 , 칼 , 수류탄 등 ) 을 생성하도록 하였다 .• 모든 아이템에 대하여 Factory 존재 . 필요한 순간에 공장을 통해 아이템을 생성

Factory

• 아이템을 사고 팔 수 있는 상점 .• 무기 강화가 가능 . 일정 값을 지불하고 강화를 진행하면 해당 아이템의 레벨이 증가하며 , 증가에 따른 공격력과 정확도 등의 증가를 할 수 있다 .• 소모성 무기의 탄 채우기

Store

Page 9: 팀프 #2  STARWARS

팀프 #1 의 최종 구현 기능 (3/3)

• 주무기 , 보조무기 , 머리방어구 , 몸통방어구 , 신발방어구 등을 소지• Level : 전적 ( 승리한 수 ) 에 따라 레벨 증가 .• Hp : 일정 비율로 증가 . Mp : 일정 수만큼 증가• 돈 : 승리 시 보상 + 무기 구입 / 판매• Enemy : player 클래스를 상속 , 방어구 장착이나 마법공격 불가능• player 와는 다르게 type 가짐 . ( 물 > 불 > 풀 > 전기 등의 네 가지 속성 )

player 의 마법공격 : Enemy 의 속성에 반하는 속성의 공격으로 더 큰 데미지를 얻게 되는 역할 .• Enemy 는 싸움 전에 랜덤 레벨의 랜덤 무기와 , 랜덤 레벨로 생성• Player 가 Enemy 와의 싸움에서 승리할 경우 Enemy 의 무기 습득 가능

Player

Page 10: 팀프 #2  STARWARS

전체 설계도

Page 11: 팀프 #2  STARWARS

사용한 디자인 패턴Factory Method 패턴• 정의 : 객체를 생성하기 위한 인터페이스를 정의하는데 , 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다 . 즉 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는것• 모든 팩토리 패턴에서는 객체 생성을 캡슐화한다 . 객체 생성 코드를 전부 한 객체 또는 메소드에 집어넣으면 코드에서 중복되는 내용을 제거할 수 있고 , 나중에 관리할 때도 한군데만 신경을 쓰면 된다 . 구현이 아닌 인터페이스를 바탕으로 프로그래밍을 할 수 있게 되고 , 그 결과 유연성과 확장성이 뛰어난 코드를 만들 수 있게 된다 .

Page 12: 팀프 #2  STARWARS

가이드 라인 (Gui 설계 )(1/4)

Page 13: 팀프 #2  STARWARS
Page 14: 팀프 #2  STARWARS
Page 15: 팀프 #2  STARWARS

전체 프로세스 ( 수정 )(2/4)프로그램 초기 프로세스 초기화면 출력 사용자 이름 입력 받기 공장 생성 초기 무기 생성

메인 메뉴 출력• 사용자 아이템 정보• 사용자 정보• 메인 메뉴

전투하기 - 전투 Enemy 정보 출력 전투하기 / 도망가기 70% 의 확률로 도망 성공아니면 전투 시작• 자동 전투 시스템

전투하기 - 보상 50% 의 확률로 Enemy 의 무기 받기 랜덤한 양의 돈 받기

상점 – 아이템 사기 목록에서 구입할 무기 선택 돈이 해당 아이템 가격보다 많으면

구입• 주무기 / 보조무기 선택을 통해 무기 바꾸기• 머리 / 몸통 / 신발 선택을 통해 방어구 바꾸기

상점 - 아이템 강화 무기 강화하기 버튼 클릭 주무기와 부무기 선택 및 강화하기 창 팝업강화하기 누르면 돈을 지불하고 무기 강화 ( 돈이 부족하면 알림메세지 팝업 )

상점 – 아이템 팔기 아이템 팔기 버튼 클릭 플레이어의 무기와 방어구 창 팝업아이템 선택후 팔기 누르면 돈 획득 알림메세지 팝업 및 아이템 삭제

Page 16: 팀프 #2  STARWARS

고민과 해결 방법 (3/4)

해결방법출력하는 부분을 새로운 Thread 로 생성

고민

Thread.sleep 의 사용 : 화면 출력을 sleep 시키려고 사용하였으나 , 출력 자체가 sleep 되어버리고 모든 sleep 을 마친 뒤에 한꺼번에 화면 출력

Page 17: 팀프 #2  STARWARS

새롭게 알게 된 사실 (4/4)• public void actionPerformed (ActionEvent e);

이 메소드가 호출될 때는 스윙의 event dispatch thread 위에서 호출된다 .event dispatch thread 는 스윙 컴포넌트의 view 변경 , Listener호출 등 발생하는 이벤트의 전체를 관리하는 Thread이다 . 예를 들어서 버튼의 이미지를 바꾼다 , 하면 이미지 변경이 이 Thread 위에서 실행된다 .

따라서 이 메소드가 호출하는 "어떤 메소드" 에서thread.sleep(1000); 을 하게 되면 "어떤 메소드" 역시 event dispath thread 위에서 실행되는 거고 , 이 thread가 sleep 을 하는 것이다 .

actionPerformed에서 아래와 같이 별도의 thread를 만들어서 Runnable r = new Runnable() {

public void run() {

doMethod(); // "어떤 메소드“}

};new Thread(r).start();를 해주면 event dispatch thread는 actionPerformed 메소드만 호출하고 그 다음에는 새로운 thread가 "어떤 메소드"를 호출한다 .

Page 18: 팀프 #2  STARWARS

데모 실행전체 프로세스에 대한 설명Gui 만드는 과정에서 생긴 고민해결 방법과 새롭게 알게 된 사실

Page 19: 팀프 #2  STARWARS

아쉬운 점

•디자인 패턴에 대한 정확한 이해 부족 •제공하는 이점을 제대로 활용하지 못했다.디자인 패턴•콘솔 출력을 위한 프로그램으로 팀프#1을 기획하였다가, 팀프#2에서 gui 추가 •기능과 출력을 합친 코드 • gui를 위한 코드 재 작성한 부분 생김

코드 정리

•게임의 난이도 조절 등 전반적인 게임의 진행에 따른 균형을 맞추는 것이 어려웠다.게임 균형 맞추기

Page 20: 팀프 #2  STARWARS

감사합니다 .기말고사 파이팅 !