본문 바로가기

C#/기본 문법

C# - 콘솔로 구현하는 게임 루프 기초

메인루프

  - 입력

  - 로직

  - 렌더링

 

 

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();
                }
            }
        }
    }
}

 

 

 

 

 

 

 


 

 

 

출처


https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1?srsltid=AfmBOopkXVxKs-MQPYZkTjEYW-yIDMO5xP7l5hQq0hQasUWhobvyKO6N

 

[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