관리 메뉴

거니의 velog

231106_파이썬 기초 8 본문

대덕인재개발원_파이썬 프로그래밍

231106_파이썬 기초 8

Unlimited00 2023. 11. 6. 08:28

[day05.myomok02]

import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if j < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        # print("myclick")
        
        # self.arr2D[0][0] = 1
        # self.myrender()
        
        str_ij = self.sender().toolTip()
        # print(str_ij)
        arr_ij = str_ij.split(",")
        # print(arr_ij)
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        # print(str_i, str_j)
        i = int(str_i)
        j = int(str_j)
        
        # self.arr2D[i][j] = 1
        # self.myrender()
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        #print("up",up)
        dw = self.getDW(i,j,stone)
        #print("dw",dw)
        le = self.getLE(i,j,stone)
        print("le",le)
            
        self.myrender()
        
        self.flagWB = not self.flagWB
        
        # print(self.arr2D)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        # print("myclick")
        
        # self.arr2D[0][0] = 1
        # self.myrender()
        
        str_ij = self.sender().toolTip()
        # print(str_ij)
        arr_ij = str_ij.split(",")
        # print(arr_ij)
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        # print(str_i, str_j)
        i = int(str_i)
        j = int(str_j)
        
        # self.arr2D[i][j] = 1
        # self.myrender()
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        #print("up",up)
        dw = self.getDW(i,j,stone)
        #print("dw",dw)
        le = self.getLE(i,j,stone)
        #print("le",le)
        ri = self.getRI(i,j,stone)
        print("ri",ri)
            
        self.myrender()
        
        self.flagWB = not self.flagWB
        
        # print(self.arr2D)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()

 


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
            
        self.myrender()
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton, QMessageBox

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
        
        d1 = up + dw + 1
        d2 = ur + dl + 1
        d3 = le + ri + 1
        d4 = ul + dr + 1
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5 :
            str_win = "승리하였습니다."
            QMessageBox.about(self,'Calling',str_win)
            
        self.myrender()
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton, QMessageBox

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.flagOver = False
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        if self.flagOver : return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
        
        d1 = up + dw + 1
        d2 = ur + dl + 1
        d3 = le + ri + 1
        d4 = ul + dr + 1
        
        self.myrender()
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5 :
            str_win = "GAME OVER"
            QMessageBox.about(self,'오목',str_win)
            self.flagOver = True
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()

게임 끝 이후에 더이상 게임이 진행되지 않게끔 처리했다.


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton, QMessageBox

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.flagOver = False
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.show()
        self.myrender()
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        if self.flagOver : return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
        
        d1 = up + dw + 1
        d2 = ur + dl + 1
        d3 = le + ri + 1
        d4 = ul + dr + 1
        
        self.myrender()
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5 :
            #str_win = "GAME OVER"
            if self.flagWB: 
                str_win = "흑돌 승리"
            else: 
                str_win = "백돌 승리"
            QMessageBox.about(self,'오목',str_win)
            self.flagOver = True
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()


import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton, QMessageBox

form_class = uic.loadUiType("myomok02.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0]
        ]
        self.pb2D = []
        self.flagWB = True
        self.flagOver = False
        self.setupUi(self)
        
        for i in range(10):
            line = []
            for j in range(10):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.pbReset.clicked.connect(self.myreset)
        
        self.show()
        self.myrender()
        
    def myreset(self):
        #print("myreset")
        for i in range(10):
            for j in range(10):
                self.arr2D[i][j] = 0
        self.myrender()
        self.flagWB = True
        self.flagOver = False
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 10): # y축
            for j in range(0, 10): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        if self.flagOver : return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
        
        d1 = up + dw + 1
        d2 = ur + dl + 1
        d3 = le + ri + 1
        d4 = ul + dr + 1
        
        self.myrender()
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5 :
            #str_win = "GAME OVER"
            if self.flagWB: 
                str_win = "흑돌 승리"
            else: 
                str_win = "백돌 승리"
            QMessageBox.about(self,'오목',str_win)
            self.flagOver = True
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()

* 초기화 버튼 성공


