• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

25x25 초록색 원이 안나와요

20.10.17 15:29 작성 조회수 181

0

강의와 관련있는 질문을 남겨주세요.
• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)
• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)
서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등)

질문 전달에도 요령이 필요합니다.
• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.
• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.
• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. 
• 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요!

구체적인 질문일수록 명확한 답을 받을 수 있어요.
• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.
• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.
• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다.

기본적인 예의를 지켜주세요.
• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. 
• 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. 
반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 

using System;

namespace Algorithm

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.CursorVisible = false;

            const int WAIT_TICK = 1000 / 30;

            const char CIRCLE = '\u25cf';

            int lasttick = 0;

            while (true)

            {

                #region 프레임 관리

                // 만약 경과한 시간이 1/30초보다 작다면

                int currentTick = System.Environment.TickCount;

                if (currentTick - lasttick < WAIT_TICK)

                    continue;

                lasttick = currentTick;

                #endregion 

                // 입력

                // 로직

                // 렌더링

                Console.SetCursorPosition(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();

                }

            }

        }

    }

}

강의들으면서 이렇게 코드작성을 했는데 이상태에서 실행하면 초록색원이 안나오고 프레임관리부분을 주석처리하면 나오네요 

뭐가 문제일까요?

답변 4

·

답변을 작성해보세요.

2

int currentTick = Environment.TickCount & Int32.MaxValue;
로 수정해보시기 바랍니다.

공식 문서를 보니 C#의 TickCount는 49.8일마다
Int32.MinValue에서 Int32.MaxValue로 왔다 갔다 하는군요.
(저도 처음 알았습니다 -_-)

https://docs.microsoft.com/en-us/dotnet/api/system.environment.tickcount?view=netcore-3.1

2

여태원님의 프로필

여태원

질문자

2020.10.17

확실히 System.Environment.TickCount는 -1188076562의 값이 나오고 currentTick 부분은 -1188077187 이렇게 나오네요.. 그램노트북이라 윈도우즈 환경인데도요.. 
답변 감사합니다~

1

확인해보니 제 환경에서는 재현이 안되는 문제입니다.

실행환경이 다른 것으로 보이는데, 혹시 Mac OS를 사용하시나요?
아무튼 로직상 유일한 가능성은 TickCount 값이 정상적이지 않은 상황인데요.

int currentTick = System.Environment.TickCount;

다음 줄에 BreakPoint를 걸어서 TickCount 값을 확인 바랍니다.
아마도 저 부분에서 반환값이 이상해서 
그 다음에 등장하는 if 문에서 항상 continue로 걸러지는 것 같네요.
왜 저 부분이 다르게 동작하는지는 환경에 따라 다르기 때문에 알 수 없지만
일단 알고리즘 수업과 프레임 관리는 딱히 연관성이 없으니
프레임 관리 부분을 그냥 다 삭제하고 진행하셔도 무방합니다.

감사합니다.

0

여태원님의 프로필

여태원

질문자

2020.10.18

말씀해주신대로 수정하니 문제가 해결됐네요 감사합니다~