무한 루프

(무한반복에서 넘어옴)
  • 예시를 보고 싶다면 문서 참조.[1]

1 프로그래밍 용어

프로그램이 일련의 명령(루프)을 무한히 반복하는 것을 말한다. 이런 무한 루프는 실수로 인해 발생할 수도 있고 의도적으로 탈출 조건을 설정한 다음 발생 시킬 수가 있다.

while(1);

같은 식으로 간단히 만들 수 있다. 또는 for문을 사용하고 싶다면

for(;;)

를 쓰면 된다

프로그래밍을 막 배우기 시작한 단계에서는 무한루프가 나쁜 것이라고 생각하기 쉽지만 우리가 쓰는 거의 모든 프로그램은 실행중이라는 것은 곳 무한루프속에 있다는 것을 의미한다.

예를 들어, 우리가 이렇게 모니터로 위키를 보면서 위키질을 할 수 있는 것도 OS가 무한루프를 통해 화면을 뿌리는 것을 반복하면서 동시에 입력신호를 대기하는 무한 루프가 돌아가고 있는 덕분. 비디오 게임 역시 마찬가지로 게임을 시작하고 가만히 놔두더라도 실제 게임 속에서는 입력 -> 갱신 -> 그리기라는 한 번의 루프를 초당 60번씩 도는 것을 전제로 작성되고 있다. 이것을 게임 루프라고 한다.

물론 의도치 않은 무한 루프는 흔히 있는 버그이다. [2]

의도적인 무한 루프가 필요한 경우, 제어를 위해 반드시 그 무한루프를 끝내는 방법도 만들어야 한다. 반복문 내에 break;와 같은 중단점을 삽입하거나, 좀더 안정적인 맛으로는 해당 루프문에 조건을 걸어놓고 해당 조건을 충족시켜 주는방법이 있다.

의도적이지 않은 무한 루프는 모 샌드박스 게임을 만든 사람처럼 해결하면...[3] 반은 그냥 발적화다.[4]

2 게임 스테이지의 무한 루프

주로 고전 게임에서 흔히 나오는 것. 마지막 스테이지를 클리어 하면 1스테이지로 돌아가고 다시 처음부터 플레이 한다. 2주차 플레이하고는 다른 것이 무한 루프 게임은 몇번을 깨도 구성이 바뀌는 것이 없다. 단 무한 루프제 게임에서도 한 바퀴를 돌 때마다 구성이 조금씩 바뀌다가 무한 루프가 시작되는 주차에서 구성의 변화가 멈추는 경우는 있다.

가끔 가다가 영구 패턴을 무한루프에 포함시키는 사람들이 몇몇 있고, 대부분은 무한루프로 알고 있는 사람들이 대부분이다. 결론부터 말하면 영구 패턴과는 전혀 다른 개념이다. 우선 무한루프제 게임은 마지막 스테이지를 클리어하면 1스테이지부터 처음부터 무한반복을 하는 식으로 '정당하게' 게임을 계속하는 거지만, 영구 패턴은 그것도 아니고 게임 시스템상의 허점을 악용하여 영구적으로 게임을 플레이하는 행위를 의미한다. 결정적인 차이는 무한루프 게임에서는 대부분 1000만점을 달성하게 되면 1000만+α 형태로 하이스코어 전국집계가 "종료"되지만, 영구 패턴은 그대로 발각되는대로 하이스코어 집계가 가차없이 "중단"된다.

참고로 무한루프제 게임의 경우에는 1000만점에 도달하는 것이 바로 스코어러들의 최종적인 목표이다.

2.1 레벨 디자인 기법

구조물이나 배경 일부가 컨베이어 벨트처럼 계속해서 반복되며, 특정 지점에 도달 혹은 보스 제거 등 특정 목표를 만족시키면 루프 구성의 일부가 변경, 혹은 끝나거나 한다.

플레이어가 올라타거나 지나가야 하는 구조물이 반복되는 경우, 최대한 걸리적 거리지 않게 일직선 형태로 되어 있다.

3 TCG에서의 무한 루프

유희왕의 경우는 유희왕/무한 루프 문서 참조.

매직 더 개더링은 유희왕과는 다르게, 사용자가 임의로 멈출 방법이 전혀 없는 채로 무한 루프에 들어가면(멈출 수 있을 때는 무한번 해당 행동을 반복해도 좋다. 시간을 일부러 끌면 그것도 반칙이니 '이러이러해서 무한루프 성립하는데 몇번 반복할게요' 라고 증명과 선언만 하면 된다.) 그대로 게임이 뻗어버려서 무승부 처리하고 다음 게임 들어간다. 가장 대표적인 수단이 다른 지속물이 아무 것도 없는 채로 망각륜 3개만이 서로를 추방하면서 왔다갔다하는 상태.

하스스톤은 아직까진 무한 루프가 없다. 아키나이 영혼사제 + 고통의 여제 콤보가 무한 루프로 알려져 있지만 61번 루프를 반복하면 시스템상 루프가 강제 종료된다. #

4 관련항목

  1. 백괴사전에서는 진짜 이런 식으로 만들어놓은 문서가 있으니 다름 아닌 뫼비우스의 띠.(#) 구글에서도 reculsion(재귀)라고 검색하면 이런 식으로 검색되는 것을 확인할 수 있다.
  2. 이런점은 부등호를 숙지하지 못하는 초기에 반대로 집어넣어서 즐겁게경험해볼 수 있다.
  3. 루프가 일정 횟수를 도달하면 해당 코드를 그냥 정지시켜버렸다. 모든 프로그래밍 언어에 도입이 시급하다
  4. 반은 맞고 반은 틀리다. 문제가 생기면 그만큼 루프가 돌아야 해결된다는 게 문제가 되긴 하지만, 코딩자체가 모든 시나리오에 맞게 돌아갈수는 없으니, 만약을 준비해 놓는다는 점으로는 좋은 기술이다. 안돼야 되는데 되는거보단 낫잖아요? 왜 되는거야!