본문 바로가기

[Python]/[Python 프로젝트]

[Python 프로젝트] 틱택톡 프로젝트 (Tic Tac Toe)

728x90

프로젝트 설명

이번에 만든 프로젝트는 우리가 잘 알고 있는 틱택토(Tic Tac Toe)라는 게임을 파이썬으로 구현한 것입니다.

인터페이스나 GUI는 구현하지 않았고 실행은 터미널 창에서 실행됩니다.

플레이 방식은 한 컴퓨터로 2명에서 플레이하는 로컬 방식입니다.

 

코드상세 설명

main 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def main():
    while True:
        start = input("게임을 시작하실 준비가 되셨습니까?(Y/N)")
        if start == "Y" or start == "y":
            print("게임을 시작하겠습니다. 선공은 랜덤으로 정해집니다.")
            time.sleep(2.5)
            break
        elif start == "N" or start == "n":
            print("게임을 종료합니다.")
            exit()
        else:
            print("제대로 된 값을 입력해주세요.")
            continue
    
    first = First()
    result = game(first)
    Result(result)
 
    while True:
        regame = input("게임을 재시작 하시겠습니까?(Y/N)")
        if regame == "Y" or regame == "y":
            first = First()
            result = game(first)
            Result(result)
            continue
        elif regame == "N" == regame == "n":
            print("게임을 종료합니다.")
            break
        else:
            continue
cs

일단 이 코드는 메인 함수입니다.

메인 함수에서는 게임을 시작해주고 각각의 기능들이 담긴 함수들을 호출하여 

값을 계산하는 전체 함수를 담당하는 함수입니다.

 

First 함수

1
2
3
4
5
6
7
8
def First():
    a = random.randint(12)
    if a == 1:
        print("선공은 '플레이어1'입니다.")
        return 1
    elif a == 2:
        print("선공은 '플레이어2'입니다.")
        return 2
cs

First함수에서는 누가 먼저 게임을 시작할지 정해주는 함수입니다. 

선공을 정하는 방식은 랜덤이고, 랜덤함수를 사용했습니다.(import random)

 

