ai와 겨루는 3*3 틱텍토 게임 구현 코드를 짜는 중에 오류가 생겼습니다.

조회수 368회

안녕하세요. 인공지능을 처음 공부하고 있는 대학생입니다. 인공지능 프로그래밍을 공부하는 도중에 파이썬 프로그램을 통해서 ai와 겨루는 3*3 틱텍토 게임을 만들어보는 실습을 진행해 보았습니다. 실습은 코드를 따라하는 방식으로 진행되었는데요, 이 코드가 완전하지 않은 코드라고 합니다. 그런데 무엇이 빠졌는지 잘 모르겠어요. 그리고 일단 책에 나와있는 코드를 빠짐없이 다 써보고 구동시켜본 결과 choosePlayer, drawingBoard, putPlayerStone, checkWinner, putAIStone 등 이런 변수가 정의되지 않았다는 오류가 뜹니다. 이럴 때는 어떻게 해결해야 하나요? 알려주신다면 정말 감사하겠습니다!!

if __name__ == "__main__":
    while True:
        gameScreen = [",",",",",",",",""]
        player, AI = choosePlayer()
        drawingBoard(gameScreen)

        if player == 'X':
        while True:
            putPlayerStone(gameScreen, player)
            checkWinner(gameScreen, player, AI)
            drawingBoard(gameScreen)
            putAIStone(gameScreen, player, AI)
            checkWinner(gameScreen, player, AI)
            drawingBoard(gameScreen)

def choosePlayer():
  print('대문자 영문자 X 또는 O 입력')
  while True:
    chosen = input('대문자 영문자 X 또는 O 입력') #
    if chosen!='O' and chosen !='X':
      print('영문자 O 또는 X를 다시 입력하세요.')
      continue
    elif chosen == 'O':
        return 'O','X'
    elif chosen == 'X':
        return 'X','O'

def drawingBoard(screen):
  print()
  print('____________________________________________')
  print(' '+screen[6]+' '+'|'+' '+screen[7]+' '+'|'+' '+screen[8])
  print('____________________________________________')
  print(' '+screen[3]+' '+'|'+' '+screen[4]+' '+'|'+' '+screen[5])
  print('____________________________________________')
  print(' '+screen[0]+' '+'|'+' '+screen[1]+' '+'|'+' '+screen[2])
  print('____________________________________________')
  print()

def putPlayerStone(screen, mark):
  while True:
    print('>>돌 위치 선택: ',end='') #end=''는 하나의 명령어이다
    position = input()
    if position not in ['1','2','3','4','5','6','7','8','9']:
      continue
    if screen[int(position)-1]!= '':
      continue
    else:
      break
  screen[int(position)-1] = mark
  return position, screen

def putAIStone (screen, player, AI):
  AI_willPut_here=[]

  Put_player = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  for i in range(0,9):
      if player == screen[i]:
          Put_player[i] = True

  Put_AI = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  for i in range(0,9):
      if AI == screen[i]:
          Put_AI[i] = True

  hldx = 8
  while hldx >= 2:
    if Put_AI[hldx -1]==True:
        if Put_AI [hldx -1-1]==True:
            AI_willPut_here.append(hldx -1+1)
        elif Put_player[hldx-1+1] == True:
            AI_willPut_here.append(hldx -1-1)
    elif Put_AI[hldx -1-1] == True and Put_AI[hldx -1+1] == True:
        AI_willPut_here.append(hldx -1)
    hldx -= 3

    vldx = 4

  while vldx <= 6:
    if Put_AIr[vldx -1] == True:
        if Put_AI[vldx-1+3] == True:
            AI_willPut_here.append(vldx -1-3)
        elif Put_AI[vldx -1-3] == True:
            AI_willPut_here.append(vldx -1+3)    
    elif Put_AI[vldx -1+3] == True and Put_AI[vldx -1-3] == True:
        AI_willPut_here.append(vldx -1)
    vldx += 1    

    if Put_AI[5-1] == True:
        if Put_AI[7-1] == True:
            AI_willPut_here.append(3-1)
        elif Put_AI[7-1] == True:
            AI_willPut_here.append(3-1)
        elif Put_AI[7-1] == True:
            AI_willPut_here.append(3-1)
        elif Put_AI[7-1] == True:
            AI_willPut_here.append(3-1) 
    if Put_AI[7-1] == True and Put_AI[3-1] == True:
        AI_willPut_here.append(5-1)
    if Put_AI[9-1] == True and Put_AI[1-1] == True:
        AI_willPut_here.append(5-1)

  for i in range(0,len(AI_willPut_here)):
      if screen[AI_willPut_here[i]] == '':
          available.append(AI_willPut_here[i])
  available = random.choice(available)
  screen[int(available)] = AI
  return screen

def checkWinner(screen,player,AI):
  playerPut = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  for i in range(0.9):
    if player == screen[i]:
        playerPut[i] = True
  vldx = 7
  while vldx <= 9:
    if playerPut[vldx-1] == True and playerPut[vldx-1-3] == True and playerPut[vldx-1-6] == True:
        playerWin(screen)
        return True
    vldx += 1

  hldx = 7
  while hldx >= 1:
    if playerPut[hldx-1] == True and playerPut[hldx-1+1] == True and playerPut[hldx-1+2] == True:
        playerWin(screen)
        return True
    hldx -= 3

    if playerPut[7-1]==True and playerPut[5-1]==True and     playerPut[3-1]==True:
        playerWin(screen)
        return True
    elif playerPut[9-1]==True and playerPut[5-1]==True and playerPut[1-1]==True:
        playerWin(screen)
        return True

  for i in range(0,9):
          if screen[i]=='':
              break
          elif i==8:
              drawingGameScreen(screen)
              print('무승부')
              return True
'''
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 프로그래머스 커뮤니티는 마크다운 포맷을 지원하는데, 질문주신 내용이 의도와는 다르게 깨져 보이는 것 같습니다. ``` << 백틱 3개 로 전체를 감싸주시면 코드 확인이 더 편할 것 같아요 rok 2023.3.24 00:28
  • 알려주셔서 감사합니다! 그런데 알려주신 백틱 3개(''')로 전체를 감싸라는 것의 의미를 잘 모르겠어요ㅜㅜ 각 부분별로 감싸면 되는건가요? 알 수 없는 사용자 2023.3.24 09:09

1 답변

  • 일단 중간에 Put_AIr 오타가 있구요. random.choice(available)를 하려면 먼저 randome 모듈을 import 해야 합니다.

    그리고 가장 처음의:

    if __name__ == "__main__":
        while True:
            gameScreen = [",", ",", ",", ",", ""]
            player, AI = choosePlayer()
            drawingBoard(gameScreen)
    
            if player == 'X':
                while True:
                    putPlayerStone(gameScreen, player)
                    checkWinner(gameScreen, player, AI)
                    drawingBoard(gameScreen)
                    putAIStone(gameScreen, player, AI)
                    checkWinner(gameScreen, player, AI)
                    drawingBoard(gameScreen)
    

    이 부분은 함수 정의 다음, 그러니까 맨 아래로 내려가야 합니다.

    하지만 그래도 문제가 해결되지 않습니다. playerWin(), drawingGameScreen() 함수가 없거든요. 책에 이 함수 정의가 없는지 찾아보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)