이번 포스트에서는 파이썬과 Tkinter를 사용하여 간단한 오목 게임을 만들어보겠습니다. 오목은 가로, 세로, 대각선 방향으로 다섯 개의 돌을 연속으로 놓으면 이기는 게임으로, 기본적인 오목 게임 룰을 코드로 구현해보겠습니다.
코드를 실행하면 위와 같이 오목판이 만들어집니다. 그럼 지금부터 코드를 간단히 설명드릴게요.
코드 설명
1. 오목판 초기화 함수
def initialize_board():
global board, current_player
board = [['+' for _ in range(15)] for _ in range(15)]
current_player = 'black'
initialize_board() 함수는 오목판을 초기화합니다. 15x15 크기의 오목판을 '+'로 초기화하고, 플레이어를 'black'으로 설정합니다.
2. 승리 조건 확인 함수
def check_winner(row, col):
# ... (중략) ...
check_winner(row, col) 함수는 주어진 돌을 기준으로 승리 조건을 확인합니다. 가로, 세로, 대각선 방향에 대해 다섯 개의 돌이 연속되는지 확인하여 승리 여부를 반환합니다.
3. 돌 놓기 함수
def place_piece(event):
# ... (중략) ...
place_piece(event) 함수는 마우스 클릭 이벤트를 처리하며, 사용자가 돌을 놓을 때 호출됩니다. 클릭한 위치에 돌을 놓고 승리 여부를 확인하며, 승리 시 사용자에게 다시 시작 여부를 물어봅니다.
4. 다시 시작 기능
def initialize_board():
# ... (중략) ...
def place_piece(event):
# ... (중략) ...
def change_player():
# ... (중략) ...
def draw_lines():
# ... (중략) ...
# GUI 생성
root = tk.Tk()
root.title("Omok Game")
canvas = tk.Canvas(root, width=450, height=450)
canvas.pack()
draw_lines()
canvas.bind("<Button-1>", place_piece)
root.mainloop()
이 코드는 Tkinter를 사용하여 GUI를 생성하고, 사용자가 다시 시작을 선택할 경우 오목판을 초기화하여 새로운 게임을 시작합니다.
이렇게 간단한 코드로 오목 게임을 구현해 보았습니다. Tkinter를 사용하여 GUI를 만들고, 마우스 이벤트를 처리하여 게임을 진행하는 방법을 배워보았습니다. 또한, 승리 조건 확인 및 게임 재시작 기능을 구현하여 더욱 완성도 있는 게임으로 만들어보았습니다.
이 코드를 통해 파이썬으로 간단한 게임을 만드는 방법에 대해 조금이나마 이해하셨기를 바랍니다. 다양한 기능을 추가하여 보다 복잡하고 유용한 게임으로 확장해 보는 것도 좋은 학습 방법입니다.
전체 코드는 아래를 참고하시면 됩니다.
import tkinter as tk
from tkinter import messagebox
# 오목판 초기화
def initialize_board():
global board, current_player
board = [['+' for _ in range(15)] for _ in range(15)]
current_player = 'black'
initialize_board()
def print_board():
for row in board:
print(" ".join(row))
def check_winner(row, col):
directions = [(0, 1), (1, 0), (1, 1), (1, -1)] # 가로, 세로, 대각선 방향
for dr, dc in directions:
count = 1 # 현재 놓은 돌을 기준으로 시작하므로 1로 초기화
for i in range(1, 5):
r, c = row + dr * i, col + dc * i
if 0 <= r < 15 and 0 <= c < 15 and board[r][c] == current_player:
count += 1
else:
break
for i in range(1, 5):
r, c = row - dr * i, col - dc * i
if 0 <= r < 15 and 0 <= c < 15 and board[r][c] == current_player:
count += 1
else:
break
if count >= 5:
return True
return False
def place_piece(event):
col = round(event.x / 30)
row = round(event.y / 30)
if board[row][col] == '+':
board[row][col] = current_player
color = 'black' if current_player == 'black' else 'white'
canvas.create_oval(col * 30 - 10, row * 30 - 10, col * 30 + 10, row * 30 + 10, fill=color)
if check_winner(row, col):
print_board()
print(f"Player {current_player} wins!")
if messagebox.askyesno("Omok Game", f"Player {current_player} wins! Do you want to play again?"):
initialize_board()
canvas.delete("all")
draw_lines()
else:
change_player()
def change_player():
global current_player
if current_player == 'black':
current_player = 'white'
else:
current_player = 'black'
def draw_lines():
for i in range(15):
canvas.create_line(0, i * 30, 450, i * 30)
canvas.create_line(i * 30, 0, i * 30, 450)
# GUI 생성
root = tk.Tk()
root.title("Omok Game")
canvas = tk.Canvas(root, width=450, height=450)
canvas.pack()
draw_lines()
canvas.bind("<Button-1>", place_piece)
root.mainloop()
'자기 계발' 카테고리의 다른 글
직장인 비지니스 중국어 단어 공부(HSK 4급 수준) (0) | 2025.02.05 |
---|---|
30대 직장인 HSK 4급 독학 도전! (오늘의 4급 단어 30개) (3) | 2025.02.03 |
HSK 2급 왕초보 완전 독학 합격 후기(1개월 교재 없이 준비하기) (0) | 2023.12.03 |
유튜브로 중국어 독학 공부하기 - HSK2급 준비 (0) | 2023.08.29 |
Ringle 3개월 수강 후기 - 영어 향상의 새로운 시작 (1) | 2023.08.25 |