game 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
def game(first):
    winner = 0
    while True:
        if first == 1:
            while True:
                try:
                    a,b = map(int, input("'플레이어1'님 시작해주세요 : ").split(" "))
                except ValueError:
                    print("제대로 된 값을 입력해주세요.\n")
                    continue
                if a >= 1 and a <= 3 and b >= 1 and b <= 3:
                    if [a,b] not in playdata:
                        gamelist[a - 1][b - 1= "O"
                        playdata.append([a,b])
                        print(gamelist[0])
                        print(gamelist[1])
                        print(gamelist[2])
                        if gamelist[a-1][b-1== gamelist[a-1][0and gamelist[a-1][b-1== gamelist[a-1][1and gamelist[a-1][b-1== gamelist[a-1][2]:
                            winner = 1
                            break
                        elif gamelist[a-1][b-1== gamelist[0][b-1and gamelist[a-1][b-1== gamelist[1][b-1and gamelist[a-1][b-1== gamelist[2][b-1]:
                            winner = 1
                            break
                        elif [a-1,b-1== [0,0or [a-1,b-1== [1,1or [a-1,b-1== [2,2or [a-1,b-1== [3,1or [a-1,b-1== [1,3]:
                            if (gamelist[a-1][b-1== gamelist[0][0and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][2]) or (gamelist[a-1][b-1== gamelist[0][2and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][0]):
                                winner = 1
                                break
                else:
                    continue
                while True:
                    try:
                        a,b = map(int, input("'플레이어2'님 시작해주세요 : ").split(" "))
                    except ValueError:
                        print("제대로 된 값을 입력해주세요.\n")
                        continue
                    if a >= 1 and a <= 3 and b >= 1 and b <= 3:
                        if [a,b] not in playdata:
                            gamelist[a - 1][b - 1= "X"
                            playdata.append([a,b])
                            print(gamelist[0])
                            print(gamelist[1])
                            print(gamelist[2])
                            if gamelist[a-1][b-1== gamelist[a-1][0and gamelist[a-1][b-1== gamelist[a-1][1and gamelist[a-1][b-1== gamelist[a-1][2]:
                                winner = 2
                                break
                            elif gamelist[a-1][b-1== gamelist[0][b-1and gamelist[a-1][b-1== gamelist[1][b-1and gamelist[a-1][b-1== gamelist[2][b-1]:
                                winner = 2
                                break
                            elif [a-1,b-1== [0,0or [a-1,b-1== [1,1or [a-1,b-1== [2,2or [a-1,b-1== [3,1or [a-1,b-1== [1,3]:
                                if (gamelist[a-1][b-1== gamelist[0][0and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][2]) or (gamelist[a-1][b-1== gamelist[0][2and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][0]):
                                    winner = 2
                                    break
                            break
                    else:
                        continue
        elif first == 2:
            while True:
                try:
                    a,b = map(int, input("'플레이어2'님 시작해주세요 : ").split(" "))
                except ValueError:
                    print("제대로 된 값을 입력해주세요.\n")
                    continue
                if a >= 1 and a <= 3 and b >= 1 and b <= 3:
                    if [a,b] not in playdata:
                        gamelist[a - 1][b - 1= "O"
                        playdata.append([a,b])
                        print(gamelist[0])
                        print(gamelist[1])
                        print(gamelist[2])
                        if gamelist[a-1][b-1== gamelist[a-1][0and gamelist[a-1][b-1== gamelist[a-1][1and gamelist[a-1][b-1== gamelist[a-1][2]:
                            winner = 2
                            break
                        elif gamelist[a-1][b-1== gamelist[0][b-1and gamelist[a-1][b-1== gamelist[1][b-1and gamelist[a-1][b-1== gamelist[2][b-1]:
                            winner = 2
                            break
                        elif [a-1,b-1== [0,0or [a-1,b-1== [1,1or [a-1,b-1== [2,2or [a-1,b-1== [3,1or [a-1,b-1== [1,3]:
                            if (gamelist[a-1][b-1== gamelist[0][0and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][2]) or (gamelist[a-1][b-1== gamelist[0][2and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][0]):
                                winner = 2
                                break
                else:
                    continue
                while True:
                    try:
                        a,b = map(int, input("'플레이어1'님 시작해주세요 : ").split(" "))
                    except ValueError:
                        print("제대로 된 값을 입력해주세요.\n")
                        continue
                    if a >= 1 and a <= 3 and b >= 1 and b <= 3:
                        if [a,b] not in playdata:
                            gamelist[a - 1][b - 1= "X"
                            playdata.append([a,b])
                            print(gamelist[0])
                            print(gamelist[1])
                            print(gamelist[2])
                            if gamelist[a-1][b-1== gamelist[a-1][0and gamelist[a-1][b-1== gamelist[a-1][1and gamelist[a-1][b-1== gamelist[a-1][2]:
                                winner = 1
                                break
                            elif gamelist[a-1][b-1== gamelist[0][b-1and gamelist[a-1][b-1== gamelist[1][b-1and gamelist[a-1][b-1== gamelist[2][b-1]:
                                winner = 1
                                break
                            elif [a-1,b-1== [0,0or [a-1,b-1== [1,1or [a-1,b-1== [2,2or [a-1,b-1== [3,1or [a-1,b-1== [1,3]:
                                if (gamelist[a-1][b-1== gamelist[0][0and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][2]) or (gamelist[a-1][b-1== gamelist[0][2and gamelist[a-1][b-1== gamelist[1][1and gamelist[a-1][b-1== gamelist[2][0]):
                                    winner = 1
                                    break
                            break
                    else:
                        continue
        break
    return winner
cs

game함수는 게임을 진행하는 함수로 게임 진행의 전반적인 부분을 담당하는 함수입니다.

간단하게 코드를 설명하자면, 먼저 선공이 누군지 함수의 매개변수로 주어지고,

그 선공의 따라서 누가 먼저 시작할지가 달라집니다.

그 후 플레이를 하다가 가로, 세로, 대각선 중에서 하나를 똑같은 걸로 먼저 다 채운사람이 승리하게 됩니다.

 

Result 함수

1
2
3
4
5
def Result(result):
    if result == 1:
        print("'플레이어1'님의 승리입니다.")
    else:
        print("'플레이어2'님의 승리입니다.")
cs

Result함수에서는 game함수에서 반환된 값을 통해

승자가 누구인지 확인한 후 승자를 출력해주는 함수입니다.

따라서 Result함수는 result라는 매개변수를 가지게 됩니다.

 

후기

이번 프로젝트를 진행하면서 오류처리에 대해서 복습할 수 있었습니다.

평소 백준 문제를 풀거나 코딩을 할 때 try문을 자주 사용하지 않아서 

까먹고 있었는데 이번 프로젝트를 통해서 제대로 이해하고 복습할 수 있었던 것 같습니다. 

 

그리고 코딩 프로젝트 정하기가 정말 힘든 것 같습니다... 뭔가 만들고 싶은데 뭘 만들어야 할지는 모르겠고...

코딩 프로젝트 주제 정하느라 시간을 많이 투자했습니다...ㅠ

 

전체적으로 만드는데 걸린 시간은 1시간? 정도 였던 것 같습니다.

 

다음에는 조금더 간단한 코드로 만들어 보고 싶습니다...

만들면서도 코드가 너무 복잡한 것 같다고 스스로 느낌...


728x90