메인루프
- 입력
- 로직
- 렌더링
FPS(Frame Per Second)
- 메인루프가 초당 몇번 실행(처리)되고 있는지
- 60 FPS -> 초당 60번 메인루프가 처리됨
- 60 FPS -> Good
- 30 FPS -> Bad
- 즉, 메인루프의 처리속도가 느려진다면 FPS는 감소함
전체 코드
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
namespace Rookiss_CSharp
{
// https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part2
// 3강 환경설정
class Program
{
// 길찾기 알고리즘이 중요한 이유 : 길찾기는 게임 캐릭터나 몬스터가 장애물을 피해 목표 지점까지 경로를 찾는 데 필수적, 특히 서버에서 동작하는 AI 구현에 중요해요.
static void Main(string[] args)
{
Console.CursorVisible = false; // 커서 안보이게 처리
const int WAIT_TICK = 1000 / 30; // 약 33ms => 33ms 마다 한프레임 처리 => 초당 30프레임
const char CIRCLE = '\u25cf';
// 프레임을 관리하기 위해서 측정해야함
int lastTick = 0; // 마지막 측정한 시간
// 메인 루프 : 게임은 기본적으로 계속 반복 업데이트가 됨
while(true)
{
// region : region ~ endregion 영역 접었다 폈다해서 구분하여 볼 수 있음
#region 프레임 관리
int currentTick = System.Environment.TickCount; // 현재 시간(시스템이 시작되고 경과한 밀리세컨드), 우리는 현재시간 - 마지막측정시간만 알면되서 간단히 TickCount 사용함
int elapsedTick = currentTick - lastTick; // 현재시간 - 마지막 측정시간 = 경과시간
// 밀리세컨드 단위(1초 = 1000ms)라서 1000을 곱해줌
// 만약에 경과한 시간이 1/30초보다 작다면
// 준비되지 않았으니까 조금 기다려라
if (elapsedTick < WAIT_TICK)
continue;
// 30분의 1초가 경과되었다면, 초당 30프레임(초에 30번 업데이트됨)
lastTick = currentTick;
#endregion
// FPS 프레임(60 프레임 => 괜찮음, 30 프레임 이하 => 느림)
// FPS(Frame Per Second) : 이 루프가 초당 몇번 수행되고 있는지
// 화면을 갱신하는 렌더링 부분을 자주 해줄수록 게임이 부드럽게 보임
// while문(루프)가 처리시간이 느려진다면, 렌더링을 1초에 30번 이하(30 프레임)로 한다면 사람 눈에 굉장히 어색해짐
// 1. 입력 : 사용자 입력
// 2. 로직 : 입력에 따라 로직 실행, 게임 몬스터 AI
// MMO : 서버에서 연산됨, 네트워크를 통해 로직의 결과를 주고 받음
// 3. 렌더링 : 연산된 게임 세상 화면에 출력
Console.SetCursorPosition(0, 0); // 아래로 쭉 표시되었던게 커서 위치를 0,0으로 바꿔서 해당 위치에서 계속 문자열 출력됨
for (int i = 0; i < 25; i++)
{
for(int j = 0; j < 25; j++)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(CIRCLE);
}
Console.WriteLine();
}
}
}
}
}
출처
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문| Rookiss - 인프런 강
현재 평점 4.9점 수강생 6,987명인 강의를 만나보세요. 기초 프로그래밍 지식이 없는 사람들을 위한 C# 프로그래밍 기초 강의입니다. 문법 암기 위주의 수업이 아니라, 최대한 필요한 부분만을 요
www.inflearn.com
3강 환경설정
'C# > 기본 문법' 카테고리의 다른 글
| C# Nullable(널러블) (1) | 2025.12.14 |
|---|---|
| C# Reflection(리플렉션) (0) | 2025.12.14 |
| C# Exception(예외처리) (0) | 2025.12.14 |
| C# lambda(람다) (0) | 2025.12.14 |
| C# Event(이벤트) (0) | 2025.12.14 |