程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【python】用PyQt5教你制作簡單的水果抽獎機

編輯:Python

目錄

水果機模擬器的介紹

制作水果機的步驟

水果機的UI設計 

水果機的代碼

UI內置代碼 

 用代碼對UI進行修飾

 窗體屬性

啟動游戲 

 Qtime的timeout事件

 窗體加載

總結 


水果機模擬器的介紹

網絡上對的介紹:水果機最為常見的是在街機廳中見到的,以新穎的水果作為游戲主題,融合了博彩類游戲元素。水果機界面由24個方格拼接成一個正方形,每個方格中都有一個目標(多個不同的圖形,通常為水果),且每個方格下都有一個小燈。玩家投入游戲幣後,選擇希望押注的目標,當玩家按下開始鍵後,小燈開始繞著正方形中每個格子轉,當小燈停下來時,如果停在玩家押注的目標時,則玩家可贏取相應的游戲幣。

我做的水果機也是按照這個原理,具有隨機抽獎的功能,會在抽獎剛開始時加速,到達一定值後減速,抽到某一水果後會用文字提示,下一次抽獎時會接著從上一次停止位置開始。

制作水果機的步驟

安裝PyQT5做准備工作,安裝PyQt5等插件。窗體設計搜集圖片,在Qt裡面進行設計。窗體加載1.創建主窗體2.窗體大小不能隨便更改3.顯示主窗體窗體屬性1.創建列表,保存圖片的按鈕2.再創建一個列表,保存圖片的顯示信息3.設置“開始”按鈕的鼠標單擊cliked的槽函數。4.生成一個范圍0-圖片數-1的隨機整數並保存到變量。5.定義一個布爾變量,初始值為Ture,代表開始游戲計時器執行時間間隔遞減。啟動游戲1.隨機生成150-250之間的數字,代表毫秒數2.實例化計時器對象3.設置計時器對象執行間隔時間4.計時器對象間隔時間到期調用函數startTimer5.啟動計時器Qtime的timeout事件1.判斷當前按鈕列表索引是否為02.設置按鈕列表當前索引所在按鈕圖片大小變大3.索引加一4.判斷索引是否超出按鈕列表最大索引5.判斷計時器間隔時間值是減少還是增加6.判斷計時器間隔時間是否小於1毫秒7.判斷計時器間隔時間是否大於等於350毫秒8.重新設置下一次計時器間隔時間

水果機的UI設計

從設計上告別博彩的色彩,讓水果機成為適合所有人的一個選擇工具。

水果機的代碼

UI內置代碼 

# -*- 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裡面的代碼。

 用代碼對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()

 Qtime的timeout事件

# 計時器間隔時間到達執行函數
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新手,如果代碼哪裡有不對,或者可以簡化的地方,還請各位大佬指正或建議出來,謝謝大家看到最後。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved