2017-10-19 15 views
2

나는 TicTacToe 게임을위한 메인 게임 메 커닉을 만들었습니다. 그러나 나는 최종 승패 조건을 코딩하는 방법을 모릅니다. 즉, 누군가 승/결속을 맺는 방법을 찾는 방법입니다.TicTacToe 게임에서 파이썬으로 승리/타이 조건을 코딩하는 방법

all() 기능을 사용해 보았지만이 중 하나가 작동하지 않거나 올바르게 사용하지 않았습니다 (아마도 후자). 여기

는 전체 코드 및 코드 변수 목록 (코멘트가 존재하지 않기 때문에)

def get_grid(): 
    r1 = ['-','-','-'] 
    r2 = ['-','-','-'] 
    r3 = ['-','-','-'] 
    return r1, r2, r3 

def get_coords(): 
    x = 0 
    y = 0 
    while True: 
     try: 
      x = int(input("x coord : ")) 
      y = int(input("y coord : ")) 
     except ValueError: 
      print("Must be an integer") 
     if x < 0 or x > 3 or y < 0 or y > 3: 
      print('Both values must be in the grid!') 
     else: 
      break 
    return x, y 

def pgrid(x, y, r1, r2, r3, player): 
    rdict = {1:r1, 2:r2, 3:r3} 
    if x != 0 and y != 0: 
     while True: 
      if rdict[y][x-1] == '-': 
       rdict[y][x-1] = player 
       break 
      else: 
       print("Invalid Space!") 
       x, y = get_coords() 
    print('\t1\t2\t3') 
    print(' 1 |', end = '\t') 
    for i in r1: 
     print(i, end = ' | ') 
    print() 
    print(' 2 |', end = '\t') 
    for i in r2: 
     print(i, end = ' | ') 
    print() 
    print(' 3 |', end = '\t') 
    for i in r3: 
     print(i, end = ' | ') 
    print() 


def main(): 
    r1, r2, r3 = get_grid() 
    players = ['X', 'O'] 
    pgrid(0, 0, r1, r2, r3, None) 
    win = False 
    while win == False: 
     for i in players: 
      x, y = get_coords() 
      pgrid(x, y ,r1 ,r2 , r3, i) 

변수는 대
r1, r2 and r3되는 첫 번째, 두 번째 및 세 번째 행 판. 목록
x and y은 'X'또는 'O'가있는 좌표입니다. 정수
rdicty 값과 보드의 행 사이를 탐색합니다. 사전
player이 선수입니다. 문자열 players는 플레이어 ('X' and 'O') 선수가 우승했을 때
win가 true의 목록입니다/게임 묶여있다. 부울

win 변수는이 질문에 대한 답변에서 변경해야하는 것입니다 난 그냥 코딩하는 방법에 대한 코드 또는 적어도 아이디어가 필요합니다 (I 어떤이 없기 때문에!).
미리 감사드립니다.

답변

1

동일한 글자 중 3 개가 행 또는 열에 있는지 확인하는 가장 간단한 방법은 무엇입니까? 첫 번째 열에 들어 r1[0], r2[0]r3[0]을 가지고 그들은 모두 같은 문자가 포함 된 경우 확인 :

이제
if r1[0] == 'X' and r2[0] == 'X' and r3[0] == 'X': 
    print('First column meets victory conditions', 'X') 

그것이 비트 수, 모든 행과 열 두 글자에 대해이 작업을 수행하는 복잡하지만 다행히도 것을 우리는 단지 for 루프가 우리를 위해 일하도록 할 수 있습니다. 행에 대한

for letter in 'XO': 
    for i in range(3): 
     if r1[i] == letter and r2[i] == letter and r3[i] == letter: 
      print('Column', i, letter) 

는 대신 range(3)(r1, r2, r3) 반복 및 확인 :

if row[0] == letter and row[1] == letter ... 

그리고 물론 당신은 또한 모든 문자 있는지 확인하기 위해 all 기능과 지능형리스트 또는 발전기 표현을 사용할 수 있습니다 같다.

for row in (r1, r2, r3): 
    if all(item == letter for item in row):