파이썬
오목게임 만들기-22.06.03~22.06.07
AIN99
2022. 6. 7. 19:12
728x90
검색 Tip : pyqt qlabel pixmap
아그런데 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