문제 내용
[조건]
1.빙고 보드의 사이즈를 입력(2 이하의 수가 입력된 경우 다시 입력)
2.사이즈가 입력되면 빙고 보드를 다음과 같이 출력
3.빙고 보드를 출력후 첫번째 플레이어부터 게임 시작(행과 열을 입력한 후 현 상황의 빙고보드를 출력)
4,두 번째 플레이어의 입력 후 빙고 보드를 출력(만약, 비어있지 않은 칸을 입력할 경우 재입력을 요청)
5,게임 반복하는 과정에서 승자를 출력(승자의 조건: 가로/세로/대각선 중 플레이어의 말이 채워진 경우)
모든 칸이 다 차 게임 진행이 더이 상 불가능한 경우 게임종료
문제 풀이
def board(bingo, dimension):
for i in range(dimension):
print(' _', end = '')
for i in range(dimension):
print()
print('|', end = '')
for j in range(dimension):
print(bingo[i][j] + '|', end = '')
print()
# 알맞은 dimension 입력할 때까지 반복
while True:
dimension = int(input("Please input the size of the game board(more than 2): "))
if dimension <= 2 :
print('[Error] try again')
else:
break
bingo = [['_']*dimension for i in range(dimension)]
board(bingo, dimension)
turn = 1
# 플레이 횟수를 나타내는 변수 play_count 생성
play_count = 0
while True:
print('<Play no.{}>'.format(play_count+1))
if turn == 1:
print('Currently player: 1')
row_1 = int(input('Which row?(start with 1)'))
column_1 = int(input('Which column?(start with 1)'))
if bingo[row_1-1][column_1-1] != '_':
print('Space is not empty. Try again')
turn = 1
continue
else:
bingo[row_1-1][column_1-1] = 'O'
board(bingo,dimension)
turn = 2
# 이 부분이 원래 if였는데 플레이어 1, 2 각자에게 적용이 안되는 부분들이 있어서
# elif로 수정했습니다.
elif turn == 2:
print('Currently player: 2')
row_2 = int(input('Which row?(start with 1) '))
column_2 = int(input('Which column?(start with 1) '))
if bingo[row_2-1][column_2-1] != '_':
print('Space is not empty. Try again')
turn = 2
continue
else:
bingo[row_2-1][column_2-1] = 'X'
board(bingo,dimension)
turn = 1
check_diag = []
check_reverse = []
check_row = []
check_column =[]
for i in range(dimension):
check_diag.append(bingo[i][i])
check_reverse.append(bingo[dimension-i-1][i])
# row, column에 의한 빙고는 이중for문으로 확인하기 때문에
# 두 번째 for문을 통해 빙고 여부를 확인하고
for j in range(dimension):
check_row.append(bingo[i][j])
check_column.append(bingo[j][i])
if set(check_row) == {'O'}:
print('Player 1 wins!')
turn = 0
elif set(check_row) == {'X'}:
print('Player 2 wins!')
turn = 0
# 두 번째 for문이 끝나면 check_row를 초기화를 시켜주어야합니다.
check_row = []
if set(check_column) == {'O'}:
print('Player 1 wins!')
turn = 0
elif set(check_column) == {'X'}:
print('Player 2 wins!')
turn = 0
# 마찬가지로 두 번째 for문이 끝나면 check_column 초기화
check_column = []
check_diag = set(check_diag)
check_reverse = set(check_reverse)
if check_diag == {'O'} or check_reverse == {'O'}:
print('Player 1 wins!')
turn = 0
elif check_diag == {'X'} or check_reverse == {'X'}:
print('Player 2 wins!')
turn = 0
# 누군가의 플레이가 끝나면 1씩 증가합니다.
play_count += 1
# 위의 코드를 보시면 승자가 나타날 경우 turn은 0이 됩니다.
# turn이 0이 되었거나 플레이 횟수가 dimension의 제곱값이 되면
# 경기를 종료합니다.
if turn == 0 or play_count == dimension**2:
print('Finish')
break
코드 결과
참고
'코드예시👨🏻💻▶️ 파이썬' 카테고리의 다른 글
파이썬 알파벳 모래시계 출력하기 (0) | 2020.10.21 |
---|---|
파이썬 자릿수의 팩토리얼을 더하면 자기자신이 되는 숫자 판별 (0) | 2020.10.21 |
파이썬 방 평수 계산하기 (0) | 2020.10.21 |
파이썬 반복문으로 오일러 상수 구하기 (0) | 2020.10.21 |
파이썬 랜덤으로 숫자 뽑을때 중복 제거하고 작은수 찾기 (0) | 2020.10.21 |