实现石头剪刀布获胜法_手把手教你用Python开发“剪刀石头布”小游戏【附源码】...

4f8fe7c153bc67e41fef19f3d88a7267.gif

/1 前言/

  最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难。于是我开始小试牛刀,用PyQt5做个可视化的“剪刀石头布”小游戏,总体效果如下:

822eb3315bcd0d1140ce051d8ed28a2b.png

该程序可以实现游戏轮次统计,双方得分、平局次数统计和重新开始功能,不管是1局决胜负,还是三局两胜、七局三胜,都能完美解决。

dae80f8bb989ad6e24bafdac8eb880a3.png

6eed26a0e2f0c9eb05edf9ba3576ac3d.png

5df05d9ba012ef1eab2e5806e50919aa.png

d7f66d666c2184add4c49bc2fa59c252.png

75510c95a54c952e34673fbbe918dc5d.png

ae10417a643cab2a0371484a1f5a2923.png

cbd60acf1298c727f94ce030128cc9b3.png

  第二行中间网格放置红蓝双方得分情况。

9968f2982b19efd5a4cddc55a95e1a65.png

36c9ddf8f589b16affab791a47d40fff.png

6fbc2e694058626c2f36d1e28f23be6d.png

现在基本框架已经搭建好了。

850701e592b04347a9e11c4cc0c900ef.png

1d944c91e8db8d7780891a062ff05919.png

733022f863f321c0205bc2c15d655ceb.png

b7c72b2745ce4ebff7cca766e527ae46.png

313539770994b058e8b9235aa10d8062.png

25f163363dadf6a3b0ea6bee8de9aa97.png

  当点击右上角叉号时,会进行提示,效果如下图所示:

d00394682ffc638acb30383aa74c1f78.png

  到这里,这个小游戏就制作完毕了,界面比较简单,感兴趣的朋友可以继续开发更高级的功能。

35c1f80e2ff94eef9c6739461c773ab7.png

对于初学者想更轻松的学好Python web开发,Python爬虫技术,Python数据分析,人工智能等技术,这里也给大家准备了零基础系统的学习教程,加老师建的Python技术学习教程qq裙:245345507免费获取。

或是加老师微信号:XTUOL1988【备注学习Python】

学习过程中有疑问,有从事多年的实战派老师免费答疑解惑!带你真正学好Python找到一份自己满意的工作!

最后是源代码,有点长哦

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *import randomclass red(QPushButton):    def __init__(self, parent=None):        super().__init__(parent)        self.setFixedSize(160, 120)#self.resize(40, 30)        global rednum        rednum = int(random.random() * 3)  # 随机        print(rednum)        choices = ['redcloth.jpg', 'redscissors.jpg', 'redstone.jpg']        file=str(choices[int(rednum)])        self.setStyleSheet("QPushButton{border-image: url(%s)}"%(file))class blue(QPushButton):    def __init__(self, parent=None):        super().__init__(parent)        self.setFixedSize(160, 120)#self.resize(40, 30)        global bluenum        bluenum = int(random.random() * 3)  # 随机        choices = ['bluecloth.jpg', 'bluescissors.jpg', 'bluestone.jpg']        file=str(choices[int(bluenum)])        self.setStyleSheet("QPushButton{border-image: url(%s)}"%(file))class GameWindow(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.virusnum=0        self.setWindowTitle("剪刀石头布小游戏")        self.setWindowIcon(QIcon('图标.jpg'))        self.gametimes=0        self.redscores=0        self.bluescores = 0        self.tietimes=0        self.imagelayout = QGridLayout()        self.setLayout(self.imagelayout)  # 局部布局        self.redText= QTextBrowser()        self.redText.setText('红方选手')        self.redText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.redText, 0, 0, Qt.AlignCenter)        self.actionText = QTextBrowser()        self.actionText.setText('第0轮')        self.actionText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.actionText, 0, 1, Qt.AlignCenter)        self.blueText = QTextBrowser()        self.blueText.setText('蓝方选手')        self.blueText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.blueText, 0, 2, Qt.AlignCenter)        self.startPushButton = QPushButton("开始游戏")        self.startPushButton.setFixedSize(60, 40)        self.startPushButton.clicked.connect(self.gamestart)        self.imagelayout.addWidget(self.startPushButton, 2, 1, Qt.AlignCenter)        self.restartPushButton = QPushButton("重新开始")        self.restartPushButton.setFixedSize(60, 40)        self.restartPushButton.clicked.connect(self.restart)        self.imagelayout.addWidget(self.restartPushButton, 2, 2, Qt.AlignCenter)        #红方图片布局        self.redlayout = QGridLayout()  # 网格布局        self.redWidget = QWidget()        self.redWidget.setFixedSize(300, 200)        self.imagelayout.addWidget(self.redWidget, 1, 0)        self.redWidget.setLayout(self.redlayout)        #分数布局        self.scorelayout = QGridLayout()  # 网格布局        self.scoreWidget = QWidget()        self.scoreWidget.setFixedSize(300, 200)        self.imagelayout.addWidget(self.scoreWidget, 1, 1)        self.scoreWidget.setLayout(self.scorelayout)        self.scoreRedText = QTextBrowser()        self.scoreRedText.setText('红方得分:{}分'.format(self.redscores))        self.scoreRedText.setFixedSize(100, 30)        self.scorelayout.addWidget(self.scoreRedText, 0, 0)        self.scoreVsText = QTextBrowser()        self.scoreVsText.setText('VS')        self.scoreVsText.setFixedSize(30, 30)        self.scorelayout.addWidget(self.scoreVsText, 0, 1)        self.scoreBlueText = QTextBrowser()        self.scoreBlueText.setText('蓝方得分:{}分'.format(self.bluescores))        self.scoreBlueText.setFixedSize(100, 30)        self.scorelayout.addWidget(self.scoreBlueText, 0, 2)        self.tieText = QTextBrowser()        self.tieText.setText('平局次数:{}次'.format(self.tietimes))        self.tieText.setFixedSize(100, 50)        self.scorelayout.addWidget(self.tieText, 1, 0, 1, 3, Qt.AlignCenter)        #蓝方图片布局        self.bluelayout = QGridLayout()  # 网格布局        self.blueWidget = QWidget()        self.blueWidget.setFixedSize(300, 200)        self.imagelayout.addWidget(self.blueWidget, 1, 2)        self.blueWidget.setLayout(self.bluelayout)    def gamestart(self):        self.gametimes+= 1        self.actionText.setText('第{0}轮'.format(self.gametimes))        self.redlayout.addWidget(red(), 0, 0)        self.bluelayout.addWidget(blue(), 0, 0)        self.judge()    def judge(self):        if rednum==0:            if bluenum==0:                self.tietimes+=1                self.tieText.setText('平局次数:{}次'.format(self.tietimes))            elif bluenum==1:                self.bluescores+=1                self.scoreBlueText.setText('蓝方得分:{}分'.format(self.bluescores))            elif bluenum==2:                self.redscores += 1                self.scoreRedText.setText('红方得分:{}分'.format(self.redscores))        elif rednum==1:            if bluenum == 0:                self.redscores += 1                self.scoreRedText.setText('红方得分:{}分'.format(self.redscores))            elif bluenum == 1:                self.tietimes+=1                self.tieText.setText('平局次数:{}次'.format(self.tietimes))            elif bluenum == 2:                self.bluescores += 1                self.scoreBlueText.setText('蓝方得分:{}分'.format(self.bluescores))        elif rednum==2:            if bluenum == 0:                self.bluescores += 1                self.scoreBlueText.setText('蓝方得分:{}分'.format(self.bluescores))            elif bluenum == 1:                self.redscores += 1                self.scoreRedText.setText('红方得分:{}分'.format(self.redscores))            elif bluenum == 2:                self.tietimes+=1                self.tieText.setText('平局次数:{}次'.format(self.tietimes))    def restart(self):        self.gametimes=0        self.redscores=0        self.bluescores=0        self.tietimes=0        self.actionText.setText('第{0}轮'.format(self.gametimes))        self.scoreRedText.setText('红方得分:{}分'.format(self.redscores))        self.scoreBlueText.setText('蓝方得分:{}分'.format(self.bluescores))        self.tieText.setText('平局次数:{}次'.format(self.tietimes))    def closeEvent(self, event):        reply = QMessageBox.question(self, 'Message',                                     "Are you sure to quit?", QMessageBox.Yes |                                     QMessageBox.No, QMessageBox.No)        if reply == QMessageBox.Yes:            event.accept()        else:            event.ignore()class Game(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.setWindowTitle("剪刀石头布小游戏")        self.setWindowIcon(QIcon('图标.jpg'))        self.virusnum = 0        self.gametimes = 0        self.redscores = 0        self.bluescores = 0        self.tietimes = 0        self.imagelayout = QGridLayout()        self.setLayout(self.imagelayout)  # 局部布局        self.redText = QTextBrowser()        self.redText.setText('红方选手')        self.redText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.redText, 0, 0, Qt.AlignCenter)        self.actionText = QTextBrowser()        self.actionText.setText('第0轮')        self.actionText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.actionText, 0, 1, Qt.AlignCenter)        self.blueText = QTextBrowser()        self.blueText.setText('蓝方选手')        self.blueText.setFixedSize(70, 50)        self.imagelayout.addWidget(self.blueText, 0, 2, Qt.AlignCenter)app = QApplication(sys.argv)gameshow = GameWindow()#gameshow=Game()gameshow.setFixedSize(900, 400)gameshow.show()sys.exit(app.exec_())

PS:如果觉得本篇文章对您有所帮助,欢迎关注、订阅!帮忙点个 再看 转发一下 分享出去

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的石头剪刀布游戏Python代码。以下是代码: ```python import random winning_probability = 0.5 # 默认获胜概率为50% def set_winning_probability(prob): global winning_probability winning_probability = prob def play(player_choice): choices = ['石头', '剪刀', '布'] computer_choice = random.choice(choices) if player_choice == computer_choice: return '平局' if player_choice == '石头': if computer_choice == '剪刀': return '你赢了' else: return '你输了' if player_choice == '剪刀': if computer_choice == '布': return '你赢了' else: return '你输了' if player_choice == '布': if computer_choice == '石头': return '你赢了' else: return '你输了' def get_computer_choice(): choices = ['石头', '剪刀', '布'] return random.choice(choices) def get_player_choice(): choice = input('请输入你的选择(石头/剪刀/布):') while choice not in ['石头', '剪刀', '布']: choice = input('请重新输入你的选择(石头/剪刀/布):') return choice def get_result(player_choice, computer_choice): if player_choice == computer_choice: return '平局' if player_choice == '石头': if computer_choice == '剪刀': return '你赢了' else: return '你输了' if player_choice == '剪刀': if computer_choice == '布': return '你赢了' else: return '你输了' if player_choice == '布': if computer_choice == '石头': return '你赢了' else: return '你输了' def play_with_probability(player_choice): global winning_probability choices = ['石头', '剪刀', '布'] computer_choice = random.choice(choices) if random.random() < winning_probability: # 让电脑故意输 if player_choice == '石头': computer_choice = '剪刀' elif player_choice == '剪刀': computer_choice = '布' else: computer_choice = '石头' return get_result(player_choice, computer_choice) ``` 这个代码有两个函数可以用来玩石头剪刀布游戏。`play()`函数是一个普通的石头剪刀布游戏函数,它接受一个玩家的选择作为输入,并返回游戏结果。`play_with_probability()`函数是一个带有获胜概率的石头剪刀布游戏函数,它接受一个玩家的选择作为输入,并根据设定的获胜概率来决定电脑的选择。如果随机数小于获胜概率,电脑会故意输。 您可以使用`set_winning_probability(prob)`函数来设置获胜概率。例如,如果您想将获胜概率设置为70%,可以调用`set_winning_probability(0.7)`。 请注意,这只是一个简单的示例,您可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值