ROB 보덴 : 안녕하세요. 롭 해요, 나는 당신의 희망 15 게임을위한 게임. 이제, 당신이 필요로하는 네 가지 기능이 있습니다 이 프로그램에 구현하는 - 초기화하는 것은, 그릴 이동 이겼다. 그래서, 초기화를 살펴 보자. 여기에서, 우리는 우리가하고있는 제일 먼저 참조 하기 위하여려고하는 변수를 선언합니다 카운터했다. 이 초기화 될 것 D 번 D 마이너스 1. d는 차원이라는 것을 기억 우리의 보드. 어떻게 초기화 작업하려고하는 것은 무슨이다 전체 보드를 반복합니다 우리는 시작하는거야 왼쪽 상단. 그리고 그냥 가정 해 봅시다 우리 4 × 4 보드가있다. 그래서 최고는 우리가있어 남아 말을하려고하면 15입니다. 그리고 우리는 단지 계산거야 보드를 통해, 15, 14, 13 말 12, 11, 10, 9, 8, 7, 6, 5, 4, 등등. 그래서 왼쪽, 우리는 D 배 예상 D 마이너스 1, 4로 4하는 경우는 16 마이너스가 될 것입니다 1, 정확하게 15입니다. 우리가가는 곳 그리고 지금 여기 전체 보드를 통해 반복. 그리고 우리는 각각의 위치를​​ 설정하는거야 의 전류치 보드 우리의 카운터 다음 카운터는 것입니다 감소하는, 그래야 다음 우리가 도달 위치는해야 할 것입니다 카운터 이상이어야 이전 위치. 그래서 우리는 처음에 15을했고 카운터를 감소시킵니다. 그래서 우리는 14을 할당하는거야 다음 위치, 감소 카운터, 우리는 할당에가는거야 13, 등등. 마지막으로, 우리는 그 코너를 처리 할 필요가 경우 경우, 보드가 더있는 경우 치수는 다음 단지, 15, 14, 13 일 (12)는 모든 방법 아래로 3, 2, 1이고, 우리를 떠나려고 해결 못하는 보드. 그리고 우리는 1과 2를 교체해야합니다. D의 모드 2 0에 해당한다면, 그건 우리는 확인하는 것입니다 방법 그것도의 경우에 볼 수 있습니다. D의 모드 2는 0, 다음 행 D 마이너스에 동일한 경우 1, 어떤 아래 행이며, 위치 D 마이너스 2, 또는 열 D 마이너스 2, 우리는 2 부분을 설정하려고하고있어 D 열 마이너스 3 우리가있어 1로 설정하는 것. 그래서 그냥 반전 어디에 도 1 및 2는 현재. 마지막으로, 우리는 매우를 설정하는거야 오른쪽 아래 빈 같 곳 빈 해시가 정의되어 있습니다 0으로 상단에. 그래서, 즉, 꼭 필요하지 않았다 루프이해야 할 것입니다 때문에 0으로 오른쪽 아래, 이후 설정 카운터는 자연적으로 0에 도달 할 것입니다. 하지만 알고 우리에 의존하는 빈은 0을 찾기 위해 해시했다. 나중에이 프로그램으로 이동 한 경우 100에 상단에 공백을 변경 그것을 여전히 작동합니다. 그래서 이것은 단지 있는지 확인하고있다 오른쪽 아래는 실제로 동일하다 우리의 빈 값. 마지막으로, 우리는 두 개의 전역 변수를 가지고, 그래서 빈 J 빈, 우리는 참조 사람들은 상단에 선언했다. 그리고 우리는 그 두 개의 전역을 사용하는 것입니다 추적 할 변수 빈의 위치, 우리가하지 않도록 전체를 볼 필요가 빈은 매일 찾을 수있는 보드 우리는 움직임을 만들려고 시간. 따라서 블랭크의 위치는 항상 오른쪽 아래에 시작하는 것. 그래서 오른쪽 아래가 주어진다 인덱스 D - 1, D - 1. 그래서, 그 초기화합니다. 이제 우리는 그리로 이동합니다. 그래서, 무승부는 유사 할 것입니다 우리는 반복하는가는 곳 전체 보드 위에. 그리고 우리는 단지 값을 인쇄 할 그 보드의 각 위치에 있습니다. 그래서 여기, 우리의 가치를 인쇄하는 보드의 각 위치에있다. 그리고 우리가하고있는 것을 알 수 -. 그리고 그것은 단지의 printf를 말하고 그 에 관계없이 한 자리 또는의 경우의 두 자리 숫자로, 우리는 여전히 그것을 원하는 프린트 아웃 두 개의 열을 차지 그 때문에 우리는 두 개의 숫자와 하나가있는 경우 동일한 보드의 자리 숫자, 우리의 보드는 여전히 좋은 사각 볼 것이다. 그래서 우리는 모든 값을 위해 그렇게 할 보드, 빈을 제외하고. 따라서, 경우 보드의 위치는 동일 빈, 우리 특별히 그냥 밑줄을 인쇄 할 빈을 나타내는 대신합니다 의 어떤 값 빈 사실이다. 마지막으로, 우리는 인쇄 할 새로운 라인 아웃. 이 안에 여전히 있음을 알 외부 루프에 대한 외부하지만, 루프 내부. 루프이 외부가 반복되기 때문에 모든 행에 대해, 그래서이 printf와는 단지 새로운 라인을 인쇄, 그래서가는 우리 다음 행을 인쇄로 이동합니다. 그리고 그 끌기 위해의. 그래서, 지금의이 이동하는 이동하자. 이제, 우리는, 타일을 이동에 합격 사용자는 게임에 입력 - 그들이 그들이 이동할 타일을 입력합니다 - 및 당신은 부울을 반환하는데, 그렇게하고 참 또는 거짓에 따라 하나 그 움직임은 사실 여부 유효 - 타일이 될 수 있는지 여부 빈 공간으로 이동했다. 그래서 여기, 우리는 지역 변수를 선언, tile_1과에 가고있다 tile_j, blank_i 및 blank_j 비슷할, 그것은 추적 것 제외 타일​​의 위치. 지금 여기, 우리는 blank_i 사용하는거야 그리고 blank_j 등 모든 권리를 말한다 여기 보드의 빈이다. 이제 빈 위의 타일은? 빈의 왼쪽에있는 타일인가? 블랭크의 오른쪽 타일인가? 빈 아래의 타일인가? 그래서, 타일은 그 중 하나에있는 경우 위치는, 우리가 알고있는 타일 빈 자리로 이동 할 수 있습니다 빈은 이동 될 수 있습니다 타일​​은 현재. 그래서 여기, 우리가 말을하면 위치 보드 blank_i - 1 blank_j. 그래서이 말하고있는이 타일입니다 현재 빈 위? 그리고, 우리가 기억하는거야 즉, 타일의 위치입니다. 타일​​ 위치 blank_i에 마이너스 1 blank_j. 이제 첫 번째, 우리는 또한이 검사를 바로 여기에, 그래서 blank_i입니다 0보다 크다. 왜 우리는 그렇게 할 수 있습니까? 음, 빈은 맨 위의 행에있는 경우 보드의, 우리는하고 싶지 않아 이후 타일의 빈 위에보고 맨 위의 것은 없다 보드의 행. 이것은 당신이 그만 둘 수있는 방법입니다 세그먼트 오류 또는 같은 프로그램은 작동하지 않을 수 있습니다 예상치 못한 방법으로. 그래서, 이것은 우리가하지 않는 것을 확인하고있다 유효하지 않은 곳에서 찾는다. 지금 우리를 위해 같은 일을 할거야 다른 모든 가능한 조합. 그래서 여기, 우리는 빈 아래 찾고 그 타일의 경우에 볼 수 있습니다. 그리고 우리는 확실히 우리가있어 확인해야 하지 맨 아래 행에, 그렇지 않으면 우리 타일​​을 찾을 수 없습니다. 여기에서, 우리는 왼쪽에 보는거야 이 타일의 경우 빈 확인합니다. 그리고 우리는 왼쪽으로 보면 안 되죠 우리는 왼쪽 열에 있다면. 그리고 여기에 우리는에 보는거야 오른쪽 빈의, 우리는하지 말아야 우리가 있다면 오른쪽에 보면 맨 오른쪽 열에서. 그래서, 그런 것들 중 어느 것도 사실이 없을 경우, 그 타일이 인접하지 않았다 의미 빈과에 우리는 false를 반환 할 수 있습니다. 움직임은 유효하지 않습니다. 하지만, 그 중 하나가 사실이라면, 다음에 이 점은, 우리는 tile_i을 알고 tile_j은 동일하다 타일​​의 위치. 그래서, 우리는에서 보드를 업데이트 할 수 있습니다 포지션 tile_i 및 tile_j. 우리는 새 값이 비어있게됩니다 알고 그 위치 blank_i blank_j, 원래 있던 빈 - 우리는 타일 것입니다 알고 이 이동합니다. 우리가 실제로 할 필요가 없습니다주의 여기에 실제 스왑, 우리가 알고 있기 때문에 삽입해야 할 값 그 위치에. 우리는 임시을 필요로하지 않는다 주변 변수입니다. 마지막으로, 우리는 우리를 기억해야합니다 우리의 글로벌 변수가 위치 추적 유지 빈. 그래서 우리의 위치를​​ 업데이트 할 여기서 타일 될 수있는 빈 원래이었다. 마지막으로, 우리는 (때문에), true를 반환 이동 성공했습니다. 우리는 성공적으로 교체 타일​​ 빈. 좋아요, 마지막으로 우리 원을 확인해야합니다. 그래서, 원 마찬가지로 부울을 반환 곳 true를 표시하는 것입니다 그 사용자는 게임을 수상했다. false를 나타내는된다 게임은 여전히​​ 것입니다. 사용자가 원 않았습니다. 그래서,이 꽤 많이 될 것입니다 INIT의 반대, 위치 초기화, 우리는 보드를 초기화 기억 그래서 15, 14, 13, 12,. 수상 반면, 우리는 당신을 검사 할 경우 보드는 1, 2, 3, 4, 5, 및이다. 그래서, 우리는 초기화거야 우리 그 어떤 정상이기 때문에 1로 대응 보드의 왼쪽이 있어야합니다. 그리고, 우리는 루프에가는거야 전체 보드 위에. 의이 조건을 무시하자 초. 그리고이 조건은 예정 검사는이 위치에서 보드 현재 카운트에 해당? 그렇다면, 카운트를 증가되도록 우리가 볼 다음 위치는 하나의 높은 우리는 현재에있다 위치보다. 그래서 우리가 얻는 방법 왼쪽은 1이어야한다. 2 카운트를 증가. 다음 위치에서 봐. 이 2? 그렇다면, 3 카운트를 증가. 다음 위치는 3인가? 그렇다면, 카운트를 증분 4 등. 그래서,에 대한 위치가있는 경우 우리의 수를 동일하지 않습니다 보드, 우리는 그 이후 false를 반환 할 일부 타일이 있다는 뜻 하지 올바른 위치에있다. 그래서 여기,이 조건은 무엇을하고 있습니까? 음, 공백이 있음을 유의 오른쪽 하단에 가기로되어. 그리고 빈의 값이 그렇지 않을 수 있습니다 반드시 값을 같게 그 도달 할 것입니다 카운터 오른쪽 아래에. 그래서 우리는 구체적으로 확인 싶다면 동일은 D - 1과 J 같음 같음 D - 1에 해당 - 말하는 경우 우리 오른쪽 하단의에서 찾고 있습니다 보드 - 우리 단지 계속하려면. 우리는이 특정를 건너 뛰 For 루프의 반복. 그래서, 우리는이를 통해 얻을 관리하는 경우 루프 중첩, 그 의미 에 있던 어떤 타일은 없었다 잘못된 위치. 그리고 우리는 루프의 탈옥과 올 여기에, 우리는 어디에서 true를 반환 할 수 있습니다. 모든 타일이 올바른 위치에 있었다 그것은 사용자가 가지고있는 의미 게임을 이겼다. 그리고 바로 그거야. 내 이름은 롭 보우 든,이 15이었다.