출처 : 반크_독도2023
참고풀이]
from tkinter import *
from tkinter import messagebox #메세지박스 추가
Size=3
#승자여부를 체크한다.
def Count():
p1=0 #X의 개수를 세는 변수
p2=0 #O의 개수를 세는 변수
px=False #X의 승리여부 체크변수
po=False #O의 승리여부 체크변수
#X=1로 체크, O=2로 체크된다.
#열의 개수를 체크한다.
for c in range(Size):
p1=p2=0
for r in range(Size):
if Chk[r][c]==1:
p1+=1
else:
p1=0
if Chk[r][c]==2:
p2+=1
else:
p2=0
if p1==3:
px=True
break
if p2==3:
po=True
break
#행의 개수를 체크한다.
for r in range(Size):
p1=p2=0
for c in range(Size):
if Chk[r][c]==1:
p1+=1
else:
p1=0
if Chk[r][c]==2:
p2+=1
else:
p2=0
if p1==3:
px=True
break
if p2==3:
po=True
break
#왼쪽 대각선의 개수를 체크한다.
p1=p2=0
for r in range(Size):
if Chk[r][r]==1:
p1+=1
if p1==3:
px=True
break
else:
p1=0
if Chk[r][r]==2:
p2+=1
if p2==3:
po=True
break
else:
p2=0
#오른쪽 대각선의 개수를 체크한다.
p1=p2=0
for r in range(Size):
if Chk[r][Size-1-r]==1:
p1+=1
if p1==3:
px=True
break
else:
p1=0
if Chk[r][Size-1-r]==2:
p2+=1
if p2==3:
po=True
break
else:
p2=0
#승자여부를 체크한다.
if px:
messagebox.showinfo("승리여부 결과","Player1이 이겼습니다.")
if po:
messagebox.showinfo("승리여부 결과","Player2가 이겼습니다.")
#i번째 버튼을 누를 수 있는지 검사한다. 누를 수 있으면 X나 O를 표시한다.
def checked(i):
global player
button = List[i] #리스트에서 I번째 버튼 객체를 가져온다.
#버튼이 초기상태가 아니면 이미 누른 버튼이므로 아무것도 하지 않고 리턴한다.
if button["text"] != " ":
return
button["text"] = " " + player+" "
button["bg"] = "yellow"
if player=="X":
player = "O"
button["bg"] = "yellow"
Chk[i//Size][i%Size] = 1
Count()
else:
player = "X"
button["bg"] = "lightgreen"
Chk[i//Size][i%Size] = 2
Count()
window = Tk() #윈도우를 생성한다.
player="X" #시작은 플레이어 X이다.
List = []
Chk=[[0 for j in range(Size)] for i in range(Size)] #승자여부 체크리스트
#9개의 버튼을 생성하여 격자 형태로 윈도우에 배치한다.
for i in range(Size*Size):
b = Button(window, text=" ", command=lambda k=i: checked(k))
b.grid(row=i//Size, column=i%Size)
List.append(b) # 버튼 객체를 리스트에 저장한다.
window.mainloop()
참고풀이 결과]
시작장)
게임 결과창)
대한민국의 아름다운 영토, 독도
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 280제] 파이썬 EXPRESS CHAPTER 9. 도전문제 p433 (0) | 2024.05.22 |
---|---|
Python 279제] 파이썬 EXPRESS CHAPTER 9. 도전문제 p428 (0) | 2024.05.21 |
Python 277제] 2012년 한국정보올림피아드 지역본선 초등부 1번 오븐 시계 (0) | 2024.05.15 |
Python 276제] 2013년 한국정보올림피아드 지역본선 초등부 1번 그릇 (0) | 2024.05.10 |
Python 275제] 2014년 한국정보올림피아드 지역본선 초등부 1번 과자 (0) | 2024.05.08 |
댓글