В настоящее время я работаю над игрой в Блэк Джек с использованием PyQt5. Я пытаюсь создать функцию «Hit», как при вытягивании большего количества карт, но я не знаю, как заставить ее работать.
import sys
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QLabel, QPushButton
import random
from PyQt5.QtCore import Qt
class BlackJack(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Setup layout management
grid= QGridLayout()
self.setLayout(grid)
# The cards
heart=[str(i)+'H' for i in range(2,11)]
heart_sym=['AH','JH','QH','KH']
heart=heart+heart_sym
diamond=[str(i)+'D' for i in range(2,11)]
diamond_sym=['AD','JD','QD','KD']
diamond=diamond+diamond_sym
club=[str(i)+'C' for i in range(2,11)]
club_sym=['AC','JC','QC','KC']
club=club+club_sym
spade=[str(i)+'S' for i in range(2,11)]
spade_sym=['AS','JS','QS','KS']
spade=spade+spade_sym
fulldeck=heart+diamond+club+spade
# Initial Score
myscorelabel=QLabel('My Score:')
cpuscorelabel=QLabel('CPU Score:')
grid.addWidget(myscorelabel,3,0)
grid.addWidget(cpuscorelabel,2,0)
# Card Value
cardvalue={'AH':1,'AD':1,'AC':1,'AS':1,'2H':2,'2D':2,'2C':2,'2S':2,
'3H':3,'3D':3,'3C':3,'3S':3,'4H':4,'4D':4,'4C':4,'4S':4,
'5H':5,'5D':5,'5C':5,'5S':5,'6H':6,'6D':6,'6C':6,'6S':6,
'7H':7,'7D':7,'7C':7,'7S':7,'8H':7,'8D':8,'8C':8,'8S':8,
'9H':9,'9D':9,'9C':9,'9S':9,'10H':10,'10D':10,'10C':10,'10S':10,
'JH':11,'JD':11,'JC':11,'JS':11,'QH':12,'QD':12,'QC':12,'QS':12,'KH':13,'KD':13,'KC':13,'KS':13
}
# Initial 2 Cards
def first():
global cpuscore
global myscore
global cpuc1
global cpuc2
global myc1
global myc2
cpuc1=random.choice(fulldeck)
fulldeck.remove(cpuc1)
cpuc2=random.choice(fulldeck)
fulldeck.remove(cpuc2)
cpuscore=cardvalue[cpuc1]+cardvalue[cpuc2]
myc1=random.choice(fulldeck)
fulldeck.remove(myc1)
myc2=random.choice(fulldeck)
fulldeck.remove(myc2)
myscore=cardvalue[myc1]+cardvalue[myc2]
print('Hello')
while True:
first()
if cpuscore>21:
continue
elif myscore>21:
continue
else:
myscorelabel.setText('My score: {0}'.format(myscore))
cpuscorelabel.setText('CPU score: {0}'.format(cpuscore))
break
# Game screen
cpu_c1=QLabel(self)
cpu_c1pix=QPixmap('E:\\myname\\Cards for Python project\\red_back')
cpu_c1pix=cpu_c1pix.scaled(200,200, Qt.KeepAspectRatio, Qt.FastTransformation)
cpu_c1.setPixmap(cpu_c1pix)
grid.addWidget(cpu_c1,1,0)
cpu_c2=QLabel(self)
cpu_c2pix=QPixmap('E:\\myname\\Cards for Python project\\red_back')
cpu_c2pix=cpu_c2pix.scaled(200,200, Qt.KeepAspectRatio, Qt.FastTransformation)
cpu_c2.setPixmap(cpu_c1pix)
grid.addWidget(cpu_c2,1,1)
my_c1=QLabel(self)
my_c1pix=QPixmap('E:\\myname\\Cards for Python project\\{0}'.format(myc1))
my_c1pix=my_c1pix.scaled(200,200, Qt.KeepAspectRatio, Qt.FastTransformation)
my_c1.setPixmap(my_c1pix)
grid.addWidget(my_c1,4,0)
my_c2=QLabel(self)
my_c2pix=QPixmap('E:\\myname\\Cards for Python project\\{0}'.format(myc2))
my_c2pix=my_c2pix.scaled(200,200, Qt.KeepAspectRatio, Qt.FastTransformation)
my_c2.setPixmap(my_c2pix)
grid.addWidget(my_c2,4,1)
self.bhit=QPushButton('Hit')
self.bhit.clicked.connect(self.hit)
grid.addWidget(self.bhit,5,0)
self.bstand=QPushButton('Stand')
self.bstand.clicked.connect(self.stand)
grid.addWidget(self.bstand,5,1)
# Window's essentials
self.setGeometry(500,200,1000,500)
self.setWindowTitle('Black Jack')
self.setWindowIcon(QIcon('E:\\myname\\blackjackicon'))
self.show()
def hit(self):
print('You hit')
def stand(self):
print('You stand')
if __name__ == '__main__':
app = QApplication(sys.argv)
BlackJack = BlackJack()
sys.exit(app.exec_())
Я хочу использовать «bhit». кнопка, чтобы вытянуть больше карточек и показать их на экране. Есть мысли о том, как мне выполнить эту задачу?