2026/03 32

C++ 팀프로젝트 - 텍스트 RPG 게임 만들기(4)

몬스터 턴은 수행 후 바로 턴이 끝나버려서 실드가 적용되지 않는다. 몬스터의 실드는 다음 턴까지 유지되는 것으로 바꿨다. #pragma once#include "Character.h"class Monster : public Character {public: Monster(int HP, Dice& CharacterDice, string Name) : Character(HP, CharacterDice, Name), IsShieldTurn(false) {}; virtual void TakeShield(int Shield_) { if (Shield_ Shield = 0; } this->Shield += Shield_; Is..

C++ 팀프로젝트 - 텍스트 RPG 게임 만들기(2)

사운드 기능을 만들어보면 좋을 것 같다. void EndTurn(); 추가 전투중이 아닐 때 다이스를 볼 수 있게 만듦레벨업 시에는 MaxHP += 3 해주기 죽은 상태죽으면 체력은 0 고정 아이템 힐링포션 HP+5 TakeHealTakeShield 테이크 데미지에서 데미지를 받을 수 있게 조정 현재 경험치가 목표 경험치에 도달하면 레벨업 나중에 주사위 면을 강화하기 const 멤버변수는 초기화 리스트나 선언 시에 초기화해야한다. 생성자 본문에서는 안 됨. 함수 리팩토링// 대미지 입음void Character::TakeDamage(int Damage){ // 대미지 계산 int Damage_ = Damage - Shield; // 실드가 데미지보다 크면 0 대미지로 처리 if ..

C++ 팀프로젝트 - 텍스트 RPG 게임 만들기(1)

첫번째 팀프로젝트로 C++을 사용한 턴제 전투가 있는 RPG를 만들기로 하였다. 우리 조는 슬라이스 앤 다이스라는 주사위를 이용한 로그라이크 턴제 RPG게임을 모작하기로 했다. Github 리포지토리 생성Github 리포지토리를 새 프로젝트에 충돌없이 연결하려면 이렇게 진행하면 된다.Github에서 ReadMe, .gitIgnore 없이 빈 리포지토리를 생성한다.비주얼 스튜디오로 새 프로젝트를 만들고, 해당 디렉토리를 git init으로 리포지토리로 만든다.Git 주소를 원격 리포지토리로 설정한다..gitignore 파일을 직접 생성한다.파일 커밋 후 Push한다. 만약 리포지토리 생성할 때 ReadMe나 .gitIgnore를 만들었다면, 파일이 충돌하므로 리포지토리를 새로 만들거나 force push를..

C++ 기초 - 찾고, 자르고, 바꾸기

stringstring은 사실 vector의 사촌문자(char)를 연속 메모리에 담는 것 find - 검색 위치를 반환s.find("World")를 호출하면 시작 인덱스(위치)를 반환한다.npos="no position"의 줄임말size_t pos = s.find("검색어");if(pos != string::npos){ // pos는 시작 위치}find를 쓰면 반드시 npos 체크!find의 두 번째 매개변수어디서부터 찾을지를 지정ctrl + F 등에서 사용s.find("Hello", 7)시간 복잡도: 최악O(n*m)(원본 길이*검색어 길이) substr 파일 확장자 분리filename = "game_save.dat"find('.') -> 위치 9substr(0,9) -> "game_save" (파일명)..

Unreal 부트캠프 - C++ 블루프린트 클래스 만들기 과제

https://igae-dev.tistory.com/86 C++ 기초 - 언리얼 엔진 기본 개념언리얼 엔진은 기존에 설치해두었으므로, C++을 언리얼에 적용하는 부분을 중점적으로 필기한다. Visual Studio도 2022 버전이 이미 설치되어 있으므로 C++을 사용한 게임 개발 도구만 추가되어있는지igae-dev.tistory.com 이 이후 기초적인 C++ 블루프린트 클래스 만들기 과제를 진행하였다.근데 뭘 알려주고 과제를 하라고 해야지 C++ 액터만들기 달랑 알려주고 움직임 구현하라는 게 맞나?강의 대신 클로드가 열일해줬다. 생성한 Cpp 액터 클래스 우클릭하면 Create Blueprint class based on CppCharacter 컨텐트 폴더 아래 블루프린트 폴더 생성부터 해주고 우..

게임 스토리 만드는 툴, Twine

https://twinery.org/ Twine / An open-source tool for telling interactive, nonlinear storiesEach of Twine's built-in story formats has an online guide: Chapbook Harlowe Snowman SugarCubetwinery.org 게임 스토리 만들기에 대해 찾아보다가 이러한 툴을 언급한 글을 보고 찾아보았다. 만져보니 게임북 형식의 텍스트 어드벤처 게임 만들기에 적합한 것 같고, itch.io로 바로 내보내기도 가능한 듯하다. 아직 툴을 잘 몰라 툴 내에서 변수 조작이나 노드 관리를 하기는 어렵지만, 이걸로 게임 스토리를 짜보는 것도 괜찮겠다.

C++ 기초 - 포션 공방 만들기 과제

4번 과제 구현하며 정리한 점을 적는다. map에 원소 넣는 방법 3가지 std::map m;// [] 연산자 - 키가 없으면 추가, 있으면 덮어쓰기m["sword"] = 100;m["sword"] = 999; // 덮어씀// insert - 키가 이미 있으면 무시 (덮어쓰기 안 함!)m.insert({"sword", 999}); // sword 이미 있으면 그냥 무시m.insert(std::make_pair("bow", 300)); // 구식 방법// emplace - insert랑 동작 같은데 성능이 더 좋음m.emplace("sword", 999); // sword 이미 있으면 그냥 무시find 함수 쓰는법PotionRecipe searchRecipeByName(std::string name) {..

C++ 기초 - Vector 템플릿 구현하기

인벤토리처럼 Vector 템플릿을 구현하는 언리얼 내일배움캠프 3번 과제를 구현하는 과정에서 알게 된 것을 적는다. 1. 템플릿 클래스는 헤더와 구현 파일로 나눌 수 없다.템플릿은 타입이 정해져야 코드가 생성되기 때문에, 구현을 헤더에 같이 둬야 한다.2. const int&은 상수, 변수 둘 다 받을 수 있는 참조 타입이기 때문에 안전하다.void func(const int& a) { }func(5); // ✅ 리터럴도 OKfunc(x); // ✅ 변수도 OKconst int y = 10;func(y); // ✅ const도 OK복사 없음 + 수정 불가 + 뭐든 받을 수 있음 → 가장 안전하고 효율적! 3. item은 item이라는 기본 클래스를 상속 받아서 구현해보았다.#pragma ..