회원 로그인
|
2차원 동적 객체 배열 활용
C++ 2차원 동적 객체 배열 활용
2차원 배열(포인터)를 사용
2차원 동적 객체 배열을 사용하지 않고 2차원적인 프로그래밍 방법에 대한 예
몬스터의 정보를 배열 4마리 받고, 웨이브 배열 3번을 하는데 몬스터 정보의 랜덤으로 배열 10마리 생성하여 출력
*2차원 배열에 한번에 넣는 것보다 1차원 배열로 여려 클래스를 참조하여 사용하는 것이 포인트
*마인드맵 처럼
2차원 배열(포인터)를 사용
#include <iostream> #include <stdlib.h> #include <string> #include <time.h> #include <Windows.h> using namespace std; class Monster8 { public: string type; string name; void CreateMonster(string type, string name) { this->type = type; this->name = name; cout << this->type << " 타입의 " << this->name << " 몬스터가 생성됨" << endl; } void WalkMonster() { cout << name << " 몬스터가 이동함" << endl; } }; void WaveStart8(Monster8** pMonsters, int waveSize, int monsterCount) { // 1차원 반복문은 행배열의 반복 담당 for (int i = 0; i < waveSize; i++){ cout << i + 1 << "번째 웨이브가 시작되었습니다" << endl; // 2차원 반복문은 열배열의 반복을 담당 for (int j = 0; j < monsterCount; j++) { Sleep(2000); pMonsters[i][j].WalkMonster(); // (&pMonsters[i][j])->WalkMonster(); // 전부 같다 // (*(*(pMonsters + i) + j)).WalkMonster(); // (&(*(*(pMonsters + i) + j)))->WalkMonster(); // (pMonsters[i] + j)->WalkMonster(); // (*(pMonsters + i) + j)->WalkMonster(); } for (int k = 0; k < 3; k++) { Sleep(400); cout << "경고! "; } cout << endl; } } void main() { srand((unsigned int)time(NULL)); int waveSize = 0; int monsterCount = 0; cout << "웨이브 갯수를 입력하시오 : "; cin >> waveSize; cout << "웨이브당 몬스터의 갯수를 입력하시오 : "; cin >> monsterCount; // 동적으로 몬스터의 행배열을 생성 // Monster8**는 Monster8*를 포인터로 넣는.. Monster8** pMonsters = new Monster8*[waveSize]; // 동적으로 몬스터 열배열을 생성 for (int i = 0; i < waveSize; i++) { pMonsters[i] = new Monster8[monsterCount]; } for (int i = 0; i < waveSize; i++) { for (int j = 0; j < waveSize; i++) { // 랜덤 몬스터 타입 선택 int random = rand() % waveSize; switch (random) { case 0: pMonsters[i][j].CreateMonster("인간형", "오우거"); break; case 1: pMonsters[i][j].CreateMonster("고스트형", "유령"); break; case 2: pMonsters[i][j].CreateMonster("언데드형", "좀비"); break; default: pMonsters[i][j].CreateMonster("동물형", "늑대"); break; } } } // 웨이브 시작 WaveStart8(pMonsters, waveSize, monsterCount); // 몬스터 동적 배열을 제거 for (int i = 0; i < waveSize; i++) { delete[] pMonsters[i]; } delete[] pMonsters; }
2차원 동적 객체 배열을 사용하지 않고 2차원적인 프로그래밍 방법에 대한 예
몬스터의 정보를 배열 4마리 받고, 웨이브 배열 3번을 하는데 몬스터 정보의 랜덤으로 배열 10마리 생성하여 출력
*2차원 배열에 한번에 넣는 것보다 1차원 배열로 여려 클래스를 참조하여 사용하는 것이 포인트
*마인드맵 처럼
#include <iostream> #include <stdlib.h> #include <string> #include <time.h> #include <Windows.h> using namespace std; // 몬스터 정보 클래스 class MonsterInfo{ public: string name; // 몬스터 이름 string type; // 몬스터 타입 // 몬스터 정보 설정 void SetMonsterInfo(string name, string type){ this->name = name; this->type = type; } }; // 몬스터 클래스 class Monster9 { public: // 몬스터 정보 객체 MonsterInfo monsterInfo; // 몬스터 생성 void CreateMonster(MonsterInfo monsterInfo){ this->monsterInfo = monsterInfo; cout << this->monsterInfo.name << " 이름을 가진 " << this->monsterInfo.type << " 타입의 몬스터를 생성합니다." << endl; } // 몬스터 이동 void WalkMonster(){ cout << this->monsterInfo.name << " 몬스터가 플레이어를 향해 이동합니다." << endl; } }; // 웨이브 정보 클래스 class WaveInfo{ public: // 몬스터 객체 배열 (10마리) Monster9 monsters[10]; int waveNum; // 웨이브 번호 // 웨이브 생성(웨이브 번호, 몬스터 기준 정보 배열) void CreateWave(int waveNum, MonsterInfo* monsterInfo){ this->waveNum = waveNum; cout << this->waveNum << " 번째 웨이브를 생성합니다." << endl; // 렌덤하게 몬스터를 생성 for (int i = 0; i < 10; i++){ int randNum = rand() % 4; monsters[i].CreateMonster(monsterInfo[randNum]); } } // 웨이브 시작 void StartWave() { // 경고 출력 WarningWave(); cout << waveNum << " 번째 웨이브가 시작됩니다." << endl; // 몬스터에게 이동하라고 명령 for (int i = 0; i < 10; i++){ Sleep(1000); monsters[i].WalkMonster(); } } // 경고 출력 void WarningWave() { for (int k = 0; k < 3; k++){ Sleep(500); cout << "경고! "; } cout << endl; } }; void main() { srand((unsigned int)time(NULL)); // 몬스터 기준 정보 객체 배열을 생성, 몬스터의 종류 4개 MonsterInfo monsterInfo[4]; monsterInfo[0].SetMonsterInfo("오우거", "인간형"); monsterInfo[1].SetMonsterInfo("멀록", "동물형"); monsterInfo[2].SetMonsterInfo("좀비", "언데드형"); monsterInfo[3].SetMonsterInfo("늑대", "동물형"); // 웨이브 생성, 웨이브 횟수 3번 WaveInfo waveInfo[3]; for (int i = 0; i < 3; i++) { waveInfo[i].CreateWave(i + 1, monsterInfo); } // 웨이브 시작 for (int i = 0; i < 3; i++){ waveInfo[i].StartWave(); } }
댓글 0개
| 엮인글 0개
285개(7/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
165 | [C#] 네임스페이스 (namespace) | 푸딩뱃살 | 3404 | 2015.11.14 17:34 |
164 | [C#] 인터페이스 (Interface) | 푸딩뱃살 | 2196 | 2015.11.13 18:17 |
163 | [C/C++] Static(정적) 멤버 변수, 메소드 | 푸딩뱃살 | 2473 | 2015.11.13 10:32 |
162 | [C/C++] 추상 클래스 - 오버라이드 / 업/다운캐스팅(형변환) / virtual(가상함수) | 푸딩뱃살 | 4726 | 2015.11.12 02:00 |
161 | [C/C++] 메소드 오버라이드 | 푸딩뱃살 | 1992 | 2015.11.12 01:51 |
160 | [C#] 상속 (with Unity) | 푸딩뱃살 | 5453 | 2015.11.10 16:25 |
159 | [C/C++] 클래스 상속 | 푸딩뱃살 | 2245 | 2015.11.10 14:08 |
158 | [C/C++] 객체 활용 | 푸딩뱃살 | 2470 | 2015.11.09 21:28 |
157 | [C#] C# 객체 클래스 | 푸딩뱃살 | 3568 | 2015.11.08 15:51 |
156 | [C/C++] 생성자 / 소멸자 / 오버로드 | 푸딩뱃살 | 2202 | 2015.11.07 01:23 |
155 | [C/C++] 클래스 선언/정의, 객체 생성 | 푸딩뱃살 | 3567 | 2015.11.06 14:05 |
154 | [C/C++] 로또 프로그램 | 푸딩뱃살 | 2284 | 2015.11.06 12:00 |
>> | [C/C++] 2차원 동적 객체 배열 활용 | 푸딩뱃살 | 3650 | 2015.11.06 00:47 |
152 | [C/C++] 2차원 배열 | 푸딩뱃살 | 2403 | 2015.11.06 00:30 |
151 | [C/C++] 2차원 포인터 | 푸딩뱃살 | 2052 | 2015.11.06 00:26 |
150 | [C/C++] 동적할당 | 푸딩뱃살 | 1805 | 2015.11.05 11:23 |
149 | [C/C++] 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까지 | 푸딩뱃살 | 1451 | 2015.11.05 11:20 |
148 | [C/C++] 포인터와 배열의 이해 | 푸딩뱃살 | 2013 | 2015.11.04 23:54 |
147 | [C/C++] 포인터 | 푸딩뱃살 | 2192 | 2015.11.04 15:14 |
146 | [C/C++] 일반 함수와 메소드간의 차이 | 푸딩뱃살 | 2430 | 2015.11.03 23:38 |