콘솔 종합 (콘솔)
2015. 6. 27. 16:26ㆍElementalKiss/포트폴리오
728x90
728x90
0. 콘솔 종합 게임
영상
프로젝트의 구현 기술 및 개발 교훈
1. 추상화와 캡슐화, 정보 은닉을 활용하여 여러가지 게임을 하나로 통합하는 클래스를 구현했다.
2. 가상함수를 이용한 함수 오버라이딩으로 씬을 전환하기 위해 상태 패턴(State Pattern)을 이용하여 게임 메니저를 구현했다.
그리고 씬을 담기 위해 싱글톤 패턴(SingleTon Pattern)을 이용하여 객체를 Private으로 선언된 게임 객체 포인터를 이용했다.
3. 대부분 게임은 파일 입출력을 이용하여 승/무/패 및 결과 정보를 저장할 수 있게 구현했다.
4. 성적표 - C에서 C++로 컨버팅하며 동적할당 함수인 malloc 함수와 new, delete 연산자의 차이를 고려하여 구현했다.
5. 하이로우세븐 - 인덱스 기반의 셔플 알고리즘을 적용하여 실제 값의 교환이 아닌 인덱스를 이용하여 오버헤드를 줄였다.
6. DB Query - 문자열을 다루기 위해 연산자 오버로딩과 문자열 함수를 직접 구현하며 파싱과 렉싱에 중점을 두고 구현했다.
설계
마인드맵
수도코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // GAME CLASS BASE CLASS bGame PUBLIC VIRTUAL void init VIRTUAL void excute VIRTUAL void release VIRTUAL void save VIRTUAL void load END BASE CLASS DERIVED CLASS dGAME PUBLIC void init void excute void release void save void load END DERIVED CLASS // GAME MANAGER CLASS GameMgr PUBLIC void startGame PRIVATE void init int selectGame void release Game *m_nowGame; END CLASS FUNCTION startGame WHILE getChar is 0 IF m_nowGame is not NULL CALL FUNCTION excute of m_nowGame END IF END WHILE END FUNCTION FUNCTION release CALL FUNCTION release of m_nowGame END FUNCTION FUNCTION selectGame PRINT Game Select Menu SWITCH CASE Game Number SET newGameClass to m_nowGame END SWITCH CASE CALL FUNCTION load of m_nowGame CALL FUNCTION init of m_nowGame END FUNCTION | cs |
순서도
구현
핵심코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // Game.h #pragma once /* 모든게임의 기본상태베이스가 되는 추상 클래스 */ class Game { public: Game(void); virtual ~Game(void); //< 공용 인터페이스 //< 초기화 virtual void init( void ) = 0; //< 실행 virtual void excute( void ) = 0; //< 해제 virtual void release( void ) = 0; //< 저장 virtual void save( void ) = 0; //< 불러오기 virtual void load( void ) = 0; }; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | // GameMgr.cpp #include "stdafx.h" #include "LoopWithClass.h" #include "GradeWithClass.h" #include "RSPwithClass.h" #include "UpDown.h" #include "MatchingGame.h" #include "BingoGame.h" #include "baskinWithClass.h" #include "HighLowSeven.h" #include "G_queryClass.h" #include "GameMgr.h" GameMgr::GameMgr(void) :m_nowGame(NULL) { init(); } GameMgr::~GameMgr(void) { release(); } //< 게임시작 void GameMgr::startGame() { while( true ) { system("cls"); if( selectGame() == 0 ) { cout <<"게임종료"<<endl; break; } if( NULL != m_nowGame ) { system("cls"); m_nowGame->excute(); } } } //< 초기화 void GameMgr::init( void ) { } //< 선택 게임체인지(상태전환) int GameMgr::selectGame( void ) { cout <<"게임선택" << endl; cout <<"1 : 반복문"<<endl; cout<<"2 : 성적표"<<endl; cout<<"3 : 베스킨라빈스 게임"<<endl; cout<<"4 : 가위바위보 게임"<<endl; cout<<"5 : 하이로우세븐 게임"<<endl; cout<<"6 : 업다운 게임"<<endl; cout<<"7 : 짝맞추기 게임"<<endl; cout <<"8 : 빙고 게임" << endl; cout<<"9 : 쿼리문"<<endl; cout <<"0 : 종료" << endl; cout <<"입력 : "; int input; cin >> input; //< 번호체크 if( input < 0 || input > 9 ) { return 1; } if( 0 == input ) { return 0; } if( NULL != m_nowGame ) { //< 해제전 저장 m_nowGame->save(); //< 해제 delete m_nowGame; m_nowGame = NULL; } //< 상태전환 switch( input ) { case 1: { m_nowGame = new LoopWithClass; } break; case 2: { m_nowGame = new GradeWithClass; } break; case 3: { m_nowGame = new baskinWithClass; } break; case 4: { m_nowGame = new RSPwithClass; } break; case 5: { m_nowGame = new HighLowSeven; } break; case 6: { m_nowGame = new UpDown; } break; case 7: { m_nowGame = new MatchingGame; } break; case 8: { m_nowGame = new BingoGame; } break; case 9: { m_nowGame = new QueryClass; } break; default: cout <<"고딴상태없음" <<endl; break; } //< 로딩 m_nowGame->load(); //< 초기화 m_nowGame->init(); return 1; } //< 해제 void GameMgr::release( void ) { if( NULL != m_nowGame ) { //< 게임저장 m_nowGame->save(); //< 게임해제 m_nowGame->release(); } } | cs |
1. 베스킨라빈스 게임
2. 가위바위보 게임
3. DB 쿼리
4. 반복문
5. 성적표
6. High Low 7
7. Up&Dwown
728x90
반응형
'ElementalKiss > 포트폴리오' 카테고리의 다른 글
Tapping Counter(iOS 개인) (0) | 2015.06.30 |
---|---|
군웅무도회(2D 2차 포트폴리오 WIN API) (0) | 2015.06.28 |