C언어/구현·실습

c++을 이용한 게임코딩

write76465 2026. 3. 6. 20:57

c++을 이용한 게임시스템 만들기!

필수 구현 기능


  1. 캐릭터 스탯 상자 만들기
    • [ ] int형 배열을 사용하여 HP, MP, 공격력, 방어력을 int형 배열로 선언하고, 0으로 초기화 합니다.
      • 예시) 배열 이름이 status라면 status[0]은 HP, status[1]은 MP, status[3]은 방어력

  1. 깐깐한 입력 검사
    • [ ] 입력 순서 : HP/MP 입력 후 → 공격력/방어력 입력
    • [ ] HP와 MP : 하나라도 50 이하를 입력하면 안됩니다.
      • [ ] 이 경우 다시 입력하라는 안내를 출력합니다.
      • [ ] 다시 입력받을 수 있게 합니다.
    • [ ] 공격력과 방어력 : 하나라도 0 이하를 입력하면 안됩니다.
      • [ ] 이 경우 다시 입력하라는 안내를 출력합니다.
      • [ ] 다시 입력받을 수 있게 합니다

  1. 스탯 관리 시스템 1 : 메뉴판 무한 루프
    • [ ] 0번(종료)을 누르기 전까지는 아래 선택지가 계속 나와야 합니다.
      • 1.HP UP / 2.MP UP / 3.공격력 UP / 4.방어력 UP / 5.현재 능력치 / 6.Level Up / 0.나가기
      • 순서 : 선택지를 출력 → 유저로부터 int형 정수(번호) 하나를 입력 받기 → 선택지를 실행

  1. 스탯 관리 시스템 2 : 포션 시스템
    • [ ] setPotion 함수를 만듭니다.
      • [ ] HP/MP 포션을 각각 5개씩 기본 지급합니다. (포션 개수로 5 저장)
      • [ ] 함수는 아래와 같이 정의합니다.
      void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
      
    • [ ] 각 선택지에 따라 다음과 같은 기능이 실행됩니다.
      • [ ] 1번 : 포션을 써서 MP를 20 올리고, 포션 개수를 1개 줄입니다.
      • [ ] 2번 : 포션을 써서 HP를 20 올리고, 포션 개수를 1개 줄입니다.
        • 주의! 포션이 0개면 사용할 수 없습니다.
      • [ ] 3번 : 공격력을 2배로 만듭니다.
      • [ ] 4번 : 방어력을 2배로 만듭니다.
        • 2배로 만드는 연산에는 두 가지 방법이 있어요. 잘 생각해보시고 사용해보세요!
      • [ ] 5번 : 현재 HP, MP, 공격력, 방어력을 출력해줍니다
      • [ ] 6번 : 레벨 업! 포션을 1개씩 다시 더해줍니다.
      • [ ] 0번 : 프로그램을 종료합니다.

여기있는 기능들이 다 잘 돌아갈수있도록 만들어보겠습니다.

 

먼저 hp mp 공격력 방어력을 담을 배열을 하나 선언해야 합니다.

메인함수에 배열 선언을 해주겠습니다.

방이 4개인 배열을 만들어줍시다.

그리고 우선 hp mp를 입력받기위한 입력창을 만들고

두개가 50 아래로 떨어지면 다시 입력을 받게하기 위해서 처음에 while(1)문을 이용하여 

돌린 다음 if 조건문으로 만약 50아래로 떨어지게 된다면 다시 입력하라는 문구를 출력하고 계속 루프를 돌게 만들고

둘 다 50 이상을 입력했다면 while문을 탈출하도록 만들겠습니다.

while문을 2개 사용해서 hp mp와 공격력 방어력을 순차적으로 돌게 하고 알맞게 입력했다면 break;로 탈출시켜줍시다.

그리고 메인 스

탯관리창 또한 반복시켜줄껀데 먼저 포션 함수를 만들어보겠습니다.

 

포션 함수선언, 포인터를 역참조하여서 count에 1이들어가면 hp포션 -1, 2가 들어가면 mp포션 -1, 3이 들어가면 둘 다 +1 시켜주는 조건문을 넣어주었습니다.

그리고 이제 메인 스탯 관리창을 만들어줍니다. while(1)으로 무한루프를 만들어주고

과제보다 좀 더 다양한 효과를 주고싶어서 다른 기능들도 추가해 보았습니다.

