산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬으로 틱택토 게임 만들기: 단계별 코드 튜토리얼

틱택토(삼목)는 두 명이 즐기는 고전 게임으로, 파이썬 기초를 다지기에 훌륭한 프로젝트입니다. PyCharm 같은 IDE나 명령줄에서 바로 실행해 보세요.

틱택토 게임 규칙

  1. 보드: 3×3 빈 격자에서 시작 (본 튜토리얼은 N×N 확장 지원)
  2. 기호: 플레이어 1은 X, 플레이어 2는 O 사용
  3. 차례: 번갈아 가며 빈 칸에 자신의 기호 표시
  4. 승리: 가로, 세로, 대각선 중 한 줄을 모두 채우면 승
  5. 무승부: 모든 칸이 찼는데 승자가 없으면 무승부

필수 지식 및 준비물

알고리즘 설계

  1. 게임 보드 생성 (N×N 리스트)
  2. 사용자로부터 보드 크기 N 입력받기 (최소 3)
  3. 첫 플레이어 무작위 결정
  4. 플레이어 차례대로 빈 칸 선택 → 기호 배치
  5. 매 턴 승리/무승부 판정
  6. 게임 종료 시 결과 출력 및 재시작 여부 확인

전체 파이썬 코드

# Guru99 N-Dimensional Tic Tac Toe
# N×N 보드 지원, 입력 검증, 재시작 기능 포함

def get_input(prompt, cast=None, condition=None, error_msg=None):
    """안전한 사용자 입력 처리: 타입 변환, 조건 검사, 재시도"""
    while True:
        try:
            val = cast(input(prompt)) if cast else input(prompt)
            if condition is None or condition(val):
                return val
        except Exception:
            pass
        print(error_msg or "잘못된 입력입니다. 다시 시도하세요.")

def print_board(board):
    """보드 예쁘게 출력"""
    print()
    for row in board:
        print(" ".join(row))
    print()

def check_win(board):
    """승리 조건 검사: 행, 열, 양 대각선"""
    n = len(board)
    
    # 행 검사
    for row in range(n):
        if all(board[row][col] == board[row][0] != "_" for col in range(n)):
            return True
    
    # 열 검사
    for col in range(n):
        if all(board[row][col] == board[0][col] != "_" for row in range(n)):
            return True
    
    # 좌상단-우하단 대각선
    if all(board[i][i] == board[0][0] != "_" for i in range(n)):
        return True
    
    # 우상단-좌하단 대각선
    if all(board[i][n-1-i] == board[0][n-1] != "_" for i in range(n)):
        return True
    
    return False

def play():
    print("=" * 40)
    print("N-DIMENSIONAL TIC TAC TOE by Guru99")
    print("=" * 40)
    
    # 보드 크기 입력 (3 이상)
    N = get_input(
        prompt="보드 크기 N 입력 (3 이상): ",
        cast=int,
        condition=lambda x: x >= 3,
        error_msg="3 이상의 정수를 입력하세요."
    )
    
    board = [['_'] * N for _ in range(N)]
    used = 0
    turn = 0  # 0: Player 1(X), 1: Player 2(O)
    
    while True:
        print_board(board)
        
        # 좌표 입력 (행, 열)
        pick = get_input(
            prompt=f"Player {turn+1} ({'X' if turn == 0 else 'O'}) - 위치 입력 (행 열): ",
            cast=lambda s: tuple(map(int, s.split())),
            condition=lambda p: 0 <= p[0] < N and 0 <= p[1] < N and board[p[0]][p[1]] == "_",
            error_msg=f"0~{N-1} 사이의 빈 칸 좌표를 '행 열' 형식으로 입력하세요."
        )
        
        # 기호 배치
        board[pick[0]][pick[1]] = "X" if turn == 0 else "O"
        used += 1
        
        # 승리 판정
        if check_win(board):
            print_board(board)
            print(f"🎉 Player {turn+1} 승리!")
            break
        
        # 무승부 판정
        elif used == N * N:
            print_board(board)
            print("무승부입니다!")
            break
        
        # 턴 변경
        turn = 1 - turn
    
    # 재시작 여부
    again = get_input(
        prompt="다시 하시겠습니까? (y/n): ",
        cast=str.lower,
        condition=lambda a: a in ('y', 'n'),
        error_msg="y 또는 n만 입력하세요."
    )
    if again == 'y':
        play()
    else:
        print("게임을 종료합니다. 안녕히 가세요!")

if __name__ == '__main__':
    play()

실행 예시 (3×3 보드)

========================
N-DIMENSIONAL TIC TAC TOE by Guru99
========================
보드 크기 N 입력 (3 이상): 3

_ _ _
_ _ _
_ _ _

Player 1 (X) - 위치 입력 (행 열): 1 1

_ _ _
_ X _
_ _ _

Player 2 (O) - 위치 입력 (행 열): 0 1

_ O _
_ X _
_ _ _
...
Player 1 (X) - 위치 입력 (행 열): 1 0

_ O O
X X X
_ _ _

🎉 Player 1 승리!
다시 하시겠습니까? (y/n):

코드 핵심 포인트 해설

1. 안전한 입력 처리 (get_input)

2. 보드 출력 (print_board)

3. 승리 판정 (check_win)

4. 게임 루프 (play)

확장 아이디어

결론

python

  1. 파이썬 연산자 마스터하기: 종합 가이드
  2. 파이썬 for 루프 마스터하기: 문법, 예제, 고급 패턴
  3. 파이썬 print() 줄바꿈 없이 출력하기: end 매개변수 & 기타 기법 마스터
  4. 파이썬 재귀 마스터하기: 함수가 스스로를 호출하는 방법
  5. 파이썬 클래스 슬롯(__slots__) 마스터: 메모리·속도 최적화
  6. 파이썬 타임스탬프를 datetime으로 변환하기(그 반대도 가능) - 빠른 가이드
  7. 파이썬 MySQL 데이터베이스 접근: 표준 DB-API 사용법
  8. Python format() 문자열 마스터하기: 명확한 예제로 완전 정복
  9. 파이썬 함수 마스터하기: 문법, 유형, 실전 예제
  10. 파이썬 딕셔너리(Dictionary) 기초: 키, 값, 접근 방법