水果機模擬器的介紹
制作水果機的步驟
水果機的UI設計
水果機的代碼
UI內置代碼
用代碼對UI進行修飾
窗體屬性
啟動游戲
Qtime的timeout事件
窗體加載
總結
網絡上對的介紹:水果機最為常見的是在街機廳中見到的,以新穎的水果作為游戲主題,融合了博彩類游戲元素。水果機界面由24個方格拼接成一個正方形,每個方格中都有一個目標(多個不同的圖形,通常為水果),且每個方格下都有一個小燈。玩家投入游戲幣後,選擇希望押注的目標,當玩家按下開始鍵後,小燈開始繞著正方形中每個格子轉,當小燈停下來時,如果停在玩家押注的目標時,則玩家可贏取相應的游戲幣。
我做的水果機也是按照這個原理,具有隨機抽獎的功能,會在抽獎剛開始時加速,到達一定值後減速,抽到某一水果後會用文字提示,下一次抽獎時會接著從上一次停止位置開始。
從設計上告別博彩的色彩,讓水果機成為適合所有人的一個選擇工具。
# -*- coding: utf-8 -*-
#
# Form implementation generated from reading ui file '水果機.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
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 __init__(self):
self.p1_btn = None
self.p1_btn_2 = None
self.p1_btn_3 = None
self.p1_btn_4 = None
self.p1_btn_5 = None
self.p1_btn_6 = None
self.p1_btn_9 = None
self.p1_btn_16 = None
self.p1_btn_15 = None
self.p1_btn_13 = None
self.p1_btn_11 = None
self.p1_btn_12 = None
self.p1_btn_14 = None
self.p1_btn_10 = None
self.p1_btn_8 = None
self.p1_btn_7 = None
self.index = None
self.timer = None
self.speed = None
self.direction = None
self.btns = None
self.pushButton = None
self.message_lbl = None
self.btns_message = None
def setupUi(self, Dialog):
"""
:param Dialog:
"""
Dialog.setObjectName("Dialog")
Dialog.resize(751, 536)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("水果圖片/西瓜果(watermelon fruit)-ico_愛給網_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("水果圖片/藍莓.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", "劉佳皓的水果機"))
self.message_lbl.setText(_translate("Dialog", "敢不敢試一試你的手氣!!!"))
self.pushButton.setText(_translate("Dialog", "5元一次"))
# 以上代碼除一些驅動外,基本都是UI裡面的代碼。
self.myInitWindow()
"""這些代碼是用來對UI的一些修改,根據自己的需要,
對其中一些代碼的修改,可以得到自己想要的效果。"""
# 設置窗體透明
# Dialog.setWindowOpacity(0.9)
# 設置窗體的背景色
# Dialog.setStyleSheet("#Dialog{background-color:blue}")
# 設置列表控件的背景色
# self.Dialog.setStyleSheet("#Dialog{background-color:LavenderBlush}")
# 設置窗體邊框固定大小
Dialog.setFixedSize(Dialog.width(), Dialog.height())
# 設置窗體背景圖片
palette = QPalette()
pix = QPixmap("水果圖片/桌子.jpg")
# # 自調背景圖大小和窗體適應
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 = ["一天一蘋果,醫生遠離我。", "橙子減少膽結石的發病率。", "藍莓有助於防止衰老和癌症。",
"荔枝促進新陳代謝。", "芒果抗菌消炎。",
"猕猴桃使皮膚變得光滑。", "草莓助於消化,能健睥和胃。", "葡萄地阻止腎結石的形成。",
"櫻桃明顯抑制肝癌細胞增殖。", "青檸減少脂肪的沉積。。",
"楊梅清熱解暑,解酒,利尿消腫.", "香蕉預防或治療高血壓。", "西瓜止暑解渴,健胃消食。",
"無花果提高睡眠質量。", "桃子利尿解暑、清熱明目。", "樹莓有助於保護心髒"]
self.pushButton.clicked.connect(self.gameStart)
self.index = random.randint(0, 16)
self.direction = True
# 認定Ture是遞減
# 啟動游戲
def gameStart(self):
# 隨機生成毫秒數
self.speed = random.randint(150, 250)
# 實例化計時器對象
self.timer = QTimer()
# 設置計時器對象執行間隔時間
self.timer, setInterval(self)
# 計時器對象間隔時間到期調用函數startTimer
self.timer.timeout.connect(self.startTimer)
# 啟動計時器
self.timer.start()
# 計時器間隔時間到達執行函數
def startTimer(self):
# 判斷當前按鈕列表索引是否為0
if self.index == 0:
# 如果為0,索引15的按鈕圖片重新設置為原始大小
self.btns[15].setIconSize(QSize(100, 100))
# 否則
else:
# 索引減一的按鈕圖片重新設置為原始大小
self.btns[self.index - 1].setIconSize(QSize(100, 100))
# 設置按鈕列表當前索引所在按鈕圖片大小變大
self.btns[self.index].setIconSize(QSize(130, 130))
# 索引加一
self.index += 1
# 判斷索引是否超出按鈕列表最大索引
if self.index >= len(self.btns):
# 如果索引超出范圍,索引重新從0開始
self.index = 0
# 判斷計時器間隔時間值是減少還是增加
if self.direction:
# 如果是Ture,間隔每次減少5毫秒
self.speed -= 15
else:
# 如果是False,間隔每次怎加5毫秒
self.speed += 15
# 判斷計時器間隔時間是否小於1毫秒
if self.speed <= 1:
# 重新設置間隔時間
self.speed = 1
self.direction = False
# 重新設置下一次計時器間隔時間
self.timer.setInterval(self.speed)
# 判斷計時器間隔時間是否大於等於300毫秒
if self.speed >= 300:
# 重新設置變量direction的值為Ture,代表方向減少
self.direction = True
# 停止
self.timer.stop()
self.message_lbl.setText(self.btns_message[self.index - 1])
# 程序入口
if __name__ == '__main__': # python模擬程序入口
# 創建主窗體
app = QApplication(sys.argv)
# 設計的UI界面實體化
ui = Ui_Dialog()
# 創建主窗體對象,一個應用程序可以有多個窗體,但是一個窗體不能代表一個應用程序。
MainWindow = QMainWindow()
# 把所有用到的控件化在主窗體上。
ui.setupUi(MainWindow)
# 設置窗體大小不能更改
MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
# 主窗體自己的寬 #主窗體自己的高
# 顯示主窗體
MainWindow.show()
sys.exit(app.exec_())
這上面有很多代碼時從UI上轉化來的,然後再用一些代碼修飾,從而讓水果機“活”起來。
本項目只是簡單的實現了抽獎的功能,在很多地方還有不足,比如UI的設計還可以在漂亮一些,但本人的審美不足,就只能做到這了。
我是一個Python新手,如果代碼哪裡有不對,或者可以簡化的地方,還請各位大佬指正或建議出來,謝謝大家看到最後。
Python From entry to mastery —
Now , Python It has become a m