目錄
水果機(jī)模擬器的介紹
制作水果機(jī)的步驟
水果機(jī)的UI設(shè)計(jì)?
水果機(jī)的代碼
UI內(nèi)置代碼?
?用代碼對UI進(jìn)行修飾
?窗體屬性
啟動游戲?
?Qtime的timeout事件
?窗體加載
總結(jié)?
水果機(jī)模擬器的介紹
網(wǎng)絡(luò)上對的介紹:水果機(jī)最為常見的是在街機(jī)廳中見到的,以新穎的水果作為游戲主題,融合了博彩類游戲元素。水果機(jī)界面由24個方格拼接成一個正方形,每個方格中都有一個目標(biāo)(多個不同的圖形,通常為水果),且每個方格下都有一個小燈。玩家投入游戲幣后,選擇希望押注的目標(biāo),當(dāng)玩家按下開始鍵后,小燈開始繞著正方形中每個格子轉(zhuǎn),當(dāng)小燈停下來時,如果停在玩家押注的目標(biāo)時,則玩家可贏取相應(yīng)的游戲幣。
我做的水果機(jī)也是按照這個原理,具有隨機(jī)抽獎的功能,會在抽獎剛開始時加速,到達(dá)一定值后減速,抽到某一水果后會用文字提示,下一次抽獎時會接著從上一次停止位置開始。
制作水果機(jī)的步驟
安裝PyQT5 | 做準(zhǔn)備工作,安裝PyQt5等插件。 |
窗體設(shè)計(jì) | 搜集圖片,在Qt里面進(jìn)行設(shè)計(jì)。 |
窗體加載 | 1.創(chuàng)建主窗體 |
2.窗體大小不能隨便更改 | |
3.顯示主窗體 | |
窗體屬性 | 1.創(chuàng)建列表,保存圖片的按鈕 |
2.再創(chuàng)建一個列表,保存圖片的顯示信息 | |
3.設(shè)置“開始”按鈕的鼠標(biāo)單擊cliked的槽函數(shù)。 | |
4.生成一個范圍0-圖片數(shù)-1的隨機(jī)整數(shù)并保存到變量。 | |
5.定義一個布爾變量,初始值為Ture,代表開始游戲計(jì)時器執(zhí)行時間間隔遞減。 | |
啟動游戲 | 1.隨機(jī)生成150-250之間的數(shù)字,代表毫秒數(shù) |
2.實(shí)例化計(jì)時器對象 | |
3.設(shè)置計(jì)時器對象執(zhí)行間隔時間 | |
4.計(jì)時器對象間隔時間到期調(diào)用函數(shù)startTimer | |
5.啟動計(jì)時器 | |
Qtime的timeout事件 | 1.判斷當(dāng)前按鈕列表索引是否為0 |
2.設(shè)置按鈕列表當(dāng)前索引所在按鈕圖片大小變大 | |
3.索引加一 | |
4.判斷索引是否超出按鈕列表最大索引 | |
5.判斷計(jì)時器間隔時間值是減少還是增加 | |
6.判斷計(jì)時器間隔時間是否小于1毫秒 | |
7.判斷計(jì)時器間隔時間是否大于等于350毫秒 | |
8.重新設(shè)置下一次計(jì)時器間隔時間 |
水果機(jī)的UI設(shè)計(jì)
從設(shè)計(jì)上告別博彩的色彩,讓水果機(jī)成為適合所有人的一個選擇工具。
水果機(jī)的代碼
UI內(nèi)置代碼?
這個是用PyQt5工具設(shè)計(jì)并轉(zhuǎn)化而來的代碼,PyQt5具體配置請看這篇博客
http://t.csdn.cn/vleWZhttp://t.csdn.cn/vleWZ
import random
import sys
from msilib import Dialog
import self as self
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer, QSize
from PyQt5.QtGui import QPalette, QPixmap, QBrush
from PyQt5.QtWidgets import QApplication, QMainWindow
def setInterval(self):
"""
:param self:
"""
pass
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(751, 536)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("水果圖片/西瓜果(watermelon fruit)-ico_愛給網(wǎng)_aigei_com.ico"), QtGui.QIcon.Normal,
QtGui.QIcon.Off)
Dialog.setWindowIcon(icon)
self.p1_btn = QtWidgets.QPushButton(Dialog)
self.p1_btn.setGeometry(QtCore.QRect(9, 14, 113, 109))
self.p1_btn.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("水果圖片/蘋果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn.setIcon(icon1)
self.p1_btn.setIconSize(QtCore.QSize(100, 100))
self.p1_btn.setFlat(True)
self.p1_btn.setObjectName("p1_btn")
self.p1_btn_2 = QtWidgets.QPushButton(Dialog)
self.p1_btn_2.setGeometry(QtCore.QRect(132, 14, 113, 109))
self.p1_btn_2.setText("")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap("水果圖片/橙子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_2.setIcon(icon2)
self.p1_btn_2.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_2.setFlat(True)
self.p1_btn_2.setObjectName("p1_btn_2")
self.p1_btn_3 = QtWidgets.QPushButton(Dialog)
self.p1_btn_3.setGeometry(QtCore.QRect(255, 14, 113, 109))
self.p1_btn_3.setText("")
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap("水果圖片/藍(lán)莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_3.setIcon(icon3)
self.p1_btn_3.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_3.setFlat(True)
self.p1_btn_3.setObjectName("p1_btn_3")
self.p1_btn_4 = QtWidgets.QPushButton(Dialog)
self.p1_btn_4.setGeometry(QtCore.QRect(378, 14, 113, 109))
self.p1_btn_4.setText("")
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap("水果圖片/荔枝.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_4.setIcon(icon4)
self.p1_btn_4.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_4.setFlat(True)
self.p1_btn_4.setObjectName("p1_btn_4")
self.p1_btn_5 = QtWidgets.QPushButton(Dialog)
self.p1_btn_5.setGeometry(QtCore.QRect(502, 14, 113, 109))
self.p1_btn_5.setText("")
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap("水果圖片/芒果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_5.setIcon(icon5)
self.p1_btn_5.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_5.setFlat(True)
self.p1_btn_5.setObjectName("p1_btn_5")
self.p1_btn_6 = QtWidgets.QPushButton(Dialog)
self.p1_btn_6.setGeometry(QtCore.QRect(625, 14, 113, 109))
self.p1_btn_6.setText("")
icon6 = QtGui.QIcon()
icon6.addPixmap(QtGui.QPixmap("水果圖片/獼猴桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_6.setIcon(icon6)
self.p1_btn_6.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_6.setFlat(True)
self.p1_btn_6.setObjectName("p1_btn_6")
self.p1_btn_9 = QtWidgets.QPushButton(Dialog)
self.p1_btn_9.setGeometry(QtCore.QRect(625, 134, 113, 109))
self.p1_btn_9.setText("")
icon7 = QtGui.QIcon()
icon7.addPixmap(QtGui.QPixmap("水果圖片/草莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_9.setIcon(icon7)
self.p1_btn_9.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_9.setFlat(True)
self.p1_btn_9.setObjectName("p1_btn_9")
self.p1_btn_16 = QtWidgets.QPushButton(Dialog)
self.p1_btn_16.setGeometry(QtCore.QRect(625, 254, 113, 109))
self.p1_btn_16.setText("")
icon8 = QtGui.QIcon()
icon8.addPixmap(QtGui.QPixmap("水果圖片/葡萄.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_16.setIcon(icon8)
self.p1_btn_16.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_16.setFlat(True)
self.p1_btn_16.setObjectName("p1_btn_16")
self.p1_btn_15 = QtWidgets.QPushButton(Dialog)
self.p1_btn_15.setGeometry(QtCore.QRect(625, 413, 113, 109))
self.p1_btn_15.setText("")
icon9 = QtGui.QIcon()
icon9.addPixmap(QtGui.QPixmap("水果圖片/櫻桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_15.setIcon(icon9)
self.p1_btn_15.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_15.setFlat(True)
self.p1_btn_15.setObjectName("p1_btn_15")
self.p1_btn_13 = QtWidgets.QPushButton(Dialog)
self.p1_btn_13.setGeometry(QtCore.QRect(502, 413, 113, 109))
self.p1_btn_13.setText("")
icon10 = QtGui.QIcon()
icon10.addPixmap(QtGui.QPixmap("水果圖片/青檸.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_13.setIcon(icon10)
self.p1_btn_13.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_13.setFlat(True)
self.p1_btn_13.setObjectName("p1_btn_13")
self.p1_btn_11 = QtWidgets.QPushButton(Dialog)
self.p1_btn_11.setGeometry(QtCore.QRect(378, 413, 113, 109))
self.p1_btn_11.setText("")
icon11 = QtGui.QIcon()
icon11.addPixmap(QtGui.QPixmap("水果圖片/楊梅.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_11.setIcon(icon11)
self.p1_btn_11.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_11.setFlat(True)
self.p1_btn_11.setObjectName("p1_btn_11")
self.p1_btn_12 = QtWidgets.QPushButton(Dialog)
self.p1_btn_12.setGeometry(QtCore.QRect(255, 413, 113, 109))
self.p1_btn_12.setText("")
icon12 = QtGui.QIcon()
icon12.addPixmap(QtGui.QPixmap("水果圖片/香蕉.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_12.setIcon(icon12)
self.p1_btn_12.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_12.setFlat(True)
self.p1_btn_12.setObjectName("p1_btn_12")
self.p1_btn_14 = QtWidgets.QPushButton(Dialog)
self.p1_btn_14.setGeometry(QtCore.QRect(132, 413, 113, 109))
self.p1_btn_14.setText("")
icon13 = QtGui.QIcon()
icon13.addPixmap(QtGui.QPixmap("水果圖片/西瓜.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_14.setIcon(icon13)
self.p1_btn_14.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_14.setFlat(True)
self.p1_btn_14.setObjectName("p1_btn_14")
self.p1_btn_10 = QtWidgets.QPushButton(Dialog)
self.p1_btn_10.setGeometry(QtCore.QRect(9, 413, 113, 109))
self.p1_btn_10.setText("")
icon14= QtGui.QIcon()
icon14.addPixmap(QtGui.QPixmap("水果圖片/無花果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_10.setIcon(icon14)
self.p1_btn_10.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_10.setFlat(True)
self.p1_btn_10.setObjectName("p1_btn_10")
self.p1_btn_8 = QtWidgets.QPushButton(Dialog)
self.p1_btn_8.setGeometry(QtCore.QRect(9, 254, 113, 109))
self.p1_btn_8.setText("")
icon15 = QtGui.QIcon()
icon15.addPixmap(QtGui.QPixmap("水果圖片/桃子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_8.setIcon(icon15)
self.p1_btn_8.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_8.setFlat(True)
self.p1_btn_8.setObjectName("p1_btn_8")
self.p1_btn_7 = QtWidgets.QPushButton(Dialog)
self.p1_btn_7.setGeometry(QtCore.QRect(9, 134, 113, 109))
self.p1_btn_7.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.p1_btn_7.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.p1_btn_7.setText("")
icon16 = QtGui.QIcon()
icon16.addPixmap(QtGui.QPixmap("水果圖片/樹莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.p1_btn_7.setIcon(icon16)
self.p1_btn_7.setIconSize(QtCore.QSize(100, 100))
self.p1_btn_7.setFlat(True)
self.p1_btn_7.setObjectName("p1_btn_7")
self.message_lbl = QtWidgets.QLabel(Dialog)
self.message_lbl.setGeometry(QtCore.QRect(160, 190, 441, 81))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(True)
font.setWeight(75)
self.message_lbl.setFont(font)
self.message_lbl.setAlignment(QtCore.Qt.AlignCenter)
self.message_lbl.setObjectName("message_lbl")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(310, 310, 131, 61))
self.pushButton.setMouseTracking(True)
self.pushButton.setIconSize(QtCore.QSize(16, 16))
self.pushButton.setObjectName("pushButton")
self.pushButton.background_color: (1.0, 0.4, 1.0, 0.0)
self.p1_btn.raise_()
self.p1_btn_2.raise_()
self.p1_btn_3.raise_()
self.p1_btn_4.raise_()
self.p1_btn_5.raise_()
self.p1_btn_6.raise_()
self.p1_btn_9.raise_()
self.p1_btn_16.raise_()
self.p1_btn_15.raise_()
self.p1_btn_11.raise_()
self.p1_btn_13.raise_()
self.p1_btn_12.raise_()
self.p1_btn_14.raise_()
self.p1_btn_10.raise_()
self.p1_btn_8.raise_()
self.p1_btn_7.raise_()
self.message_lbl.raise_()
self.pushButton.raise_()
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "劉佳皓的水果機(jī)"))
self.message_lbl.setText(_translate("Dialog", "敢不敢試一試你的手氣?。?!"))
self.pushButton.setText(_translate("Dialog", "5元一次"))
# 以上代碼除一些驅(qū)動外,基本都是UI里面的代碼。
?用代碼對UI進(jìn)行修飾
self.myInitWindow()
"""這些代碼是用來對UI的一些修改,根據(jù)自己的需要,
對其中一些代碼的修改,可以得到自己想要的效果。"""
# 設(shè)置窗體透明
# Dialog.setWindowOpacity(0.9)
# 設(shè)置窗體的背景色
# Dialog.setStyleSheet("#Dialog{background-color:blue}")
# 設(shè)置列表控件的背景色
# self.Dialog.setStyleSheet("#Dialog{background-color:LavenderBlush}")
# 設(shè)置窗體邊框固定大小
Dialog.setFixedSize(Dialog.width(), Dialog.height())
# 設(shè)置窗體背景圖片
palette = QPalette()
pix = QPixmap("水果圖片/桌子.jpg")
# # 自調(diào)背景圖大小和窗體適應(yīng)
pix = pix.scaled(Dialog.width(), Dialog.height())
palette.setBrush(QPalette.Background, QBrush(pix))
Dialog.setPalette(palette)
self.message_lbl.setStyleSheet("color: rgb(196, 222, 255);")
self.pushButton.setStyleSheet("color: rgb(111, 321, 123);")
?窗體屬性
def myInitWindow(self):
"""
"""
self.btns = [self.p1_btn, self.p1_btn_2, self.p1_btn_3, self.p1_btn_4,
self.p1_btn_5, self.p1_btn_6, self.p1_btn_9, self.p1_btn_16, self.p1_btn_15,
self.p1_btn_13, self.p1_btn_11, self.p1_btn_12, self.p1_btn_14, self.p1_btn_10,
self.p1_btn_8, self.p1_btn_7]
self.btns_message = ["一天一蘋果,醫(yī)生遠(yuǎn)離我。", "橙子減少膽結(jié)石的發(fā)病率。", "藍(lán)莓有助于防止衰老和癌癥。",
"荔枝促進(jìn)新陳代謝。", "芒果抗菌消炎。",
"獼猴桃使皮膚變得光滑。", "草莓助于消化,能健睥和胃。", "葡萄地阻止腎結(jié)石的形成。",
"櫻桃明顯抑制肝癌細(xì)胞增殖。", "青檸減少脂肪的沉積。。",
"楊梅清熱解暑,解酒,利尿消腫.", "香蕉預(yù)防或治療高血壓。", "西瓜止暑解渴,健胃消食。",
"無花果提高睡眠質(zhì)量。", "桃子利尿解暑、清熱明目。", "樹莓有助于保護(hù)心臟"]
self.pushButton.clicked.connect(self.gameStart)
self.index = random.randint(0, 16)
self.direction = True
# 認(rèn)定Ture是遞減
啟動游戲?
# 啟動游戲
def gameStart(self):
# 隨機(jī)生成毫秒數(shù)
self.speed = random.randint(150, 250)
# 實(shí)例化計(jì)時器對象
self.timer = QTimer()
# 設(shè)置計(jì)時器對象執(zhí)行間隔時間
self.timer, setInterval(self)
# 計(jì)時器對象間隔時間到期調(diào)用函數(shù)startTimer
self.timer.timeout.connect(self.startTimer)
# 啟動計(jì)時器
self.timer.start()
?Qtime的timeout事件
# 計(jì)時器間隔時間到達(dá)執(zhí)行函數(shù)
def startTimer(self):
# 判斷當(dāng)前按鈕列表索引是否為0
if self.index == 0:
# 如果為0,索引15的按鈕圖片重新設(shè)置為原始大小
self.btns[15].setIconSize(QSize(100, 100))
# 否則
else:
# 索引減一的按鈕圖片重新設(shè)置為原始大小
self.btns[self.index - 1].setIconSize(QSize(100, 100))
# 設(shè)置按鈕列表當(dāng)前索引所在按鈕圖片大小變大
self.btns[self.index].setIconSize(QSize(130, 130))
# 索引加一
self.index += 1
# 判斷索引是否超出按鈕列表最大索引
if self.index >= len(self.btns):
# 如果索引超出范圍,索引重新從0開始
self.index = 0
# 判斷計(jì)時器間隔時間值是減少還是增加
if self.direction:
# 如果是Ture,間隔每次減少5毫秒
self.speed -= 15
else:
# 如果是False,間隔每次怎加5毫秒
self.speed += 15
# 判斷計(jì)時器間隔時間是否小于1毫秒
if self.speed <= 1:
# 重新設(shè)置間隔時間
self.speed = 1
self.direction = False
# 重新設(shè)置下一次計(jì)時器間隔時間
self.timer.setInterval(self.speed)
# 判斷計(jì)時器間隔時間是否大于等于300毫秒
if self.speed >= 300:
# 重新設(shè)置變量direction的值為Ture,代表方向減少
self.direction = True
# 停止
self.timer.stop()
self.message_lbl.setText(self.btns_message[self.index - 1])
?窗體加載
# 程序入口
if __name__ == '__main__': # python模擬程序入口
# 創(chuàng)建主窗體
app = QApplication(sys.argv)
# 設(shè)計(jì)的UI界面實(shí)體化
ui = Ui_Dialog()
# 創(chuàng)建主窗體對象,一個應(yīng)用程序可以有多個窗體,但是一個窗體不能代表一個應(yīng)用程序。
MainWindow = QMainWindow()
# 把所有用到的控件化在主窗體上。
ui.setupUi(MainWindow)
# 設(shè)置窗體大小不能更改
MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
# 主窗體自己的寬 #主窗體自己的高
# 顯示主窗體
MainWindow.show()
sys.exit(app.exec_())
這上面有很多代碼時從UI上轉(zhuǎn)化來的,然后再用一些代碼修飾,從而讓水果機(jī)“活”起來。
總結(jié)?
本項(xiàng)目只是簡單的實(shí)現(xiàn)了抽獎的功能,在很多地方還有不足,比如UI的設(shè)計(jì)還可以在漂亮一些,但本人的審美不足,就只能做到這了。
我是一個Python新手,如果代碼哪里有不對,或者可以簡化的地方,還請各位大佬指正或建議出來,謝謝大家看到最后。文章來源:http://www.zghlxwxcb.cn/news/detail-402722.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-402722.html
到了這里,關(guān)于【python】用PyQt5教你制作簡單的水果抽獎機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!