회원 로그인
|
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개(1/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
285 | [Python] 동적 import - 모듈을 변수로 받아오기 | 푸딩뱃살 | 413 | 2022.10.27 10:45 |
284 | [Python] 파이썬 3.7.7과 3.9.7의 os.path.expanduser() 차이 | 푸딩뱃살 | 456 | 2022.08.18 12:22 |
283 | [Python] error: Microsoft Visual C++ 9.0 is required. | 푸딩뱃살 | 684 | 2022.08.03 13:35 |
282 | [Python] pyscript | 푸딩뱃살 | 454 | 2022.06.09 11:21 |
281 | [Python] float is / float not is | 푸딩뱃살 | 595 | 2022.03.02 15:03 |
280 | [Python] 이터널 문자열 f | 푸딩뱃살 | 834 | 2022.01.27 16:35 |
279 | [Python] is와 ==의 차이 | 푸딩뱃살 | 485 | 2021.11.25 15:54 |
278 |
[Python] Error: ImportError: file |
푸딩뱃살 | 917 | 2021.11.16 11:24 |
277 | [Python] 파이썬 디컴파일 - uncompyle6 | 푸딩뱃살 | 774 | 2021.11.10 14:46 |
276 | [Python] 파이썬 확장자 설명 | 푸딩뱃살 | 550 | 2021.11.03 14:38 |
275 | [참고] 웹 fbx 뷰어 | 푸딩뱃살 | 470 | 2021.10.19 15:46 |
274 | [Python] enumerate() | 푸딩뱃살 | 500 | 2021.10.13 14:44 |
273 | [Python] 아나콘다에서 가상 환경 | 푸딩뱃살 | 721 | 2020.11.21 00:26 |
272 | [Python] pip로 설치 때 퍼미션 에러 | 푸딩뱃살 | 1267 | 2020.06.06 17:13 |
271 | [Python] OpenCV 10-3. 이미지 Thresholding - Otsu's Binarizatio | 푸딩뱃살 | 674 | 2020.06.05 14:01 |
270 | [Python] OpenCV 10-2. 이미지 Thresholding - Adaptive Threshold | 푸딩뱃살 | 694 | 2020.06.05 13:58 |
269 | [Python] OpenCV 10-1. 이미지 Thresholding | 푸딩뱃살 | 578 | 2020.06.05 13:56 |
268 | [Python] OpenCV 9-2. 색 추적 | 푸딩뱃살 | 773 | 2020.06.02 23:29 |
267 | [Python] OpenCV 9-1. 색공간 바꾸기 | 푸딩뱃살 | 640 | 2020.06.02 23:27 |
266 | [Python] OpenCV 8-3. 이미지 비트 연산 | 푸딩뱃살 | 530 | 2020.06.02 23:21 |