2016-11-29 1 views
0

크기 조정이 가능한 그림 퍼즐 (like this)을 만들려고하지만 사용할 수식을 찾을 수 없습니다. 3x3 및 4x4 이상을 커버합니다. 추가 할 타일 수에 따라 동적으로 퍼즐을 생성합니다 (예 : 3x3의 경우 8, 4x4의 경우 15).크기를 늘리거나 줄일 수있는 숫자 퍼즐 만들기 (큰 퍼즐의 경우 조정할 수 있음)

지금까지 행을 생성하기 위해 단순히 타일 번호를 행/열 번호로 나누었습니다.

어려운 부분이 기둥을 만들고 있습니다.

A = Tile Number Index (Start at 0 and end at 8 for 3x3) 
B = Row/Col (3 for 3x3) 

//A and B are both ints to start. The final divide B/() I convert to float 
and then use a rounding to get the final number 

(B/((A/B+1)*B-A))-1 
여기
  • 는 3 × 3 대 같을 필요 행이다 : 여기서

    는 I 사용한 열 방정식 000 111 222 여기서
  • × 3 대처럼 보이도록 필요한 열이다 : 012 012
  • 012과 같을 것이다 4 × 4 열을 사용하는 경우 : 등

이 방정식은 3x3 퍼즐에서만 작동합니다. 나는 4x4에 대한 또 다른 방정식을 가지고 있지만 그것은 전혀 확장되지 않습니다. 어떻게하면이 문제를 해결하고 모든 큰 퍼즐을 확장 할 수 있습니다.

+0

나는 당신이 무엇을 요구하고 있는지 전혀 이해하지 못합니다. 이것을 다른 방식으로 설명해 주시겠습니까? –

+0

[이 링크는 여기] (https://www.google.com.au/search?q=8+puzzle&oq=8+puzzle&aqs=chrome..69i57j0l5.4567j0j7&sourceid=chrome&ie=UTF-8)는 내가 만들고있는 것입니다. . 퍼즐 조각을 동적으로 추가하고 있습니다. 나는 for-loop 설정을 0에서 시작하여 8로 끝난다. 조각을 배치 할 위치를 결정하고 이미 행 부분을 알아내는 방정식에 도움이 필요하다. 같은 방정식을 사용하여 필요할 때 크기를 조절할 수 있어야합니다. 위의 수식에 어떤 수정을해야하는지 묻습니다. 미안해. 설명하기 힘들다. – ALegendsTale

+0

좀 나아 졌어.4x4 보드에서 15 개의 타일을 원한다는 뜻입니까? (당신은 24가 너무 많다고 말했습니다.) 타일에있는 숫자는 퍼즐이 풀렸을 때 그 타일이 끝날 행과 열을 원한다는 것을 의미합니까? 그렇다면 행이 0에서 시작하지만 열이 하나에서 시작하는 이유는 무엇입니까? –

답변

1

8 개 또는 15 개의 퍼즐로 작업한다고 가정하고 (퍼즐처럼) 퍼즐을 풀면 타일이 끝나는 행과 열을 찾고 타일 번호, 행 및 열은 모두 0에서 시작합니다. (이것은 내가 마지막 코멘트와 마지막 편집에서 수집하는 것입니다.) 그래서, 당신은 파이썬에서 사용할 수 있다면, row에 대한

def tile_end_coords(tilenum): 
    '''Return the row and column coordinates for the end (solved) tile given 
    its number. Global variable *n* is the number of squares on each side 
    of the square puzzle.''' 
    row = tilenum // n 
    col = tilenum % n 
    return row, col 

표현은 정수 나누기 후 몫이다. 오브젝트 파스칼과 같은 일부 언어는 // 대신 div을 사용합니다. 일부 언어에서는 int(tilenum/n)을 사용해야합니다.

col의 표현식은 정수 나누기 이후의 나머지입니다. 오브젝트 파스칼과 같은 일부 언어는 % 대신 mod을 사용합니다. 일부 언어에서는 tilenum - row * n을 사용해야합니다.

이해하기 쉽고 이식성이 뛰어난 코드를 보여주었습니다. 파이썬에서 당신은 단지 하나 명의 선으로 전체 기능을 대체 할 수 :

row, col = divmod(tilenum, n) 

타일 번호, 행 또는 열이 아닌 하나의 기반하는 경우 제로, 단지 추가 또는 적합한 places--에 1 빼기 그것은 어디에서 분명해야합니다.

+0

정말 고마워요! 나는 항상 모듈러스를 잊어 버린다. 그건 완벽하게 작동합니다! – ALegendsTale

관련 문제