정수형 변수 sel을 만들고 sel값을 입력값으로 설정후에 조건문을 돌리는 방식입니다.

우선 1번을 누르면 체력이 50 올라가고 포션 갯수가 1개 줄어야 하기때문에 함수값을 이어받을 변수 두개를 설정해주겠습니다.

hpcnt는 함수의 체력포션을mpcnt는 마나포션을 이어받을것이고 두개의 기본값을 5로 설정해둔 모습입니다.

이제 조건문을 이용하여 1번을 입력하면 체력을 회복하고 포션갯수가 줄어드는 실행문을 만들어보겠습니다.

우선 포션의 갯수가 0이하라면 포션이 부족하다는 문구를 출력시키고 아니라면 정상작동하도록 설정해두었습니다.

포션함수를 가져와 첫번째 정수값에 1을 선언 해줬으므로 함수내의 조건문에 따라서 체력포션이 1개 줄어듭니다.

(주의 할점: 함수내의 체력포션값을 포인터로 지정했기때문에 변수의 값앞에 &를 붙여서 변수의 주소값을 가져와야합니다.)

포인터를 사용하는 이유는 함수내의 값이 그냥 기본 정수형일경우 얕은복사가 되기때문에 메인 함수에서의 값이 줄어들지 않고

계속 초기화되기 때문에 주소값 내부의 값 자체를 바꿔서 수정해줍니다.

 

그리고 2번을 입력하여 마나를 회복시키는 실행문도 똑같이 작동시켜줍니다.

 

다음 3번을 입력하면 공격력이 올라가는 실행문.

+=를 사용하여 2배 증가시켜주는 모습

방어력은 공격력과 유사하기 때문에 넘어가겠습니다.

 

다음 5번을 입력하면 상태창 현재 상태가 나오는 실행문입니다.

가지고있는 모든 능력치를 볼수있는 모습입니다.

 

6번을 누르면 레벨업이 되는 실행문으로 저는 자금을 추가했기때문에 돈도 1000원 얻을수있도록 

만들어주었습니다. 돈도 money라는 변수를 메인함수에 적어놓아야합니다.(레벨도 마찬가지입니다.)

 

아까 함수에 지정해둔 조건문에 따라 함수 count값에 3이 들어갔으므로 포션 두개가 모두 +1 됩니다.

그리고 level이라는 변수를 메인함수에 만들어 레벨업하면 1렙씩 올라가게도 만들어두었습니다.

 

7. 포션 상점입니다.

포션을 하나씩 살수있고 가격은 하나에 500원으로 설정되어있습니다.

 

500보다 적은 금액을 가지고있다면 잔액이 부족합니다 출력

1번 입력시 체력포션을 살수있고 2번 입력시 마나포션을 살수있는 실행문입니다.

sel2를 변수로 두고 입력받습니다. 1,2 외의 다른값을 입력 시 자동으로 나가지게 만들었습니다.

 

 

 

8.사냥하기

사냥하면 체력과 마나 50을 잃고 만약 체력이 0이 된다면 사망 출력후 break;문으로 시스템을 종료시키도록

했습니다. mp가 모두 소모되면 바로 사냥을 종료하고 mp는 마이너스가 되면 안되므로 mp값을 0으로 초기화 해준 후에

continue;를 통해서 사냥이득을 챙기지 못하고 바로 빠져나가도록 만들었습니다.

사냥을 성공한다면 힘 능력치, 민첩 능력치, 레벨업(레벨업 하면 포션 하나씩이 생기므로 그것도 포함), 자금획득을 할수있도록 만들었습니다.

 

9.책읽기 

책읽으면 지능이 올라갑니다.

 

0. 나가기 

시스템이 종료됩니다.

 

그 외의 입력 

잘못된입력이라고 출력합니다.

 

메인 함수에 선언된 변수의 값들입니다

처음 stat는 체력, 마나, 공격력, 방어력을 담는 배열이고

두번째 statValue는 힘, 민첩, 지능을 담는 배열

3번째와 4번째는 체력포션의 함수값과 마나포션의 함수값을 담을 변수

5번은 레벨

6번은 돈입니다.

 

원래는 없던 포션상점을 위한 함수값을 따로 설정해두었습니다.

1이 들어가면 hp포션 +1

2가 들어가면 mp포션 +1이 되도록만들어둔 함수입니다.