1. 문제
Huma의 Food 먹기 게임
게임에는 Human, Monster, Food의 객체가 등장하며, 이들은 10x20 격저판에서 각각 정해진 규칙에 의해 움직인다. Human 객체는 사용자의 키에 의해 왼쪽(a 키), 아래(s 키), 위(d 키), 오른쪽(f 키)으로 한칸씩 움직이고, Monster는 한 번에 2칸씩, 왼쪽, 아래, 위, 오른쪽 방향으로 랜덤하게 움직인다. Food는 5번 중에 3번은 제자리에 있고, 나머지 2번은 4가지 방향 중 랜덤하게 한 칸씩 움직인다.
게임은 Hyman이 Monster를 피해 Food를 먹으면(Food의 위치로 이동) 성공으로 끝나고, Monster가 Food를 먹거나 Human이 Monster에게 잡히면 실패로 끝난다.
다음은 각 객체의 이동을 정의하는 move()와 각 객체의 모양을 정의하는 getShape() 함수를 순수 가상 함수로 가진 추상 클래스 GameObject이다. GameObject를 상속받아 Human, Monster, Food 클래스를 작성하라. 그리고 전체적인 게임을 진행하는 Game 클래스와 main() 함수를 작성하고 프로그램을 완성하라.
2. 결과


3. 코드
4. 설명
GameObject를 상속받는 Human, Monster, Food 클래스와
전체적인 게임을 진행하는 Game 클래스를 작성하면 된다.
Game 클래스의 game메소드는 3개의 객체를 각각 하나씩 생성하며 시작한다.
GameObject 클래스에서 순수 가상 함수 선언한 move()와 getShape를 Human, Monster, Food 클래스의서 알맞게 구현한 후 호출하면 된다.
설명은 중간중간 주석으로 입력해놨습니다.
+ rand() % 4 = 랜덤 수를 구합니다. 왼쪽식의 결과로는 0~3 사이의 수를 얻을 수 있습니다.
rand()로는 0~32000정도의 수를 얻어오는데 이 수 중 어느 수라도 4로 나눈 후 나머지는 0~3이기 때문입니다.
+ srand((unsigned)time(0)); = 보통 위 rand()와 연계하여 사용하는 것 입니다. 이를 입력해주어야 실행 때마다 다른 결과를 얻을 수 있습니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 1번 (0) | 2019.05.09 |
---|---|
명품 C++ programming 10장 Open Challenge (0) | 2019.05.09 |
명품 C++ programming 실습문제 9장 10번 (0) | 2019.05.04 |
명품 C++ programming 실습문제 9장 9번 (0) | 2019.05.04 |
명품 C++ programming 실습문제 9장 7번, 8번 (0) | 2019.05.03 |