4차원, 4목. 같이 놀아요.

7338 단어 Pythonista3Python

개시하다


입체 네 번째 게임 아세요?
불평을 해 보았다 대충 아실 것 같아요.×4×네 개의 공간에서 네 개의 배열을 진행하다.
간단한 심정으로 4차원으로 확장한 거라 이 일을 써보려고요.

만들어진 물건


이런 느낌이 들었어요.

iOS에서 파이썬Pythonista 3을 이동해 아이패드로 제작한다.

할 수 있는 일

  • 4차원에서 놀기
  • 디스크 유지(닫아도 리셋되지 않음)
  • 기보 저장, 읽기
  • CPU 페어
  • 실제적인 말


    잠시GitHub도 높아졌지만 환경이 제한되어 있기 때문에 구체적인 UI의 실현은 생략할 수 있다.

    합계


    열심히 집계하면 조합이 엄청나기 때문에 다음 순서에 따라 모든 배열을 망라한다.
  • 검색 방향을 나타내는 벡터 결정
  • 이 방향에 대해 모든 적당한 좌표를 스캐닝 시작점으로 열거
  • 시작점에서 지정된 방향으로 스캔
  • 1. 방향 벡터의 열거


    예컨대
  • x축→$(101,0,0)$
  • y-z 평면 대각선→$(0\pm1,1,0)$
  • x-z-w 입방체의 대각선→$(\pm1,0\pm1,1)$
  • 초입방체 대각선→$(\pm1\pm1\pm1\pm1,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는 현재 매우 간단합니다. 아래와 같습니다.
  • 세 번째 눈이 있다면 네 번째 눈을 맞춘다
  • 상대방이 세 번째라면 저지
  • 상대방에 대한 두 번째 공통점, 여러 공통점 저지
  • 자신의 두 번째 통일된 힘줄에 대해 많은 힘줄이 공통된 곳에 두기
  • 위의 네 가지 확인을 통과하지 못하면 열린 곳에 적당히 놓는다
  • 이 게임에서 3을 두 개로 동시에 하면 이기기 때문에 3과 4의 처리가 있다.
    (동일한 우선순위가 여러 개 있는 경우 임의로 선택)
    간단한 알고리즘이 비교적 강하다.

    최후


    파이thhonista가 있는 사람은 꼭 놀아주세요.
    만약 다른 환경에 이식된 사람이 있다면, 나에게 말해 주세요. 나는 매우 기쁠 것입니다.

    좋은 웹페이지 즐겨찾기