본 캠프 TIL

26.04.24 TIL / C언어 4-2 ~ 5-2 / UE5 Day5

jh009 2026. 4. 24. 20:58

C언어 세션 5일차

4-2. for문

조건식을 더 짧게 쓸 수 있음

for (초기식; 조건식; 증감식)
{
	명령어1;
	...
}

Ex)
int = 1; // 초기식

while (i < 5) 조건식

++i // 증감식

 

Ex040201) for문 [중요 샘플 코드]

 

Ex040205) 최소값

// Main.c

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <limit.h>

int main(void)
{
	int i;
    int input;
    int Min = INT_MAX;
    
    for (i = 0; i < 5; ++i)
    {
    	scanf("%d , &Input")
        
        if (Input < Min)
        {
        	Min = Input;
        }
    }

	printf("%d", Min);

	return 0;
}

4-3. do-while문

조건식 검사 없이 1회 순회(do) 후에 조건식 검사 후 다음 순회 진행

do
{
	명령어1;
	...
} while (조건식)

 

Ex040301) do-while문

// Main.c

#include <stdio.h>

int main(void)
{
	int i = 0, Boom = 5;

	do
	{
		printf("%d...\n", i);

		++i;
	} while (i < Boom);

	printf("BOOM!!!");

	return 0;
}

4-4. 무한 반복문, break, continue

무한 반복문

 

for문보다는 while문으로 구현하는 경우가 많음

