匏瓜

 

20192108《Python程序设计》实验四报告

20192108《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 1921
学号:20192108
实验教师:王志强
实验日期:2020年6月10日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分

2. 实验过程及结果

实验过程

首先明确实验目标:我想编一个可视化python小游戏
受了知乎的启发,决定编一个剪刀石头布小游戏
先配置了PyQt5和QtDesigner,但由于技术问题并未采用QtDesigner


编程过程中,先给游戏界面排版

调整游戏界面

插入图片,编写游戏机制。这个过程比较艰苦,其间也借鉴了一些大佬的博客,自己最后也总算是成功调通了

实验结果

完整代码如下

"""
作者:纪元
文件名称:实验四:可视化游戏
时间:2020年6月10日
"""
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import random
class 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.png', 'redscissors.png', 'redstone.png']
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.png', 'bluescissors.png', 'bluestone.png']
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(90, 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(90, 50)
    self.imagelayout.addWidget(self.blueText, 0, 2, Qt.AlignCenter)

    self.startPushButton = QPushButton("开始游戏")
    self.startPushButton.setFixedSize(90, 60)
    self.startPushButton.clicked.connect(self.gamestart)
    self.imagelayout.addWidget(self.startPushButton, 2, 1, Qt.AlignCenter)

    self.restartPushButton = QPushButton("重新开始")
    self.restartPushButton.setFixedSize(90, 60)
    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, 60)
    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, 60)
    self.scorelayout.addWidget(self.scoreBlueText, 0, 2)

    self.tieText = QTextBrowser()
    self.tieText.setText('平局次数:{}次'.format(self.tietimes))
    self.tieText.setFixedSize(100, 60)
    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.setFixedSize(900, 400)
gameshow.show()
sys.exit(app.exec_())

码云链接如下

https://gitee.com/an_era/python-learner/commit/a25efb590777318e05cd8e153d71d02517885c8f

运行结果如下

3. 实验过程中遇到的问题和解决过程

  • 问题1:可视化界面不会写
  • 问题1解决方案:百度,云班课
  • 问题2:随机函数不会弄
  • 问题2解决方案:百度
  • 问题2:不会插入图片
  • 问题2解决方案:百度

其他(感悟、思考等)

这学期的python学习,说实话很累,一学期要经历两门语言的洗礼
我也是在挫折中前进,不断学习,那些杀不死我们的,终将使我们变得更强
比如C语言中文件的内容我就是借鉴了python才理解的
由于这学期上的是网课,不理解的地方可以反反复复地观看,直到弄懂为止
而且网上相关的资源也很多,有很多大佬的博文、代码,这对我啃一门语言来说是很有帮助的
学习中遇到的问题一般百度都能解决,这也是一个学习的过程
不管怎么说,这些都是我的收获
最后提一点小小的建议:
老师有时候太依赖云班课了,那上面的教学资源的确很全面,但老师的讲解有时也是必不可少的
但以后线下上课也可以利用云班课、
最后吐槽一下:签到手势太复杂

参考资料

手把手教你用Python做个可视化的“剪刀石头布”小游戏https://zhuanlan.zhihu.com/p/110717323
Python - 编写可视化界面(Python+PyCharm+PyQt)https://blog.csdn.net/bailang_zhizun/article/details/79310419
python中的随机函数https://www.cnblogs.com/LoongitArt/p/9885595.html
Python写的剪刀石头布的游戏,供代码练习https://gitee.com/xunbaiqiannian/scissors/blob/master/%E5%89%AA%E5%88%80%E7%9F%B3%E5%A4%B4%E5%B8%83.py
Pyhton,Tkinter,剪刀石头布小游戏,可视化https://blog.csdn.net/heimu24/article/details/78593668

posted on 2020-06-10 23:03  匏瓜  阅读(408)  评论(0编辑  收藏  举报

导航