파이썬

오목게임 만들기-22.06.03~22.06.07

AIN99 2022. 6. 7. 19:12
728x90

 

 

 

검색 Tip : pyqt qlabel pixmap

https://wikidocs.net/33768 참고

아그런데 label은 이벤트가 안먹히네....

버튼으로 만들어보자 

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt5.Qt import QPixmap


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

class MainClass(QMainWindow, form_class):
    def __init__(self) :
        QMainWindow.__init__(self)
        self.setupUi(self)
        
        pixmap = QPixmap('0.png')
        mylbl = QLabel("sdfs",self)
        mylbl.setPixmap(pixmap)
        
        mylbl2 = QLabel("567",self)
        mylbl2.move(40,0)
        mylbl2.setPixmap(pixmap)
        
        
        self.show()

        self.pb.clicked.connect(self.myclick)
        self.lbl.clicked.connect(self.mychange)
        
    def mychange(self):
        print("mychange")
    
    def myclick(self):
        self.lbl.setText("Good Evening")
    
        
if __name__ == "__main__" :
    app = QApplication(sys.argv) 
    window = MainClass() 
    app.exec_()

=>안먹힘!!!


버튼으로 만들기

 

다시 40, 40 으로 바꿔주기 

 

 

def printerButton(self,tab_name):
    self.printButton = QtGui.QPushButton(tab_name)
    self.printButton.setIcon(QtGui.QIcon('icons/printer.tif'))
    self.printButton.setIconSize(QtCore.QSize(130,130))
    self.printButton.setGeometry(QtCore.QRect(1030, 500, 161, 61))

 10,10으로 한것(myomok02.py)

import sys
from PyQt5 import uic, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton
from PyQt5.Qt import QPixmap, QMessageBox
from _ast import If


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

