프로젝트 설명
이번에 만든 프로젝트는 우리가 잘 알고 있는 틱택토(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(1, 2)
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][0] and gamelist[a-1][b-1] == gamelist[a-1][1] and gamelist[a-1][b-1] == gamelist[a-1][2]:
winner = 1
break
elif gamelist[a-1][b-1] == gamelist[0][b-1] and gamelist[a-1][b-1] == gamelist[1][b-1] and gamelist[a-1][b-1] == gamelist[2][b-1]:
winner = 1
break
elif [a-1,b-1] == [0,0] or [a-1,b-1] == [1,1] or [a-1,b-1] == [2,2] or [a-1,b-1] == [3,1] or [a-1,b-1] == [1,3]:
if (gamelist[a-1][b-1] == gamelist[0][0] and gamelist[a-1][b-1] == gamelist[1][1] and gamelist[a-1][b-1] == gamelist[2][2]) or (gamelist[a-1][b-1] == gamelist[0][2] and gamelist[a-1][b-1] == gamelist[1][1] and 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][0] and gamelist[a-1][b-1] == gamelist[a-1][1] and gamelist[a-1][b-1] == gamelist[a-1][2]:
winner = 2
break
elif gamelist[a-1][b-1] == gamelist[0][b-1] and gamelist[a-1][b-1] == gamelist[1][b-1] and gamelist[a-1][b-1] == gamelist[2][b-1]:
winner = 2
break
elif [a-1,b-1] == [0,0] or [a-1,b-1] == [1,1] or [a-1,b-1] == [2,2] or [a-1,b-1] == [3,1] or [a-1,b-1] == [1,3]:
if (gamelist[a-1][b-1] == gamelist[0][0] and gamelist[a-1][b-1] == gamelist[1][1] and gamelist[a-1][b-1] == gamelist[2][2]) or (gamelist[a-1][b-1] == gamelist[0][2] and gamelist[a-1][b-1] == gamelist[1][1] and 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][0] and gamelist[a-1][b-1] == gamelist[a-1][1] and gamelist[a-1][b-1] == gamelist[a-1][2]:
winner = 2
break
elif gamelist[a-1][b-1] == gamelist[0][b-1] and gamelist[a-1][b-1] == gamelist[1][b-1] and gamelist[a-1][b-1] == gamelist[2][b-1]:
winner = 2
break
elif [a-1,b-1] == [0,0] or [a-1,b-1] == [1,1] or [a-1,b-1] == [2,2] or [a-1,b-1] == [3,1] or [a-1,b-1] == [1,3]:
if (gamelist[a-1][b-1] == gamelist[0][0] and gamelist[a-1][b-1] == gamelist[1][1] and gamelist[a-1][b-1] == gamelist[2][2]) or (gamelist[a-1][b-1] == gamelist[0][2] and gamelist[a-1][b-1] == gamelist[1][1] and 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][0] and gamelist[a-1][b-1] == gamelist[a-1][1] and gamelist[a-1][b-1] == gamelist[a-1][2]:
winner = 1
break
elif gamelist[a-1][b-1] == gamelist[0][b-1] and gamelist[a-1][b-1] == gamelist[1][b-1] and gamelist[a-1][b-1] == gamelist[2][b-1]:
winner = 1
break
elif [a-1,b-1] == [0,0] or [a-1,b-1] == [1,1] or [a-1,b-1] == [2,2] or [a-1,b-1] == [3,1] or [a-1,b-1] == [1,3]:
if (gamelist[a-1][b-1] == gamelist[0][0] and gamelist[a-1][b-1] == gamelist[1][1] and gamelist[a-1][b-1] == gamelist[2][2]) or (gamelist[a-1][b-1] == gamelist[0][2] and gamelist[a-1][b-1] == gamelist[1][1] and 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시간? 정도 였던 것 같습니다.
다음에는 조금더 간단한 코드로 만들어 보고 싶습니다...
만들면서도 코드가 너무 복잡한 것 같다고 스스로 느낌...
'[Python] > [Python 프로젝트]' 카테고리의 다른 글
[Python 프로젝트] 라이엇 게임즈 자동 로그인 프로그램 - Selenium, Pyautogui, webdriver (4) | 2024.02.29 |
---|---|
[Python 프로젝트] 자동으로 투표 주제를 올려주는 디스코드 봇 (8) | 2023.12.30 |
[Python 프로젝트] Chat GPT API를 이용한 디스코드 봇 (0) | 2023.11.10 |
[Python 프로젝트] 공부를 도와주는 디스코드 봇 프로젝트 (4) | 2023.10.25 |
[Python 프로젝트] 꼬들 프로젝트 (Kordle) (2) | 2023.02.07 |