프로그래밍 700
-
지금까지 구현하였던, 케릭터를 바탕으로 인터페이스 형태로 재구축하여, 무기를 기준으로 설계를 다시해보자. 무기를 든 Character는 항상 그 무기의 공격모션 을 사용할 수 있어야 한다. 그럼으로, 무기와 케릭터를 인터페이스로 정의하고, 해당 인터페이스를 구현하여 각 캐릭터당 공격모션을 자유롭게 사용할 수 있도록 공통사항을 주어야 할 것 이다. ICharacter , IWeapon으로 구성된 인터페이스를 상속받는 각 무기와 Character를 생성한다. 여기서, 캐릭터는 지금까지 만들었던 player와 Enemy, 무기는 만들었던 Sword와 FireBall이다. 인터페이스 구축하기 언리얼에서는 간단하게 인터페이스를 구현할 수 있도록 지원해주고 있다. 위와 같이, 블루프린트 인터페이스를 생성해준다. 인..
-
문제 설명 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = 4, n = 3 인 경우입니다. 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요. 제한사항 격자의 크기 m, n은 1 이상 100 ..
-
8.3 메서드의 종류 데이터 멤버에 여러 종류가 있듯이 메서드 또한 여러 종류가 있다. 8.3.1 static 메서드 데이터 멤버의 경우와 마찬가지로 메서드도 특정 클래스의 모든 객체에 공통적으로 적용되어야 할 때가 있다. static 메서드의 선언 방법은 데이터 멤버와 같다. 예를 들어 SpreadSheetCell 클래스의 편의 메서드 stringToDouble() 과 doubleToString()을 생각해보자, 이 두 메서드는 객체에 종속되는 부분이 없다. 따라서 static으로 선언해도 된다. 다음은 이 두 메서드를 static으로 선언한 SpreadSheetCell 클래스 정의이다. static std::string doubleToString(double val); static double str..
-
이제 마법에 관한 애니메이션을 전부 적용하였으니, 공격을 하였을 때, 마법이 발사되고, 마법이 충돌하면 폭발하는 과정을 전부 블루프린트로 구현해보자. Wizard FireBall 만들기 우선, 공격시에 손에 들 고 있던 마법을 발사해야 한다. 이런경우 손에 있는 객체를 발사하는 것 보다는. 그 객체를 꺼버리고 그 위치에서 발사체 객체를 생성하고 발사하는것 이 더 효율적이고 코드도 쉽게 작성된다. 손에있는걸 던졌을 때 는 손에 있는 객체를 꺼버린 뒤에, 새로 생성하면 눈으로 볼 때는 그 손에 있는 객체가 발사된것 처럼 보일 것 이다. Actor로 새로운 객체를 생성해보자. 손에 있던 FireBall 과는 다른 객체를 생성한다. 이 블루프린트는 생성된 뒤에 정면으로 발사되게 만들 것 이다. FIreBall은..
-
8.2 여러 종류의 데이터 멤버 C++는 여러 종류의 데이터 멤버를 지원한다. 단순한 데이터 멤버 외에도 특정 클래스의 모든 객체 간에 공유되는 static 데이터 멤버도 있고,const 멤버, 참조 멤버, const 참조 멤버 등 다양하게 존제한다. 8.2.1 static 데이터 멤버 어떤 경우에는 클래스의 객체별로 변수를 따로따로 가지는 것이 너무 중복되거나 의도에 맞지 않을 수 있다. 다시말해, 어떠 ㄴ데이터 멤버가 특정 클래스에 종속되기는 하지만 객체별로 따로 복제본을 가지는 것이 불합리할 수 있다. 예를 들어 각 스프레드 시트마다 순번을 매기려 한다고 하자, 순번을 중복되지 않게 0부터 순차적으로 부여하려면 최종 순번으로 몇 번이 부여되었는지 관리해야 한다. 이 값은 분명 SpreadSheet클..
-
8. 클래스와 객체 마스터하기 8.1 동적 메모리 할당을 통한 객체 생성 메모리가 얼마나 필요할지 프로그램을 실행해보기 전에는 알 수 없는 떄도 있다. 이미 알고 있듯이 이럴 떄에 대한 해답은 동적 메모리 할당이다. 클래스 또한 예외가 아니다. 클래스를 정의 할 때 멤버 객체가 메모리를 얼마나 소요할지 알 수 없는 경우가 있다. 이때 그 객체는 동적으로 메모리를 할당받아야 한다. 동적으로 할당된 객체는 메모리 해제, 객체 복제, 객체 대입 연산 등과 관련해서 조금 까다로운 부분이 있다. 8.1.1 SpreadSheet 클래스 7장에서 만들었던 클래스를 예제로 활용한다. SpreadSheetCell이 그랬듯이 SpreadSheet클래스도 이 장에서 점진적으로 강화해 나갈 것 이다. 각 버전의 SpreadS..