일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring boot
- programmers
- 백준
- C++
- 회원가입
- 스포티파이
- Spring
- CS
- modern c++
- Baekjoon
- spotify
- SWEA
- c
- 회귀
- java
- regression
- 자바
- SECS/GEM
- python
- linux
- 파이썬
- SECS
- Gem
- 프로그래머스
- Spotify Api
- MYSQL
- Spring JPA
- Computer Science
- SECS-II
- SW Expert Academy
Archives
- Today
- Total
비버놀로지
[PYTHON] 틱택토 (Tic Tac Toe) 본문
728x90
아래와 같이 3X3 한줄을 만들면 이기는 게임이다.
일단 기본적으로 아래와 같이 A, B 두명의 플레이어를 두고 게임을 시작한다.
board는 기본적으로 3X3으로 되어있는 배열을 사용하고, " " 을 각 각에 넣어준다.
def __init__(self):
self.board = {(i + 1): " " for i in range(9)}
self.counter = 0
self.winner = False
self.playing = True
self.tie = False
self.player_name = ["A", "B"]
self.player_details = []
아래와 같이 입력을 받아주어 플레이어가 선택한 곳에 O, X를 넣어 주도록 한다.
def insert_input(self, player, marker):
print(f"Print {player} > marker를 둘 위치를 1~9 사이에서 선택: ")
slot_num = int(input())
while self.board[slot_num] != " ":
print("다른 번호 입력: ")
slot_num = int(input())
self.board[slot_num] = marker
마지막으로 아래의 method를 통해서 게임의 승자가 나왔는지 확인을 하고, 만약에 승자가 없을 경우에는 무승부를 출력해 준다.
def win_game(self, player, marker):
win_cond = ((self.board[1] == self.board[2] == self.board[3] == marker)
or (self.board[4] == self.board[5] == self.board[6] == marker)
or (self.board[7] == self.board[8] == self.board[9] == marker)
or (self.board[1] == self.board[4] == self.board[7] == marker)
or (self.board[2] == self.board[5] == self.board[8] == marker)
or (self.board[3] == self.board[6] == self.board[9] == marker)
or (self.board[1] == self.board[5] == self.board[9] == marker)
or (self.board[3] == self.board[5] == self.board[7] == marker))
if win_cond:
self.print_board()
time.sleep(0.5)
print(f"Player {player} 승리!")
return True
else:
return False
아래는 전체 코드로 실행을 하게 되면 틱택토를 플레이 할 수 있게 된다.
import time
class TicTacToe:
def __init__(self):
self.board = {(i + 1): " " for i in range(9)}
self.counter = 0
self.winner = False
self.playing = True
self.tie = False
self.player_name = ["A", "B"]
self.player_details = []
def print_board(self):
for i in range(1, 10):
print(f"{i}: {self.board[i]} ", end=" ")
if i % 3 == 0:
print()
def play_again(self):
print("게임을 다시 시작하시겠습니까? Y/N")
reply = input()
if reply == "Y":
print("게임 시작")
self.board = {(i + 1): " " for i in range(9)}
return True
else:
print("게임 종료")
return False
def get_player_details(self):
if self.counter % 2 == 0:
return ["A", "X"]
else:
return ["B", "O"]
def insert_input(self, player, marker):
print(f"Print {player} > marker를 둘 위치를 1~9 사이에서 선택: ")
slot_num = int(input())
while self.board[slot_num] != " ":
print("다른 번호 입력: ")
slot_num = int(input())
self.board[slot_num] = marker
def win_game(self, player, marker):
win_cond = ((self.board[1] == self.board[2] == self.board[3] == marker)
or (self.board[4] == self.board[5] == self.board[6] == marker)
or (self.board[7] == self.board[8] == self.board[9] == marker)
or (self.board[1] == self.board[4] == self.board[7] == marker)
or (self.board[2] == self.board[5] == self.board[8] == marker)
or (self.board[3] == self.board[6] == self.board[9] == marker)
or (self.board[1] == self.board[5] == self.board[9] == marker)
or (self.board[3] == self.board[5] == self.board[7] == marker))
if win_cond:
self.print_board()
time.sleep(0.5)
print(f"Player {player} 승리!")
return True
else:
return False
def play(self):
while self.playing:
self.print_board()
player_details = self.get_player_details()
self.insert_input(*player_details)
self.counter += 1
winner = self.win_game(*player_details)
if self.counter == 9 and not winner:
print("무승부")
self.tie = True
self.print_board()
if winner or self.tie:
self.playing = self.play_again()
if self.playing:
self.counter = 0
ttt = TicTacToe()
ttt.play()
728x90
'LANGUAGE STUDY > PYTHON' 카테고리의 다른 글
[PYTHON] 로또 번호 자동 생성기 (0) | 2022.10.06 |
---|
Comments