class MainClass(QMainWindow, form_class):
    def __init__(self) :
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.flag_wb = True
        self.flag_over = False
        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.dol2d = []
        
        for i in range(10):
            line = []
            for j in range(10):
                doll = QPushButton("",self)
                doll.setIcon(QtGui.QIcon('0.png'))
                doll.setIconSize(QtCore.QSize(40,40))
                doll.setToolTip("{},{}".format(i,j))
                doll.setGeometry(QtCore.QRect(j*40, i*40, 40, 40))
                doll.clicked.connect(self.myclick)
                line.append(doll)
            self.dol2d.append(line)
            
        self.pb.clicked.connect(self.myreset)    
        self.show()
        self.myrender()
        
    def myreset(self):
        self.flag_over = False
        self.flag_wb = True
        for i in range(10):
            for j in range(10):
                self.arr2d[i][j]=0
        self.myrender()
        
    def myrender(self):
        for i in range(10):
            for j in range(10):
                if self.arr2d[i][j] == 0:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2d[i][j] == 1:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2d[i][j] == 2:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('2.png')) 
 
    def checkRI(self,i,j,stone):
        cnt = 0
        try:
            while True:
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt 
                    
    def checkUP(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
            
    def checkDW(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
    def checkLE(self,i,j,stone):
        cnt = 0
        try:
            while True:
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt 
        
    def checkUR(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
    def checkUL(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
        
    def checkDR(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
        
    def checkDL(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
                    
    def myclick(self):
        if self.flag_over:
            return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        i = int(arr_ij[0])
        j = int(arr_ij[1])
        
        if self.arr2d[i][j]>0:
            return
        
        stone = -1
        if self.flag_wb :
            self.arr2d[i][j] = 1
            stone = 1
        else:
            self.arr2d[i][j] = 2  
            stone = 2
        up = self.checkUP(i,j,stone)
        dw = self.checkDW(i,j,stone)
        ri = self.checkRI(i,j,stone)
        le = self.checkLE(i,j,stone)

        ur = self.checkUR(i,j,stone)
        ul = self.checkUL(i,j,stone)
        dr = self.checkDR(i,j,stone)
        dl = self.checkDL(i,j,stone)
        
        d1= up + dw + 1
        d2= ur + dl + 1
        d3= ri + le + 1
        d4= ul + dr + 1
        
        
        self.myrender() 
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5:
            if self.flag_wb:
                QMessageBox.about(self,'Omok',"백돌승리")
            else :
                QMessageBox.about(self,'Omok',"흑돌승리")
            self.flag_over = True

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

19.19로 한것(myomok19.py)

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



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

class MainClass(QMainWindow, form_class):
    def __init__(self) :
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.flag_wb = True
        self.flag_over = False
        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.dol2d = []
        
        for i in range(19):
            line = []
            for j in range(19):
                doll = QPushButton("",self)
                doll.setIcon(QtGui.QIcon('0.png'))
                doll.setIconSize(QtCore.QSize(40,40))
                doll.setToolTip("{},{}".format(i,j))
                doll.setGeometry(QtCore.QRect(j*40, i*40, 40, 40))
                doll.clicked.connect(self.myclick)
                line.append(doll)
            self.dol2d.append(line)
            
        self.pb.clicked.connect(self.myreset)    
        self.show()
        self.myrender()
        
    def myreset(self):
        self.flag_over = False
        self.flag_wb = True
        for i in range(19):
            for j in range(19):
                self.arr2d[i][j]=0
        self.myrender()
        
    def myrender(self):
        for i in range(19):
            for j in range(19):
                if self.arr2d[i][j] == 0:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('0.png'))
                if self.arr2d[i][j] == 1:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('1.png'))
                if self.arr2d[i][j] == 2:
                    self.dol2d[i][j].setIcon(QtGui.QIcon('2.png')) 
 
    def checkRI(self,i,j,stone):
        cnt = 0
        try:
            while True:
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt 
                    
    def checkUP(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
            
    def checkDW(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
    def checkLE(self,i,j,stone):
        cnt = 0
        try:
            while True:
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt 
        
    def checkUR(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
    def checkUL(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i -= 1
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
        
    def checkDR(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                j += 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
        
    def checkDL(self,i,j,stone):
        cnt = 0
        try:
            while True:
                i += 1
                j -= 1
                if i < 0:
                    return cnt
                if j < 0:
                    return cnt
                if self.arr2d[i][j]==stone:
                    cnt += 1
                else:
                    return cnt
        except:
            return cnt
        
                    
    def myclick(self):
        if self.flag_over:
            return
        
        str_ij = self.sender().toolTip()
        arr_ij = str_ij.split(",")
        i = int(arr_ij[0])
        j = int(arr_ij[1])
        
        if self.arr2d[i][j]>0:
            return
        
        stone = -1
        if self.flag_wb :
            self.arr2d[i][j] = 1
            stone = 1
        else:
            self.arr2d[i][j] = 2  
            stone = 2
        up = self.checkUP(i,j,stone)
        dw = self.checkDW(i,j,stone)
        ri = self.checkRI(i,j,stone)
        le = self.checkLE(i,j,stone)

        ur = self.checkUR(i,j,stone)
        ul = self.checkUL(i,j,stone)
        dr = self.checkDR(i,j,stone)
        dl = self.checkDL(i,j,stone)
        
        d1= up + dw + 1
        d2= ur + dl + 1
        d3= ri + le + 1
        d4= ul + dr + 1
        
        
        self.myrender() 
        
        if d1 == 5 or d2 == 5 or d3 == 5 or d4 == 5:
            if self.flag_wb:
                QMessageBox.about(self,'Omok',"백돌승리")
            else :
                QMessageBox.about(self,'Omok',"흑돌승리")
            self.flag_over = True

               
        
        self.flag_wb = not self.flag_wb
        
if __name__ == "__main__" :
    app = QApplication(sys.argv) 
    window = MainClass() 
    app.exec_()
728x90