티스토리 뷰

반응형

 

+ 2021-11-14 내용 추가

 

네이버 코딩 커뮤니티인 코뮤니티라는 카페에서

TIC-TAC-TOE 게임에 대해 참고자료로 이 포스팅을 추천해주신 것을 보았습니다.

보잘 것 없는 포스팅이지만 추천해주셔서 감사드립니다.

조금이라도 도움이 되었으면 좋겠습니다.

 

이해가 잘 안가는 부분이 있거나 추가로 궁금한 부분을 댓글로 달아주시면

제가 열심히 답변드리겠습니다. 댓글은 항시 확인하고 있습니다.

 

그럼 본론으로 들어가보죠!

 

 


 

TIC-TAC-TOE 게임이란

3행 3열의 판에서

가로, 세로, 대각선 중

동일한 심볼을 먼저 만들면 

승리하는 게임이다.

이를 파이썬으로 만들어보자.

 

 

 

 

1. 먼저 게임판의 내부 값들을 공백으로 초기화한다.

 

1
board = [[" " for x in range(3)] for y in range(3)]
cs

 

 

리스트 함축 방법을 사용하여,

3 X 3 형태로 만들었다.

  0 1 2
0 " " " " " "
1 " " " " " "
2 " " " " " "

 

 

 

 

 

2. 게임판을 그려보자.

 

실질적으로 눈에 보이는

게임판의 형식을 만든다.

 

1
2
3
4
for r in range(3):
    print(" ", board[r][0], "| ", board[r][1], "| ", board[r][2])
    if (r != 2):
        print("----|----|----")
 
cs

 

 

 

첫 번째 행일 때,

 

이렇게 그려주고 난 후

 

 

행 인덱스가 2가 아니면(셋째 행이 아니면)

이렇게 그린다.

 

 

의 형태가 된다.

 

 

 

 

두 번째 행일 때,

 

를 추가,

 

를 추가하여

 

 

의 형태가 된다.

 

 

 

 

세 번째 행일 때는,

r == 2가 돼버리므로

 

만 추가하여

 

 

최종적으로

의 모양이 된다.

 

- 와 | 의 개수를 조정하여

보기 좋게 만드는 과정이

필요했다.

 

 

 

 

 

3. 사용자로부터 좌표 입력받기

  

1
2
= int(input("다음 수의 x 좌표를 입력하시오 : "))
= int(input("다음 수의 y 좌표를 입력하시오 : "))
cs

 

 

 

 

 

4. 사용자가 입력한 좌표 검사

 

1
2
3
4
5
if board[x][y] != " ":
    print("잘못된 위치입니다.")
    continue
else:
    board[x][y] = "X"
cs

 

 

게임판의 심볼이

비워져 있어야 

X, O 표시가 가능하다.

이미 있는 자리에

또 심볼을 둘 수 없기 때문이다.

 

그러므로,

심볼이 공백이 아니면

둘 수 없도록 

잘못된 위치라는 내용을 출력하고

다시 게임판을 출력한다.

 

표시가 없는 자리인 경우

"X"를 표시하여

사용자가 선점한다.

 

 

 

 

 

5. 컴퓨터가 놓을 위치 정하기

 

1
2
3
4
5
6
7
8
done = False
 
for i in range(3):
    for j in range(3):
        if board[i][j] == " " and not done:
            board[i][j] = "O"
            done = True
            break
cs

 

 

3행 3열을

순차적으로 반복하여

가능한 자리를 찾는다.

 

빈 자리이고

done = False이면

"O"를 표시하고

그 자리는 컴퓨터의 심볼이 차지한다.

 

이후 다시 사용자가 

자리를 고르도록 한다.

 

가장 먼저 존재하는

빈 자리를 찾는 것이다.

 

 

 

 

1번의 초기화 작업을 제외하고

모든 코드를

while True: 안에

포함시켜주면 게임이 완성된다.

 

 

 

 

 

  - TIC-TAC-TOE 게임 최종 결과  

 
 
 

 

 

 

 

  - 한마디  

컴퓨터가 좀 더

지능적으로 심볼을 두지 못한다는 점에서

아쉽다는 생각이 든다.

 

칸을 보기좋게 그리는 것은

여러 번의 시도가 필요했다.

 

차후에는 가로, 세로, 대각선이

먼저 선점되면

WIN, LOSE 등의 결과를

출력해보고 싶다.

 

반응형
댓글
반응형
Recent Post.
Recent Reply.
Thanks for comming.
오늘은
명이 방문했어요
어제는
명이 방문했어요