4차원, 4목. 같이 놀아요.
7338 단어 Pythonista3Python
개시하다
입체 네 번째 게임 아세요?
불평을 해 보았다 대충 아실 것 같아요.×4×네 개의 공간에서 네 개의 배열을 진행하다.
간단한 심정으로 4차원으로 확장한 거라 이 일을 써보려고요.
만들어진 물건
이런 느낌이 들었어요.
iOS에서 파이썬Pythonista 3을 이동해 아이패드로 제작한다.
할 수 있는 일
실제적인 말
잠시GitHub도 높아졌지만 환경이 제한되어 있기 때문에 구체적인 UI의 실현은 생략할 수 있다.
합계
열심히 집계하면 조합이 엄청나기 때문에 다음 순서에 따라 모든 배열을 망라한다.
1. 방향 벡터의 열거
예컨대
1차원 스캔에서 $$(1,0,0,0)의 축을 엇갈리게 할 수 있습니다.
for i in range(4):
_aggregate([[1, 0, 0, 0][i:]+[1, 0, 0, 0][:i]])
그럼 돼._aggregate
는 2 이후에 나타나는 함수)2차원 이상의 스캔을 통일적으로 실시하면 가독성이 슬퍼지기 때문에 모든 패턴을 쓰는 것을 포기했다.
복수호의 임의를 위해 직접 적환
itertools.product
을 이용했다.예를 들어 x-z-w 입방체에 대해
product([-1, 1], [0], [-1, 1], [1])
는 네 개의 대각선을 나타낼 수 있다.2. 시작점 열거
축의 경우 스윕 방향이 +1이면 0→1→2→3으로 시작하려면 시작점의 좌표가 0이어야 합니다.
반면 -1의 경우 3부터 →2→1→0으로 전진하기 위해서는 3부터 시작해야 한다.
0의 경우 0, 1, 2, 3 모두 가능합니다.
나는 이것을 솔직하게 쓸 것이다.
def start(val):
if val == 1:
return [0]
elif val == -1:
return [3]
else:
return range(4)
3. 스캔
가능한 모든 시작점에서 시작하여 지정된 방향으로 스윕합니다.
시작점은 네 개의 축에 대해 각각 여러 축에서 모든 조합을 열거하고 다시
itertools.product
하는 것이다.구체적으로 이런 느낌입니다.
def _aggregate(vec):
for X, Y, Z, W in vec:
if (X, Y, Z, W) == (0, 0, 0, 0):
continue
for x, y, z, w in product(start(X), start(Y), start(Z), start(W)):
s = sum(
self.get_cell(x+X*i, y+Y*i, z+Z*i, w+W*i).player for i in range(4)
)
if s == 4:
self.black += 1
elif s == -4:
self.white += 1
각 칸의 상태는 ●+1,○-1, 아무것도 넣지 않으면 0, 모두 합치면 절대치가 4인 것을 알 수 있다.CPU 대전
CPU는 현재 매우 간단합니다. 아래와 같습니다.
(동일한 우선순위가 여러 개 있는 경우 임의로 선택)
간단한 알고리즘이 비교적 강하다.
최후
파이thhonista가 있는 사람은 꼭 놀아주세요.
만약 다른 환경에 이식된 사람이 있다면, 나에게 말해 주세요. 나는 매우 기쁠 것입니다.
Reference
이 문제에 관하여(4차원, 4목. 같이 놀아요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ikuzak/items/0de3879bbb7f098d8cce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)