코드예시👨🏻‍💻▶️ 파이썬

파이썬 빙고게임 만들기

코뮤니티 2020. 10. 21. 23:25

문제 내용

[조건]

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

 

 

코드 결과


 

 

나와 어울리는 개발자 유형 찾기

MBTI로 알아보는 개발자 유형 내 안의 개발자를 찾아서...⭐

comu.codeuniv.kr

참고

 

파이썬 빙고만들기

대한민국 모임의 시작, 네이버 카페

cafe.naver.com