Team 김민수 (112460), 이재준 (111969), 정연승 (112423) 목표 Aplication name Balloon Cup 개발동기 5 조객체지향프로젝트 Final Check Point 저희팀의공통적인부분은 게임 에관심이많습니다. PC 게임부터시작해서모바일게임더나아가오프라인보드게임까지관심을가지고게임을즐기고있습니다. 여러가지장르의게임이있지만, 쉽고간단하게즐길수있는게임이보드게임이라고생각했습니다. 그이유는게임플레이시간이오래걸리지않으며, 서로머리를사용해서전략적으로플레이를하기때문에, 매번플레이를할때마다새롭고다양하게즐길수있을거라생각했습니다. 많은보드게임중에저희는오프라인에있는재밌는보드게임을 PC 버전으로만들자고의견을합쳤습니다, 왜냐하면오프라인에서즐기는게임은 PC 버전으로없는경우가많기때문입니다. 회의를거쳐저희의의견에맞는게임을찾았습니다. 그게임의이름은 Balloon Cup 입니다. 제공할기능 오프닝화면튜토리얼게임진행 게임시작튜토리얼화면으로전환된다. 게임종료프로그램을종료한다. 버튼 페이지 순서정하기 플레이어턴 게임승리 다음 : 다음페이지로이동한다. 이전 : 이전페이지로이동한다. SKIP : 게임진행화면바로전환된다. 게임시작 : 마지막장에서게임시작화면으로전환된다. 처음 : 다음, SKIP 중간 : 이전, 다음,SKIP 마지막 : 이전, 게임시작 계속돌아가고있는동전을 STOP 하여순서를정한다. ( 앞면 : 1P, 뒷면 : 2P ) 카드놓기, 카드교환, 트로피카드획득 다시하기, 게임종료
요구사항리스트 1. 게임방법 1.1. 게임의내용이어려워튜토리얼추가를바람. 1.2. 게임도중에수시로게임방법을볼수있게해주길바람. 1.3. 트로피카드를얻을수있는조건이되면트로피카드를표시해주길바람. 2. 플레이어 2.1. 1P, 2P 중누가먼저게임을진행하는가. 2.1.1. 누가먼저진행할지미니게임을만들어결정하게해주길바람. 3. 큐브 3.1. 남아있는큐브의개수를표시해주길바람. 3.2. 큐브의개수가부족할때보드를비활성화시켜주길바람. 4. 카드 4.1. 카드를내려놓는곳표시해주길바람. 4.2. 낼수있을카드가없을때자동적으로카드교환해주길바람. 5. 시스템 5.1. 카드를내려놓을때사운드를넣어주길바람. 5.2. 튜토리얼때실수로 SKIP 버튼을눌렀을때다시확인하게해달라. 5.3 EXIT버튼을눌렀을때다시한번확인하게해달라.
유즈케이스다이어그램 세부유즈케이스 1. 오프닝화면나온다. 1.1. 게임배경을표시한다. 1.2. 게임시작, 종료버튼을중앙아래에표시한다. 1.2.1. 게임시작버튼을클릭하면튜토리얼화면으로전환된다. 1.2.2. 종료버튼을클릭하면게임을종료한다. 2. 튜토리얼에서게임방법을알려준다. 2.1. part 1 : 게임의구성요소를보여준다. 2.2. part 2 : 게임의승리조건을보여준다. 2.3. part 3 : 게임방법을보여준다. 2.4. 오른쪽아래에 다음, 이전, 'Skip' 버튼을표시한다. 2.4.1. 다음 버튼을클릭하면튜토리얼상황을진행한다. 2.4.1.1. 튜토리얼마지막장에오면 다음 버튼클릭시게임화면으로전환된다. 2.4.2. 이전 버튼을클릭하면진행도중되돌아가서볼수있다. 2.4.2.1. 튜토리얼처음화면에서는 이전 버튼이비활성화되어있다. 2.4.3. 게임화면으로바로전환하고싶을때, 오른쪽하단 skip버튼을클릭하면전환된다.
3. 게임화면을나타낸다. 3.1. 트로피카드 5장이다. 3.1.1. 회색벌룬컵은 3 이라는숫자가적어져있다. 게임화면젤위쪽에놓여진다. 3.1.2. 파란색벌룬컵은 4 라는숫자가적어져있다. 회색벌룬컵다음에놓여진다. 3.1.3. 초록색벌룬컵은 5 이라는숫자가적어져있다. 파란색벌룬컵다음에놓여진다. 3.1.4. 노랑색벌룬컵은 6 라는숫자가적어져있다. 초록색벌룬컵다음에놓여진다. 3.1.5. 빨강색벌룬컵은 7 이라는숫자가적어져있다. 노랑색벌룬컵다음에놓여진다. 3.2. 큐브는 45개이다. 3.2.1. 회색큐브는 5개, 회색큐브 3개이면회색트로피카드를가져올수있다. 3.2.2. 파란색큐브는 7개, 파란색큐브 4개이면파란색트로피카드를가져올수있다. 3.2.3. 초록색큐브는 9개, 초록색큐브 5개이면초록색트로피카드를가져올수있다. 3.2.4. 노랑색큐브는 11개, 노랑색큐브 6개이면노랑색트로피카드를가져올수있다. 3.2.5. 빨강색큐브는 13개, 빨강색큐브 7개이면빨강색트로피카드를가져올수있다. 3.2.6. 자루에큐브가들어있는걸가정하여자루그림을트로피카드밑의왼쪽에놓인다. 3.2.6.1. 자루그림옆에남은큐브의개수를나타낸다. 3.3. 덱 ( 카드 45장 ) 카드의숫자중가장작은수는 1이고가장큰수는 13이다. 3.3.1. 회색카드 5장 (1, 4, 7, 10, 13) 이있다. 3.3.2. 파란색카드 7장 (1, 3, 5, 7, 9, 11, 13) 이있다. 3.3.3. 초록색카드 9장 (1, 2, 4, 6, 7, 8, 10, 11, 13) 이있다. 3.3.4. 노랑색카드 11장 (1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13) 이있다. 3.3.5. 빨강색카드 13장 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11, 12, 13) 이있다. 3.3.6. 덱은트로피카드가놓여진부분에서오른쪽밑에셋팅된다. 3.4. 보드는앞면에는산, 뒷면에는평지배경이그려져있다. 3.4.1. 보드는총 4개로구성되어있고, 1,2,3,4라는숫자가적어져있다. 3.4.2. 배경이산이면높은숫자의카드가유리하다. 3.4.3. 배경이평지이면낮은숫자의카드가유리하다. 3.4.4. 트로피카드가놓여진부분에서가운데밑으로셋팅된다. 3.4.4.1. 보드의숫자가작은순으로위에서부터아래로앞, 뒤, 앞, 뒤순으로셋팅된다. 3.5. 각플레이어의진영
3.5.1. 보드를기준으로왼쪽이 1P, 오른쪽이 2P로한다. 3.5.1. 보드양옆에카드를놓을수있는플레이어의진영을나타낸다. 3.6. 큐브를보드에적힌숫자만큼임의로뽑아서보드위에놓는다. 3.7. 카드분배하기 3.7.1. 게임환경의셋팅이다되면덱에서각플레이어에게임의로 8장씩분배한다. 3.7.1.1. 8장의카드의정렬은색깔순, 숫자순으로정렬한다. 3.7.1.1.1. 색깔은빨강색, 노랑색, 초록색, 파란색, 회색순으로정렬된다. 3.7.1.1.2. 숫자는작은것이먼저오도록정렬한다. 3.7.2. 각플레이어의카드는플레이어의진영아래쪽에겹쳐서놓인다. 4. 순서정하기 4.1. 게임을시작하고게임화면이셋팅된다. 4.2. 화면이바뀌면서동전그림이나온다. 4.2.1. 앞면이나오면 1P가먼저카드를놓는다. 4.2.2. 뒷면이나오면 2P가먼저카드를놓는다. 5. 진영에카드놓기 5.1. 한장의카드를진영에놓으면카드를한장받고턴이상대방한테넘어간다. 5.2. 플레이어는 4개의보드중하나를골라그위에놓여있는큐브의색깔에맞게카드를한장놓을수있다. 5.2.1. 상대방의진영에도카드를놓을수있다. 5.2.2. 보드의숫자가 4였는데위에놓여있는큐브가빨간색 2개파란색 1개노란색 1개라면빨간색, 파란색, 노란색카드를각각 2장 1장 1장놓을수있다. 5.3. 카드를놓은다음, 덱에서임의의카드한장이자동으로플레이어의패로들어가고턴을넘긴다. 5.3.1. 놓을수있는카드가없는경우, 교환하라는메시지가나오면서최대 4장까지선택하여덱에있는카드와교환한다. 5.3.1.1. 카드를교환하였는데도놓을수있는카드가없을경우, 그대로상대방에게턴을넘긴다. 5.3.1.2. 카드를교환하여알맞은카드를내려놓은경우덱에서카드한장을가져오고턴을넘긴다.
6. 큐브쟁탈 6.1. 한보드의적힌숫자만큼카드가양쪽모두놓여졌을때. 카드숫자들의합를비교하여승자가해당보드에있는큐브를가져간다. 6.1.1. 보드의배경이산일경우, 카드숫자들의합이높은쪽이승자가되어큐브를가져간다. 6.1.2. 보드의배경이땅인경우, 카드숫자들의합이낮은쪽이승자가되어큐브를가져간다. 6.1.3. 카드숫자의합이같을경우, 마지막에카드를놓았던플레이어가승자가되어큐브를가져간다. 6.2. 승자가큐브를얻으면해당보드를뒤집어서다시임의의큐브를자동으로뽑아서보드에놓고턴을넘긴다. 6.2.1. 해당보드의숫자만큼의큐브가없다면, 해당보드를게임에서제외시킨다. 7. 트로피카드쟁탈 7.1. 큐브를트로피카드의숫자만큼모았거나그보다많을경우트로피카드를가져올수있다. 7.1.1. 빨간색큐브 13개중 7개이상모으면빨간색트로피카드를가져올수있다. 7.1.2. 노란색큐브 11개중 6개이상모으면노란색트로피카드를가져올수있다. 7.1.3. 초록색큐브 9개중 5개이상모으면초록색트로피카드를가져올수있다. 7.1.4. 파란색큐브 7개중 4개이상모으면파란색트로피카드를가져올수있다. 7.1.5. 회색큐브 5개중 3개이상모으면회색트로피카드를가져올수있다. 7.2. 트로피카드를얻는데사용된큐브들은게임에서제외된다. 8. 게임종료 8.1. EXIT 버튼을클릭하면확인하고종료한다. 8.2. 5개의트로피카드중 3장의트로피카드를먼저얻으면승자가표시되고게임이종료된다. 8.2.1. 게임이종료될때다시하기, 종료하기버튼이나온다. 시퀀스다이어그램
게임진행 ( 확대해서보면보입니다. : Ctrl + 휠 )
화면정의서
오프닝화면 튜토리얼 Chp1 튜토리얼 Chp2 튜토리얼 Ch3 1/? 튜토리얼마지막 게임초기화면 1 플레이어를나타낸다. 2 획득한트로피카드를보여준다.
3 획득한큐브를보여준다. 4 플레이어의패를보여준다. 5 현재남아있는트로피카드를보여준다. 6 현재남아있는큐브의개수를보여준다. 7 덱 ( 카드뭉치 ) 을나타낸다. 8 게임을하는영역이다. 순서정하기화면 게임승리화면 클래스다이어그램
프로그램구동스크린샷 오프닝화면 튜토리얼처음 튜토리얼중간 튜토리얼마지막 튜토리얼마지막 순서정하기
게임초기화면 카드놓기 큐브가져가기 카드교환 카드교환 ( 버튼 ) 트로피카드가져가기 게임오버 카드교환
프로그램컴파일및실행매뉴얼 BallonCupFrame 을 BallonCup 클래스의메인메소드에서실행하여프레임을띄운다. 프레임은오프닝패널클래스를추가한다. 오프닝패널은프레임을생성자매개변수로받아프레임의핸들러를가진다. 오프닝패널은오프닝배경을그리고게임시작버튼과게임종료버튼을생성한다. 게임시작버튼클릭시프레임이오프닝패널을지우고튜토리얼패널을추가한다. 게임종료버튼클릭시프로그램이종료된다. 튜토리얼패널은프레임을생성자매개변수로받아프레임의핸들러를가진다. 튜토리얼은튜토리얼화면클릭시튜토리얼로넘어간다. 튜토리얼은이전, 다음, 스킵, 게임시작버튼을생성한다. 튜토리얼처음화면에는다음버튼과스킵버튼이 setvisible(true) 로보이게된다. 중간화면에는이전버튼, 다음버튼, 스킵버튼이 setvisible(true) 로보이게된다. 마지막화면에는이전버튼과게임시작버튼이 setvisible(true) 로보이게된다. 이전버튼클릭시배경을이전페이지이미지로바꿔준다. 다음버튼클릭시배경을다음페이지이미지로바꿔준다. 스킵, 시작버튼클릭시튜토리얼패널을지우고플레이패널을추가한다. 플레이패널은게임구성요소를셋팅하고, 플레이어 1,2 를생성하고, 코인패널을추가한다. 코인패널은코인이미지를그리고돌리기버튼생성한다. 돌리기버튼클릭시코인이미지를계속바꿔주는쓰레드를발진하고, 버튼텍스트를 STOP 으로바꾼다. STOP 버튼클릭시쓰레드를멈추고 ( 이미지멈춤 ), 버튼텍스트를 START 로바꾼다. START 버튼클릭시코인패널을지우고, 플레이패널로돌아가면서코인이미지에있는플레이어부터턴을진행한다. 플레이어는카드라벨을선택하고놓을수있는영역에클릭하여카드를놓는다. 카드를놓으면큐브를가져가는조건을검사하고아닐경우덱에서카드한장을가져오고턴을넘긴다. 큐브를가져가는조건이되면큐브를클릭했을때가져가는마우스이벤트를추가한다. 큐브를클릭할시플레이어 1 영역과플레이어 2 영역의카드숫자를비교한다. 2,3,4 번보드는영역에놓여진카드숫자의합을가지고비교한다. 보드가평지배경인경우카드숫자의합이낮은플레이어가큐브를가져간다. 보드가산배경인경우카드숫자의합이높은플레이어가큐브를가져간다. 카드숫자의합이동일한경우마지막에카드를놓은플레이어가큐브를가져간다. 큐브를가져가면트로피카드를가져가는조건을검사하고놓여진카드는다시덱으로들어간다.
트로피카드를가져가는조건이아닐경우덱에서카드한장을가져오고턴을넘긴다. 트로피카드를가져가는조건일경우트로피카드를자동으로가져가고덱에서카드한장을가져온다음턴을넘긴다. 플레이어턴에놓을카드가없을경우카드교환패널을생성하고추가한다. 카드교환패널은플레이어의카드를가져와이미지를 2 배확대한다. 카드교환패널은게임화면버튼과카드교환버튼을만든다. 게임화면버튼클릭시카드교환패널을 setvisible(false) 로안보이게하고플레이패널에교환화면버튼을보이게만든다. 교환화면버튼클릭시카드교환패널을 setvisible(true) 로보이게한다. 카드교환버튼은카드를선택하지않았을때 setenable(false) 로작동하지않게한다. 교환할카드를 1 장에서 4 장사이로선택하고카드교환버튼클릭하면선택한카드는덱으로들어가고선택한카드개수만큼덱에서뽑는다. 카드교환버튼은클릭시텍스트가계속하기로바뀌고, 게임화면버튼은 setenable(false) 로작동하지않게된다. 계속하기버튼클릭시카드교환에있는카드를기존플레이어카드좌표에위치하고플레이패널은카드교환패널을지우고턴을진행한다. 카드교환한다음에도놓을카드가없을경우카드교환을다시하고, 또없을경우턴을넘긴다. ( 한턴에최대 2 번 ) 카드놓기, 큐브가져가기, 트로피카드가져가기를반복한다. 트로피카드를가져왔을때두플레이어중트로피카드가 3 장이상이된경우게임오버메소드를호출하고플레이패널은게임오버패널을생성하고추가한다. 게임오버패널은다시하기버튼과종료하기버튼을생성한다. 다시하기버튼클릭시프레임이플레이패널을지우고새로운플레이패널을생성하고추가한다. 종료하기버튼클릭시프로그램이종료된다.
API 매뉴얼 (Javadoc 사용 ) 초기페이지스크린샷