2 몬스터 때려잡기! #
- 아래 예제는 다음과 같은 순서로 실행됩니다.
- 몬스터 체력과 플레이어 체력 중 하나가 0 이하가 되었는지 검사하고, 둘중 하나라도 0 이하면 누가 승리했는지 표시하고 게임을 종료합니다.
- 우선 몬스터의 체력과 플레이어의 체력을 표시합니다.
- 주먹, 권총, 수류탄중에서 공격할 무기를 선택합니다.
- 난수발생기를 사용하여 몬스터가 입은 데미지를 계산하고 그 결과를 출력합니다.
- 난수발생기를 사용하여 플레이어가 입은 데미지를 계산하고 그 결과를 출력합니다.
- 1번으로 돌아가 계속 반복합니다.
- 우선 기본 소스입니다.
2.1 소스 #
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int monster_hp = 100;
int player_hp = 100;
void main()
{
srand((unsigned)time(NULL));
while(1) // 무한히 반복합니다.
{
int attack_type;
// 만약에 몬스터가 죽었으면 플레이어가 이긴 것을 출력.
if (monster_hp <= 0) {
printf("몬스터가 죽었습니다! 축하합니다!\n");
break;
}
// 만약에 플레이어가 죽었으면 게임 오버 표시.
if (player_hp <= 0) {
printf("당신은 죽었습니다...Game Over.\n");
break;
}
// 우선 현재 몬스터와 플레이어의 상태를 출력합니다.
printf("몬스터HP : %d, 플레이어HP : %d\n", monster_hp, player_hp);
// 공격형태를 묻습니다.
printf("어떻게 공격하시겠습니까? (0=주먹, 1=권총, 2=수류탄) : ");
scanf("%d", &attack_type);
// 주먹일 경우 처리
if ( attack_type == 0 ) {
int attack_point = rand() % 5;
if (attack_point > 0)
printf("몬스터에게 %d만큼의 데미지를 입혔습니다.\n", attack_point);
else
printf("몬스터가 꿈적도 하지 않네요. -_-;\n");
monster_hp = monster_hp - attack_point;
}
// 권총일 경우 처리
else if ( attack_type == 1 ) {
int attack_point = rand() % 10;
if (attack_point > 0)
printf("몬스터에게 %d만큼의 데미지를 입혔습니다.\n", attack_point);
else
printf("몬스터가 꿈적도 하지 않네요. -_-;\n");
monster_hp = monster_hp - attack_point;
}
// 수류탄일 경우 처리
else if ( attack_type == 2 ) {
int attack_point = rand() % 40;
if (attack_point > 0)
printf("몬스터에게 %d만큼의 데미지를 입혔습니다.\n", attack_point);
else
printf("몬스터가 꿈적도 하지 않네요. -_-;\n");
monster_hp = monster_hp - attack_point;
}
// 몬스터가 공격할 차례.
{
int monster_attack_point = rand() % 20;
if (monster_attack_point > 0)
printf("몬스터가 때려서 %d만큼의 데미지를 입었습니다. 아, 아프다~\n", monster_attack_point);
else
printf("몬스터가 공격했지만 간만의 차이로 피했습니다.\n");
player_hp = player_hp - monster_attack_point;
}
}
system("PAUSE");
}
3 수정 2 : switch 문을 적용한 동일한 예제 #
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int monster_hp = 100;
int player_hp = 100;
void main()
{
// 난수발생기 초기화
srand((unsigned)time(NULL));
while(1) // 무한히 반복합니다.
{
int attack_type, attack_point;
// 만약에 몬스터가 죽었으면 플레이어가 이긴 것을 출력.
if (monster_hp <= 0) {
printf("몬스터가 죽었습니다! 축하합니다!\n");
break;
}
// 만약에 플레이어가 죽었으면 게임 오버 표시.
if (player_hp <= 0) {
printf("당신은 죽었습니다...Game Over.\n");
break;
}
// 우선 현재 몬스터와 플레이어의 상태를 출력합니다.
printf("몬스터HP : %d, 플레이어HP : %d\n", monster_hp, player_hp);
// 공격형태를 묻습니다.
printf("어떻게 공격하시겠습니까? (0=주먹, 1=권총, 2=수류탄) : ");
scanf("%d", &attack_type); // &를 반드시 붙여야합니다!
switch (attack_type)
{
case 0 : // 주먹일 경우 처리
attack_point = rand() % 5;
break;
case 1 : // 권총일 경우 처리
attack_point = rand() % 10;
break;
case 2 : // 수류탄일 경우 처리
attack_point = rand() % 40;
break;
}
if (attack_point > 0)
printf("몬스터에게 %d만큼의 데미지를 입혔습니다.\n", attack_point);
else
printf("몬스터가 꿈적도 하지 않네요. -_-;\n");
monster_hp = monster_hp - attack_point;
// 몬스터가 공격할 차례.
{
int monster_attack_point = rand() % 20;
if (monster_attack_point > 0)
printf("몬스터가 때려서 %d만큼의 데미지를 입었습니다. 아, 아프다~\n", monster_attack_point);
else
printf("몬스터가 공격했지만 간만의 차이로 피했습니다.\n");
player_hp = player_hp - monster_attack_point;
}
}
system("PAUSE");
}









![[http]](/wiki/imgs/http.png)