[myomok03_19.ui]

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>955</width>
    <height>760</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pbReset">
    <property name="geometry">
     <rect>
      <x>790</x>
      <y>30</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="toolTip">
     <string/>
    </property>
    <property name="text">
     <string>초기화</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>955</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

[day05.myomok03_19]

import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.Qt import QPushButton, QMessageBox

form_class = uic.loadUiType("myomok03_19.ui")[0]

class MainClass(QMainWindow, form_class):
    def __init__(self):
        QMainWindow.__init__(self)
        self.arr2D = [
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
            [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0],
        ]
        self.pb2D = []
        self.flagWB = True
        self.flagOver = False
        self.setupUi(self)
        
        for i in range(19):
            line = []
            for j in range(19):
                pb = QPushButton("", self)
                pb.setToolTip("{},{}".format(i,j))
                pb.setIcon(QtGui.QIcon('0.png'))
                pb.setIconSize(QtCore.QSize(40, 40))
                #pb.setGeometry(QtCore.QRect(i*40, j*40, 40, 40)) # x,y축 기준
                pb.setGeometry(QtCore.QRect(j*40, i*40, 40, 40)) # 배열 기준
                pb.clicked.connect(self.myclick)
                line.append(pb)
            self.pb2D.append(line)
        
        self.pbReset.clicked.connect(self.myreset)
        
        self.show()
        self.myrender()
        
    def myreset(self):
        #print("myreset")
        for i in range(19):
            for j in range(19):
                self.arr2D[i][j] = 0
        self.myrender()
        self.flagWB = True
        self.flagOver = False
        
    def myrender(self):
        # self.pb2D[3][1].setIcon(QtGui.QIcon('2.png'))
        for i in range(0, 19): # y축
            for j in range(0, 19): # x축
                if self.arr2D[i][j] == 0:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2D[i][j] == 1:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2D[i][j] == 2:
                    self.pb2D[i][j].setIcon(QtGui.QIcon('2.png'))
    
    def getUP(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def getDW(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                if i < 0: # 파이썬에만 있는 오류로 index가 -1이 되는 순간 역회전을 함. 이를 방지한다.
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getLE(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getRI(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getUR(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i - 1
                j = j + 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
        
    def getDL(self, i, j, stone):
        cnt = 0
        try: # 맨 밑 단을 누르면 프로그램이 종료되는 현상을 방지하기 위한 예외 처리문
            while True:
                i = i + 1
                j = j - 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2D[i][j] == stone:
                    cnt = cnt + 1
                else:
                    return cnt
        except:
            return cnt
    
    def myclick(self) :
        if self.flagOver : return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        str_i = arr_ij[0]
        str_j = arr_ij[1]
        i = int(str_i)
        j = int(str_j)
        
        if self.arr2D[i][j] > 0 : 
            return
        
        stone = -1
        if self.flagWB:
            self.arr2D[i][j] = 2
            stone = 2
        else:
            self.arr2D[i][j] = 1
            stone = 1
            
        up = self.getUP(i,j,stone)
        dw = self.getDW(i,j,stone)
        le = self.getLE(i,j,stone)
        ri = self.getRI(i,j,stone)
        
        ul = self.getUL(i,j,stone)
        dr = self.getDR(i,j,stone)
        ur = self.getUR(i,j,stone)
        dl = self.getDL(i,j,stone)
        
        print(up, dw, le, ri, ul, dr, ur, dl)
        
        d1 = up + dw + 1
        d2 = ur + dl + 1
        d3 = le + ri + 1
        d4 = ul + dr + 1
        
        self.myrender()
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5 :
            #str_win = "GAME OVER"
            if self.flagWB: 
                str_win = "흑돌 승리"
            else: 
                str_win = "백돌 승리"
            QMessageBox.about(self,'오목',str_win)
            self.flagOver = True
        
        self.flagWB = not self.flagWB
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainClass()
    app.exec_()


 

'대덕인재개발원_파이썬 프로그래밍' 카테고리의 다른 글

231107_DB 개론 2  (0) 2023.11.07
231106_DB 개론 1  (0) 2023.11.06
231103_파이썬 기초 7  (0) 2023.11.03
231102_파이썬 기초 6  (0) 2023.11.02
231101_파이썬 기초 5  (0) 2023.11.01