int i;
for (i = 1; 1; ++i) // 조건식을 1이 아닌 그냥 비워두어도 참으로 간주됩니다.
{
	명령어1;
	...
}
```

 

 

falsy와 while의 조건문

while (0) // 0은 true일까요 false일까요? → False
{
	명령어1;
	...
}

 

break

반복문이나 switch-case문에서 탈출 할 때 break 구문을 사용. 해당 스코프에서만 탈출

다중 반복문 전체를 다 탈출하는게 아님에 주의

while (1)
{
	while (2)
	{
		break; // while (2) 반복문만 탈출됨.
	}
}

 

continue

특정 부분을 반복하고싶을때 쓰면 됨 

  • 반복문에서 continue 구문을 만나면 해당 회차는 건너뛰고 다음 회차 진행
  • 반복문을 아예 탈출하는 게 아닌 특정 순회 번째만 무시
  • 특정 순회에서는 아무 일도 안하고 다음 순회로 가고 싶을 수 있기 때문
// if (i % 2 == 1)가 Ture여서 continue; 로 가면 다시 if문으로 올라옴

if (i % 2 == 1) 
		{
			++i;
			continue;
		}

 

// Main.c

#include <stdio.h>

int main(void)
{
	int i = 0;

	while (1)
	{
		if (i % 2 == 1)
		{
			++i;
			continue;
		}

		if (5 <= i)
		{
			break;
		}

		printf("%d ", i);

		++i;
	}

	return 0;
}

4-5. 이중 반복문

순회 변수로 i, j, k, … 순으로 작성

int i, j;

for (i 초기식; i 조건식 ; i 증감식)
{
    for (j 초기식; j 조건식 ; j 증감식)
    {
        명령어;
        ...
    }
}

 

Ex040501) “천천히 읽기”와 이중 반복문 [중요 샘플 코드]



이중 반복문 꿀팁

 

1. 줄의 개수를 파악하고 줄 번호 매기기.

2. 각 줄의 칸 개수를 파악하고 칸 번호 매기기.

3. 각 칸의 출력을 적기.


5-1. 1차원 배열

배열

  • 자료구조 중 가장 기초가 되는 자료구조
  • 사용할 메모리 크기를 고정해서 선언하는 것이 특징
  • 선언된 후에는 절대 그 크기를 변경 불가
  • 정적인 자료구조
배열 호텔 

// 선언 방법
자료형 배열명[배열크기];
	// 자료형 변수명;


// 선언과 동시에 초기화 방법
자료형 배열명[배열크기] = { 값0, 값1, ..., 값(배열크기-1) };
// 자료형 호텔명[객실개수] = { 사람0, 사람1, ..., 사람(객실개수-1) };
	// 자료형 변수명 = 값;

Ex050101) 배열 1 [중요 샘플 코드]

 

 

배열 관련 고찰

  • 배열의 index는 항상 0부터 시작
  • 대부분의 소스코드들은 0부터 시작하기 때문에 익숙해질 필요가 있음

 


5-2 : 2차원 배열

2차원 배열

// 선언 방법
자료형 배열명[배열크기1][배열크기2];

// 선언과 동시에 초기화 방법
자료형 배열명[줄개수][칸개수] = { { 값00, 값01, ..., 값0(칸개수-1)},
                                             ...
                              { { 값(줄개수-1)0, 값(줄개수-1)1, ..., 값(줄개수-1)(칸개수-1) } };
                                      
// 자료형 호텔명[줄개수][칸개수] = { { 객실00,         객실01,          ... , 객실0(칸개수-1)},
//                                              ...
//                               { { 객실(줄개수-1)0, 객실(줄개수-1)1, ... , 객실(줄개수-1)(칸개수-1) } };

 

 

"%2d" → 2칸확보 후 적어라


Blueprint FPS 슈팅 게임 개발 5일차

아이템, 게임 모드, HUD & 완성

포션을 배치했을 때 NavMesh이 없어지는 경우

BP_Item_Health → Collision Presets를 Custom으로 설정

→ Collision Enabled → No Collision 으로 선택하면 없어질거임


총알 아이템 배치

BP_Item_Ammo 복붙 후

 

  • 변수 HealAmount → AmmoAmount로 변경 ( 변수타입을 Integer / 나중에 바꾸는게 오류없어서 편함)
  • AmmoAmount를 30으로 설정
  • StaticMesh(외형) 변경

BP_FPSCharcrter → AddHealth 선택 후 복제 (로직이 거의 비슷함)

→ AddAmmo로 이름변경 후 type을 Integer로 변경

MIN 은 총알이 30발 넘지 않게끔 설정해줌


변수 BaseDamage 생성 후 25로 설정

 

변수 MaxHealth / BaseDamage 눈 표시 클릭 

→ 레벨에 있는 개미들(인스턴스)의 체력을 각각 제어 가능

 

개미 하나만 크기도 키우고, 체력 300 , 공격력 80 으로 설정 가능


만들었던 인스턴스와 아이템 배치

  • 플레이어는 2층 안전한 곳에 리스폰하게 만들었음.
  • 바로 앞 적 하나를 바로 마주칠 수 있게 하였음. (튜토리얼 느낌)

 

  • 처음 적을 처치, 혹은 폭발 공격을 당한 뒤, 앞으로 오게 되면 자연스럽게 아이템과 상호작용 할 수 있게 배치를 하였음. 
  • 1인칭 시점에서 최대한 넓게 맵을 둘러 볼 수 있게끔 아이템을 배치하였음.

 

  • 특정 어두운 부분은 Point Light로 밝게 해주었음


게임모드 & 패키징

UI 폴더 안에서 User Interface → Widget Blueprint

 

Canvas Panel 배치 → Text 배치

버튼 → Is Variable 체크


Blueprints → GameMode 파일 생성

Blueprint Class → Game Mode Base 선택

이름은 BP_MainGameMode

 

변수 Main HUD → Object Reference → WBP Main HUD

 

Window → Place Acotrs / World Settings 체크

 

FPS_Character를 삭제 → Place Acotrs → Player 검색 후 레벨에 배치

 

World Settings

  • GameMode Override → BP_MainGameMode선택 
  • Selected GameMode → Default Pawn Class를 BP_FPSCharacter로 변경

 

  • Result 텍스트와 버튼 Detail → visibility 검색 후 → Collapsed
  • 게임 끝난 후 다시 Visible로 선택하면 됨

 

BP_MainGamemode 

UpdateRemainingTime 타입: Float

Inputs에 DeltaTime을 설정 / 타입: Float

남은 시간은 120 (2분) 으로 설정

 

 

이름 제대로 안바꾸면 Get Time 쳐도 절대 안나옴 ★★★★★

 

 

Event Tick → Update Remaining Time 연결

 

Format Text에 {Minutes}:{Seconds} 형식으로 넣기

 

0초 이하일 때 0으로 잘 고정된다면

변수 IsWin (boolean) 생성 → 승리 한 후에 다른 로직으로 인해서 게임이 다시 패배가 되거나 하는 것을 막기 위함

 

남은시간이 0이하일때 Result에 “게임 패배!” 문자열 등록하고 Result 보이게 설정

 

 

WBP_MainHUD → 버튼 클릭 → Events 에 On Clicked이 있었음;; (Graph 들어가서 검색해도 따로 안나옴)

 

Disable Input 노드로 게임 종료 후 플레이어가 움직이지 못하게 설정

 

Set Input Mode UI Only노드 및 Show Mouse Cursor노드를 연결

ㄴ UI를 클릭할 수 있게, 마우스 커서를 보여줌