복겟몬 최종 코드

2025. 3. 18. 21:55·C/연습장
/////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h> // isalnum

/* 전역변수 */
char my_bocketmon[4][16] = {"이상해씨", "파이리", "꼬부기", "피카츄"}; // 아스키 아트로 해보자
char enemy[11][20] = {"뚜벅초", "피죤", "토케피", "야도란", "또가스",
"이브이", "버터풀", "치코리타", "잉어킹", "꼬마돌", "나무지기"};

int name_random, level_random;
int swit = 1;
int result; // 최종전투 결과
int special_ex = 5; // 트레이너 처치 시 특별 경험치 (유지보수)

#define ONE 1
// 1렙 기준으로 값 세팅 = 이후 렙업 시, att=렙업+2 이런식으로 늘리기?
int my_ex, my_level=1, my_att=3;
int my_hp, real_hp ;
int enemy_level, enemy_att, enemy_hp;

/* 함수 */
void f_my_bocketmon(); // 복켓몬 고르는 함수

/////////////////////////////////////////////////////////////////////////
/* 메인 */
int main()
{
// 목표: 30층 최종보스 잡고 챔피언이 되는 것!
// 1.포켓몬을 고른다
// 2.전투를 시작한다
// 3.전투가 끝나면 다음 층으로 넘어간다
// 4.5층마다 트레이너를 만난다
// 5.마지막 30층의 트레이너를 만난다
// n레벨 당 필요 경험치: n개
// 렙 1업 당 공격력+2, HP+5

/* 덩어리1) 포켓몬 선택 */
printf("=Welcome to BOCKET_MON world!\n");
printf("함께 모험을 떠날 복켓몬을 고르세요!\n");

for (int i=0; i < 4; i++) // 복켓몬 리스트
{
printf("%s ", my_bocketmon[i]);
}
 
int my_pick; // 나의 선택
printf("입력(1~4): ");
scanf("%d", &my_pick);

for (int i = 1; i <= 4; i++)
{
if (my_pick==i)
{
printf("%s를 고르셨군요.\n", my_bocketmon[i-1]);
}
} // 내 포켓몬 = my_bocketmon[my_pick-1]

 
/* 덩어리2) 전투 */
// 1. 5의 배수인지? n > 전투
// 2. 30층인지? n > 트레이너

my_level = 1, my_att = 3; // 최초 레벨 1일 때 세팅
my_hp = (my_level + 10); //내 피

printf("\n모험을 떠나볼까요?\n");

/* 적 복켓몬 or 적 트레이너 or 최종보스 */
for (int i = 1; i <= 30; i++) // 1층~30층
{

// 경험치가 다 쌓이면 렙업 (같을때라고 하면안됨)
if (my_ex >= my_level)
{
my_level += 1;
my_att += 5;
real_hp += 5;
my_ex = 0; //렙업했으면 경험치 초기화
}

my_hp = (my_level + 10 + real_hp);
 
printf("real:%d, my_hp:%d",real_hp,my_hp);
 
printf("\n%s의 레벨[lv.%d]/ 경험치:%d / 공격력:%d / HP:%d \n"
,my_bocketmon[my_pick-1],my_level,my_ex,my_att,my_hp);

printf("...%d층 도착...\n", i);

// 1. 적 복겟몬
if ((i % 5 != 0)) // 5의배수 층 아닐 때, 적포켓몬 만남
{
/* 적 랜덤 추출 */
printf("적 복켓몬을 만났다! ");
 
//int name_random, level_random;
srand(time(NULL)); // 이게 없으면 값이 고정됨

name_random = (rand() % 11) +1; // 종류: 1~11
printf("%s이다.", enemy[name_random]);

level_random = (rand() % 3) +1; // 레벨: 1,2,3
if (my_level <= 3) // 내 레벨이 1~3이면
{
printf("(lv.%d)\n", (my_level));
enemy_level = my_level;
}
 
else if (my_level > 3) // 레벨이 3 이상이면
{
enemy_level = (my_level - level_random);
printf("(lv.%d)\n", (enemy_level));
}
 
enemy_att = enemy_level;
enemy_hp = enemy_level+2;

while (swit) // 공격 or 치유
{
int attack_or_cure; // 선택지
int cure_chance = 1; // 치료는 1번뿐 (층 바뀌면 기회 충천됨)

// 1. 둘다 피가 있을 때
while (my_hp > 0 && enemy_hp > 0) // or가 아니라 and
{
printf("\n%s의 HP:%d / 적 %s의 HP:%d\n",
my_bocketmon[my_pick-1],my_hp,enemy[name_random],enemy_hp);
printf("무엇을 하겠습니까?[1.공격 / 2.치유]: ");
scanf("%d", &attack_or_cure);

// 1.공격
if (attack_or_cure == 1)
{
printf("적을 공격합니다. ");
enemy_hp -= my_att;
printf("--------------적 HP:(%d)\n", enemy_hp);

printf("%s(이)가 공격합니다. ", enemy[name_random]);
my_hp -= enemy_att;
printf("-우리 애 HP:(%d)\n", my_hp);

// 왜 안넘어가냐고~~~ 와 범위가 문제였음ㅋ..
}

// 2.치유
else if (attack_or_cure == 2)
{
if (cure_chance == 1)
{
printf("치유합니다.\n");
cure_chance = 0; // 치유는 층마다 1번 뿐
my_hp = (my_level + 10 + real_hp);
// 내포켓몬 피 꽉 채워주기

}
else
{
printf("더이상 치유 할 수 없습니다.\n");
break;
}
}

}
// 2. 둘중 하나가 죽었을 때
if (enemy_hp <= 0) // 적이 죽었을 때
{
char next_floor_ask;
printf("\n승리!\n");
my_ex += 1; // 경험치 획득
printf("현재 레벨:%d / 현재 경험치:%d\n",my_level,my_ex);

printf("\n다음 층으로 가시겠습니까?(y/n): ");
getchar();
scanf("%c", &next_floor_ask);

if (next_floor_ask == 'y')
{
printf("다음 층으로 넘어갑니다.(enter)\n");
getchar();
break;
}
else{
printf("다시 전투를 시작합니다.(enter)\n\n");
enemy_hp = enemy_level+2;
my_hp = (my_level + 10 + real_hp);
getchar();
continue;
}
getchar();
}

else if (my_hp <= 0) // 내 포켓몬이 죽었을 때
{
printf("패배\n");;
return 0;
}
}
}

// 2. 적 트레이너
else if (i % 5 == 0 && i<30) // 5의배수 층일 때, 적트레이너 만남
{
enemy_level = (i*2);
enemy_att = (i+5);
enemy_hp = (enemy_level);

printf("적트레이너를 만났다!!\n");
printf("적 복겟몬은 %s(lv.%d)이다.",enemy[name_random],enemy_level);

while (1) // 공격 or 치유
{
int attack_or_cure; // 선택지
int cure_chance = 1; // 치료는 1번뿐 (층 바뀌면 기회 충천됨)
 
// 1. 둘다 피가 있을 때
while (my_hp > 0 && enemy_hp > 0) // or가 아니라 and
{
printf("\n현재 %s의 HP:%d / 적 %s의 HP:%d\n",
my_bocketmon[my_pick-1],my_hp,enemy[name_random],enemy_hp);
printf("무엇을 하겠습니까?[1.공격 / 2.치유]: ");
scanf("%d", &attack_or_cure);

// 1.공격
if (attack_or_cure == 1)
{
printf("적을 공격합니다. ");
enemy_hp -= my_att;
printf("--------------적 HP:(%d)\n", enemy_hp);

printf("%s(이)가 공격합니다. ", enemy[name_random]);
my_hp -= enemy_att;
printf("-우리 애 HP:(%d)\n", my_hp);

// 왜 안넘어가냐고~~~ 와 범위가 문제였음ㅋ..
}

// 2.치유
else if (attack_or_cure == 2)
{
if (cure_chance == 1)
{
printf("치유합니다.\n");
cure_chance = 0; // 치유는 층마다 1번 뿐
my_hp = (my_level + 10 + real_hp);

}
else
{
printf("더이상 치유 할 수 없습니다.\n");
break;
}
}

}

// 2. 둘중 하나가 피가 없을 때
if (enemy_hp <= 0) // 적이 죽었을 때
{
char next_floor_ask;
printf("\n승리!\n");
my_ex += special_ex; // 경험치 획득
printf("트레이너를 무찔러 경험치를 %d나 얻었다!\n",special_ex);

printf("\n다음 층으로 가시겠습니까?(y/n): ");
getchar();
scanf("%c", &next_floor_ask);

if (next_floor_ask == 'y')
{
printf("다음 층으로 넘어갑니다.(enter)\n");
getchar();
break;
}
else{
printf("다시 전투를 시작합니다.(enter)\n\n");
enemy_hp = enemy_level;
my_hp = (my_level + 10 + real_hp);
getchar();
continue;
}
getchar();
}

else if (my_hp <= 0) // 내 포켓몬이 죽었을 때
{
printf("패배\n");
return 0;
}
}
}

// 3. 최종 보스
else
{
char boss = "흑화한 주영몬";
printf("드디어 30층이다..!\n");
printf("최종보스 '흑화한 주영몬'을 만났다;;\n");
enemy_level = 60;
enemy_att = 30;
enemy_hp = 100;

int attack_or_cure; // 선택지
int cure_chance = 1; // 치료는 1번뿐 (층 바뀌면 기회 충천됨)
 
// 1. 둘다 피가 있을 때
while (my_hp > 0 && enemy_hp > 0) // or가 아니라 and
{
printf("\n현재 %s의 HP:%d / 주영몬의 HP:%d\n",
my_bocketmon[my_pick-1], my_hp, enemy_hp);
printf("무엇을 하겠습니까?[1.공격 / 2.치유]: ");
scanf("%d", &attack_or_cure);

// 1.공격
if (attack_or_cure == 1)
{
printf("적을 공격합니다. ");
enemy_hp -= my_att;
printf("--------------적 HP:(%d)\n", enemy_hp);

printf("주영몬이 공격합니다. ");
my_hp -= enemy_att;
printf("-우리 애 HP:(%d)\n", my_hp);

// 왜 안넘어가냐고~~~ 와 범위가 문제였음ㅋ..
}

// 2.치유
else if (attack_or_cure == 2)
{
if (cure_chance == 1)
{
printf("치유합니다.\n");
cure_chance = 0; // 치유는 층마다 1번 뿐
my_hp = (my_level + 10 + real_hp);

}
else
{
printf("더이상 치유 할 수 없습니다.\n");
break;
}
}

}

// 2. 둘중 하나가 피가 없을 때
if (enemy_hp <= 0) // 적이 죽었을 때
{
char next_floor_ask;
printf("승리!\n");
printf("축하합니다! 당신은 복겟몬 마스터~\n");
getchar();
}

else if (my_hp <= 0) // 내 포켓몬이 죽었을 때
{
printf("ㅠㅠ졌습니다..마스터가 되고싶었는데..!\n");
return 0;
}
}
 
// 전투가 끝나고 반영을 해줘야하니까 전투끝에 위치
}
 
printf(" end ");

//끝지점
return 0;
}

/////////////////////////////////////////////////////////////////////////

'C언어 > 연습장' 카테고리의 다른 글

포인터 공부  (0) 2025.04.01
포인터 연습  (0) 2025.03.27
복켓몬 코드 정리  (0) 2025.03.18
로또 - 최종 코드 (디버깅 필요)  (0) 2025.03.16
로또 / 덩어리3 함수화 하기 전  (0) 2025.03.16
'C/연습장' 카테고리의 다른 글
  • 포인터 공부
  • 포인터 연습
  • 복켓몬 코드 정리
  • 로또 - 최종 코드 (디버깅 필요)
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • 일지 (19)
      • 계획표 (7)
      • C언어 (35)
        • 연습장 (12)
      • 과제 (2)
      • C++ (3)
      • python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
복겟몬 최종 코드
상단으로

티스토리툴바