1 / 8

Goliat Defence

Goliat Defence. 정보통신 공학부 12031289 이숭현. ◎ 게임 설명 1. 좌우 방향키를 이용하여 골리앗을 움직이게 하고 스페이스 바 로 미사일을 쏜다 2. 전체 레벨은 3 단계로 구성되어 있으며 1,2 레벨은 비슷 한 방식으로 진행되어 지고 레벨 3 은 제한 시간안에 미션을 완수 해야 한다 .

zacharee
Download Presentation

Goliat Defence

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Goliat Defence 정보통신 공학부 12031289 이숭현

  2. ◎게임 설명 1.좌우 방향키를 이용하여 골리앗을 움직이게 하고 스페이스 바 로 미사일을 쏜다 2.전체 레벨은 3단계로 구성되어 있으며 1,2 레벨은 비슷 한 방식으로 진행되어 지고 레벨 3은 제한 시간안에 미션을 완수 해야 한다. 3. 미사일은 한 화면에 2개만 발사 되며 우측에서 출발한 목표물이 좌측끝으로 도달하면 life가 감소하고 목표물을 적중시키면 점수가 오르고 3000점 돌파 시 레벨2 7000점 돌파 시 레벨 3 으로 올라 갈수 있다.

  3. Level1의 화면 Level2 의 화면 Level3 의 화면

  4. ◈ 알고리즘 1.미사일 발사(제일 어려웠던 부분) - Cpoint 형 GunPoint(미사일 위치)를 만들고 미사일을 그리는 함수 ,지우는 함수를 만든다(미사일에 해당하는 타이머에 적당히 구현) GunDelete(CDC *pDC, CPoint point) Gun(CDC *pDC, CPoint point) - 목표물이 맞았을 상황을 고려하여 첫 번째 미사일이 맞았을 때와 두 번째 미사일이 맞았을 때를 고려하여 프로그래밍함 for(int i=0;i<GunCount;i++) {if(i==0) {…………..} if(i!=0){…………………}} - 먼저 쏜 미사일이 적중안하고 다음으로 쏜 미사일이 적중하였을 경우 두 미사일간 y 좌표값 의 차이를 나중에 쏜 미사일에 더해주어서 먼저발사 미사일을 없애고 나중에 발사된 미사일도 대체함 GapSize=aGunPoint[i].y-aGunPoint[i-1].y; aGunPoint[i].y=aGunPoint[i].y-GapSize; aGunPoint[i].x=aGunPoint[i-1].x; GunPoint[i-1].y=0; - 미사일의 타이머에 목표 유닛의 좌표와 미사일의 좌표와의 비교를 통하여 적중시 할 일을 정해줌 if(aGunPoint[i].x>=ArcanPoint.x+1 && aGunPoint[i].x<=ArcanPoint.x+65 && aGunPoint[i].y>=ArcanPoint.y && aGunPoint[i].y<=ArcanPoint.y+79 ) {………….}

  5. ▣유닛의 구현 • 게임의 특성상 여러가지 유닛이 나와야 하기때문에 비트맵을 이용해서 프로 그래밍 함(팬과 브러쉬로는 한계를 느낌) • 우선 실제 스타크래프트 게임에서 직접 게임도중 게임화면을 켑쳐하여 포토샵으로 해당 유닛을 오린후 bmp화일로 만들어서 프로그램에 삽입 (삽입후 각자 유닛의 비트맵 ID를 만들어줌) - 각각의 유닛마다 Draw함수와 위치를 나타내는 Cpoint형 변수를 만듬 void CGameView::DrawArcan(CDC *pDC, CPoint point)//아칸 그리는 함수 {CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap bitmap; bitmap.LoadBitmap(IDB_Arcan); CBitmap *pOldBitmap=(CBitmap *)MemDC.SelectObject(&bitmap); pDC->BitBlt(point.x,point.y,66,80,&MemDC,0,0,SRCCOPY);//각각 유닛의 크기에 따라 좌표를 설정한다 MemDC.SelectObject(pOldBitmap);} • 각유닛에 해당하는 타이머에 유닛마다 구현된 Draw 함수를 넣어줌 • 항상 화면에 있어야 하는 골리앗은 키보드 이벤트가 발생할때 마다 OnDraw 함수에서 새로 그려줌

  6. - 유닛이 랜덤하게 움직이게 하기위하여 랜덤 함수를 사용하였고 위아래로 움직일 범위도 설정해줌 =>타이머에 구현된부분 ArcanPoint.x=ArcanPoint.x-2*(rand()%6);//움직임의 변화를 주기위해서 랜덤함수를 사용 ArcanPoint.y=ArcanPoint.y-3*(rand()%4);//나머지 유닛도 마찬가지 형식 이용 ArcanPoint.y=ArcanPoint.y+3*(rand()%3);//각유닛마다 적당한 움직임 범위 적용 if(ArcanPoint.y<=40)//상하로 움직일 범위를 지정 {ArcanPoint.y=40;} if(ArcanPoint.y>=300) {ArcanPoint.y=300;} if(ArcanPoint.x<0) //유닛이 좌측끝에 도착하면 처음 좌표를 다시 정해줌 { ArcanPoint.x=800; ArcanPoint.y=50; Life--;} - 레벨 3에서는 레벨 1,2와는 다르게 적중하는 개수를 알아야 하므로 ComHit 라는 변수를 설정하여 에너지 바를 그려줌 void CGameView::DrawEnerge(CDC *pDC)//에너지 게이지를 나타내는 함수 { CBrush brush, *pOldBrush; brush.CreateSolidBrush(RGB(0,255,0)); pOldBrush=(CBrush *)pDC->SelectObject(&brush); pDC->Rectangle(600,20,600+(5*ComHit),40); pDC->SelectObject(pOldBrush);} -ComHit를 30으로 초기화 하고 한번 적중할때 마다 ComHit를 한개씩 줄여주고 0이 되면 게임전체가 끝남

  7. ◈레밸설정 • OnDraw 함수에 각레벨에 해당할때 할일을 정해줌 다음 레벨에서 필요한 타이머를 만들어주고 전레벨에서 썻던 필요없는 타이머는 없앰 각각의 레벨마다 필요한 변수를 초기화 시킴 if(3000<=GameScore && Level==1)//3000점이 넘었을때 레벨이 올라갈때 {Level++; KillTimer(1); KillTimer(2); ArcanPoint=CPoint(800,50);//좌표가 총과 겹칠수 있으므로 처음 위치로 보낸다 OverloadPoint=CPoint(800,300); ShuttlePoint=CPoint(800,180); Invalidate();//레벨1이 끝나면서 화면을 깨끗이 함 MessageBox("★★대단해요~~~ Level1 Clear ★★"); MessageBox("Level 2 준비 되셨으면 확인을 눌러주세요"); SetTimer(3,40,NULL);//레벨1이 끝나면서 레벨2 유닛의 타이머와 포인트를 지정해줌 AviterPoint=CPoint(800,80);//유닛들의 처음 위치도 지정 DivauerPoint=CPoint(800,180); CorsairPoint=CPoint(800,350);} if(7000<=GameScore && Level==2)//레벨 2가 끝나고 3으로 넘어가는 순간일때 {……..} if(Level==1)………. • Life가 0이 되거나 레벨 3에서 시간을 초과 했을경우 이를 알리는 메시지 박스를 띄우고 OngameStart();함수(시작버튼을 눌렀을때함수)를 불러 처음부터 다시 하도록 함

  8. ◈구현하지 못한점 • 각 줄마다 출현하는 유닛을 렌덤으로 설정하려고 했으나 유닛의 이미지를 맘대로 바꿀 수가 없었고 각 유닛마다 초기화의 위치가 정해져 있어서 렌덤 출현은 구현하지 못함 • 미사일의 개수를 3개로 하려고 했으나 3개로 하면 첫 번째가 적중 했을때 두 번째가 적중 했을 때 세 번째가 적중 했을 때 첫째 적중 후 둘째 적중 했을 때 등등…여러 변수가 생겨서 코드가 너무 복잡해 지고 여러 친구들에게 테스트한 결과 2개의 미사일이 적당하다는 판단(3개 이상이 나갈 경우 게임이 너무 쉬워짐)을 하여서 미사일은 한 화면에 2개 로 고정함

More Related