天天看點

手把手教你用Python做個可視化的“剪刀石頭布”小遊戲

/1 前言/

最近在學習PyQt5可視化界面,這是一個内容非常豐富的gui庫,相對于tkinter庫,功能更加強大,界面更加美觀,操作也不難。于是我開始小試牛刀,用PyQt5做個可視化的“剪刀石頭布”小遊戲,總體效果如下:

該程式可以實作遊戲輪次統計,雙方得分、平局次數統計和重新開始功能,不管是1局決勝負,還是三局兩勝、七局三勝,都能完美解決。

/2 具體實作/

下面給大家詳細介紹一下具體步驟。

第一步:建立遊戲主視窗

PyQt5建立主視窗有其固定的套路,首先要建立應用程式對象:app=QApplication(sys.argv),參數sys.argv是指令行參數,這使得可以在電腦系統終端執行程式時,傳入指令參數,來執行不同的邏輯代碼。執行應用程式對象,進入消息循環等待退出: sys.exit(app.exec_()),代碼如下圖所示:

其中,GameWindow()是本次遊戲的類,視窗大小為900X400

再為該視窗添加标題和圖示如下圖所示:

效果如下圖所示:

第二步:以網格布局方式放控件

PyQt5有5種布局方式,分别是絕對布局、水準布局、垂直布局、網格布局和表單布局,本次隻采用網格布局,其餘布局方式各有特點,感興趣的朋友可以研究一下。

1.我想把整個出視窗分成3x3=9個網格,然後以網格布局的方式往裡填内容,首先将“紅方選手”、“第X輪”、“藍方選手”分别放入第一行的3個網格中。

網格布局需要用到addWidget函數,它的上圖中的4個參數分别代表放置的空間、放置行數、放置的列數,上述3個控件分别放在第1行的1-3列。效果如下圖所示:

2.留出“剪刀石頭布”圖檔展示位置,分别放置在第二行的1和3網格。

第二行中間網格放置紅藍雙方得分情況。

這裡需要注意一下,我在第二行第二個網格裡又嵌入一個新的網格對象,将其分成1個1行3列的網格,其中第1個網格放紅方得分,第二個網格放“VS”,第三個放藍方得分。

3.綁定“開始遊戲”、“重新開始”信号槽

用QpushButton建立“開始遊戲”按鈕,綁定gamestart函數(後續還會講),并将該按鈕放入第三行的第二個網格中。

用QpushButton建立“重新開始”按鈕,綁定restart函數(後續還會講),并将該按鈕放入第三行的第三個網格中。效果如下圖所示:

現在基本架構已經搭建好了。

第三步:信号槽綁定信号

主要是針對開始遊戲和重新開始遊戲按鈕綁定信号,下面給大家介紹一下上述的gamestart和restart函數。

  1. gamestart函數

1)遊戲開始後,我需要随機從“剪刀”、“石頭”、“布”三張圖檔中選出1張放置到相應位置,代碼如下圖所示:

這裡用了red和blue兩個類,每次點選開始遊戲按鈕,都會調用該類,用random函數随機選出圖檔,并在相應位置展示。

2)判斷輸赢,實時更新資料

Gamestart下調用judge函數,判斷得分,記錄紅方得分、藍方得分、平局次數3個值,并用setText函數立即更新紅方得分框、藍方得分框及平局次數框的内容。

最後,為了避免遊戲中不小心點選關閉視窗按鈕,添加1個關閉事件,如下圖所示。

當點選右上角叉号時,會進行提示,效果如下圖所示:

到這裡,這個小遊戲就制作完畢了,界面比較簡單,感興趣的朋友可以繼續開發更進階的功能。

/3 結語/

本文基于PyQt5可視化界面,用PyQt5做個可視化的“剪刀石頭布”小遊戲,可以實作遊戲輪次統計,雙方得分、平局次數統計和重新開始功能,不管是1局決勝負,還是三局兩勝、七局三勝,都能完美解決。

歡迎大家嘗試,消耗在家的無聊時間。本文涉及的代碼都上傳到了github位址上,背景回複“剪刀石頭布”五個字即可擷取代碼。