2021秋软工实践第二次结对编程作业

AnEweLamb 2021-10-09 14:05:24
这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 https://bbs.csdn.net/forums/fzuSoftwareEngineering2021
这个作业要求在哪里 2021秋软工实践第二次结对编程作业 https://bbs.csdn.net/topics/601189945
个人学号031902434
结对成员学号031902432
结对小伙伴的作业博客链接 https://blog.csdn.net/qq_50709731/article/details/120657796
GitHub 仓库地址 https://github.com/huuu-code/dice.git
视频演示链接 https://www.bilibili.com/video/bv13f4y1c7eB

PSP

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1015
· Estimate· 估计这个任务需要多少时间1015
Development开发960930
· Analysis· 需求分析 (包括学习新技术)300400
· Design Spec· 生成设计文档
· Design Review· 设计复审 (和同事审核设计文档)
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)3020
· Design· 具体设计180120
· Coding· 具体编码300210
· Code Review· 代码复审3020
· Test· 测试(自我测试,修改代码,提交修改)120160
Reporting报告7050
· Test Report· 测试报告
· Size Measurement· 计算工作量6040
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划1010
合计1040995

一、博饼软件实现:


演示

GitHub 仓库和 commit 记录:

关键代码:

  1. 通过判断鼠标点击事件进行页面切换(仅展示部分页面跳转)

    while True:
     for event in pygame.event.get ( ):
         # 主页跳转游戏页面
         if event.type == pygame.MOUSEBUTTONDOWN:
             if button1.is_down ( event.pos, window ):
                 pass
         if event.type == pygame.MOUSEBUTTONUP:
             if button1.is_up ( event.pos, window ):
                 bg_game ( ) #背景设置
                 button5.draw1 ( window ) #添加摇骰子按钮
                 #show_number()
                 pygame.display.update ( )
    
         # 游戏页面跳转结束页面
         if event.type == pygame.MOUSEBUTTONDOWN:
             if button5.is_down ( event.pos, window ):
                 pass
         if event.type == pygame.MOUSEBUTTONUP:
             if button5.is_up ( event.pos, window ):
                 bg_game ( )
                 button5.draw1 ( window ) #添加摇骰子按钮
                 button6.draw1 ( window) #添加结束游戏按钮
                 show_result() #显示结果
                 pygame.display.update ( )
    
  2. 按钮的创建与点击事件

    # 定义一个Button类
    class Button:
     # 初始化按钮。传入按钮文字,坐标,大小,背景颜色,文字颜色,默认文字大小32
     def __init__ ( self, title, pos, size, bg_color, text_color, font_size=32 ):
         self.title = title
         self.pos = pos
         self.size = size
         self.bg_color = bg_color
         self.text_color = text_color
         self.font_size = font_size
         self.old_color = bg_color
     # 画按钮
     def draw1 ( self, window ):
         self.rect = pygame.Rect ( self.pos [ 0 ], self.pos [ 1 ], self.size [ 0 ], self.size [ 1 ] )
         pygame.draw.rect ( window, self.bg_color, self.rect )  #绘制矩形
         self.font = pygame.font.Font ( '素材/字体1.ttf', self.font_size )
         text = self.font.render ( self.title, True, self.text_color )
         t_w, t_h = text.get_size ( )
         window.blit ( text,(self.pos [ 0 ] + self.size [ 0 ] / 2 - t_w / 2, self.pos [ 1 ] + self.size [ 1 ] / 2 - t_h / 2) )
     # 当鼠标按下
     def is_down ( self, pos, window ):
         m_x, m_y = pos
         btn_x, btn_y = self.pos
         btn_w, btn_h = self.size
         if btn_x <= m_x <= btn_x + btn_w and btn_y <= m_y <= btn_y + btn_h:
             self.bg_color = (200, 200, 200)
             self.draw1 ( window )
             pygame.display.update ( )
             return True
         else:
             return False
    
     # 当鼠标弹起
     def is_up ( self, pos, window ):
         m_x, m_y = pos
         btn_x, btn_y = self.pos
         btn_w, btn_h = self.size
         if btn_x <= m_x <= btn_x + btn_w and btn_y <= m_y <= btn_y + btn_h:
             self.bg_color = self.old_color #更改画按钮时的矩形颜色以达成动画效果
             self.draw1 ( window )
             pygame.display.update ( )
             return True
         else:
             return False
    
  3. 随机六个骰子的点数并判断结果

    # 创建虚拟骰子的类
    class Die():
     def __init__(self, die_sides=6):
         self.die_sides = die_sides
     def roll(self):  #随机骰子点数
         return randint(1, self.die_sides)
    bb_award = [A, B, C, D, E, F, G, H, I, J, K, L, M]
    bb_result = []
    #检查每次摇骰子结果并对应规则进行判断
    def check_result():
     if bb().count(1) == 2 and bb().count(4) == 4:
         bb_result.append(A)
     elif bb().count(4) == 6:
         bb_result.append(B)
     elif bb().count(1) == 6:
         bb_result.append(C)
     elif bb().count(2) == 6 or bb().count(3) == 6 or bb().count(5) == 6 or bb().count(6) == 6:
         bb_result.append(D)
     elif bb().count(4) == 5:
         bb_result.append(E)
     elif bb().count(1) == 5 or bb().count(2) == 5 or bb().count(3) == 5 or bb().count(5) == 5 or bb().count(6) == 5:
         bb_result.append(F)
     elif bb().count(4) == 4:
         bb_result.append(G)
     elif bb().count(1) == 1 and bb().count(2) == 1 and bb().count(3) == 1 and bb().count(4) == 1 and bb().count(5) == 1 and bb().count(6) == 1:
         bb_result.append(H)
     elif bb().count(4) == 3:
         bb_result.append(I)
     elif bb().count(1) == 4 or bb().count(2) == 4 or bb().count(3) == 4 or bb().count(5) == 4 or bb().count(6) == 4:
         bb_result.append(J)
     elif bb().count(4) == 2:
         bb_result.append(K)
     elif bb().count(4) == 1:
         bb_result.append(L)
     else:
         bb_result.append(M)
     return bb_result
    

    重点功能、编程思考:

  4. 代码模块的安排与整体框架:
        一开始茫然,只能先确定必须完成的功能:核心的摇骰子功能以及页面的图片与按钮的实现。然后再结合原型模型开始入手设想,而后结合 pygame 的学习,再参考一些其他游戏的框架逻辑,再随着编码的开始,对整体做出以下安排:

  • 将游戏分为三个模块:游戏界面、产生摇骰子的结果、按钮
  • 在游戏界面的模块之中导入剩余两个部分的模块
  • 只在游戏界面的模块之中进行窗口的渲染与更新
  1. 要该如何做到页面切换:
        粗略的思路大约是点击按钮就切换,但此处具体的实现我们两人产生一定的分歧。分歧大概是直接在一个函数里渲染刷新界面或者是跳转到另外一个函数中渲染刷新界面。但是考虑到函数之间的嵌套可能会有点奇怪的错误,于是采用了在一个函数之中用不同的函数 draw 去渲染再刷新的操作方法。至于如何选择不同的函数 draw ,则需要配合监听鼠标点击事件的位置来判断按钮的点击,选择不同函数。

二、结对作业总结:

学习进度条

第N周新增代码(行)累计代码(行)本周学习耗时(小时)累计学习耗时(小时)重要成长
13003001010简单地恶补了下Pygame的使用
···

照片:

img

结对编程体验:

这次结对编程增加了 Git 的使用,使得对于如何使用 Git 协作有了更深的了解,确实也方便了在编写代码过程之中的两人不同的各种修改。而至于此次沟通环节上,相较于上一次有了更默契顺畅的交流,能够平和且清晰地进行不同问题探讨,个人主观上就觉得作业进行地更加顺畅且愉快了。在此真诚地感谢结对伙伴了。可能结对编程最大的快乐就是拉着一个人共沉沦吧

有收获的事件:

  • pygame安装
        此前没学 python ,并没有安装 python 的环境以及编译器,也没有 pygame 。所以在环境配置和安装之上浪费了比较多的时间,又要搜索教程也要处理配置环境过程中的出错。收获可以说是,熟悉了有关 python 各种安装方式和编译器的使用方式。
  • 编写按钮模块
        一开始没有详细预期,只按教程边学边进行了按钮的简单实现,然后写不同界面时,发现每次都要从头实现每个按钮,麻烦。就从头来过,参考网上资料用 Button 类将按钮对象化。又觉得点击按钮没有动画效果有点怪,结对成员又用上矩形绘画的方式做了点击的动画效果。体会到了将面向对象的思想融合到具体代码,也更理解了此种做法带来的好处。
  • 实现页面切换
        可能是个人最困扰的问题。毕竟简单的单页面网上教程很多,只有这种如何在多个页面之间切换的问题无法找到确切的教程。所以只能不断地看相关教程或是一些可借鉴的小游戏去寻找思路。也还好是结对作业,有个人能一起商量探讨如何实现,分享查找到的不同方法。不仅是技术上的收获,更多可能是精神上的收获。毕竟又锻炼了下耐心且毅力地摆脱困境的能力以及让人感到队友的可靠。
...全文
457 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离(Matlab代码实现)内容概要:本文介绍了基于平均谐波结构建模的无监督单声道音乐声源分离方法,并提供了相应的Matlab代码实现。该方法通过对音乐信号中的谐波结构进行建模,利用音源间的频率特征差异,实现对混合音频中不同乐器或人声成分的有效分离。整个过程无需标注数据,属于无监督学习范畴,适用于单通道录音场景下的语音与音乐分离任务。文中强调了算法的可复现性,并附带完整的仿真资源链接,便于读者学习与验证。; 适合人群:具备一定信号处理基础和Matlab编程能力的高校学生、科研人员及从事音频处理、语音识别等相关领域的工程师;尤其适合希望深入理解声源分离原理并进行算法仿真实践的研究者。; 使用场景及目标:①用于音乐音频中人声与伴奏的分离,或不同乐器之间的分离;②支持无监督条件下的语音处理研究,推动盲源分离技术的发展;③作为学术论文复现、课程项目开发或科研原型验证的技术参考。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料同步运行调试,重点关注谐波建模与频谱分解的实现细节,同时可扩展学习盲源分离中的其他方法如独立成分分析(ICA)或非负矩阵分解(NMF),以加深对音频信号分离机制的理解。
内容概要:本文系统介绍了新能源汽车领域智能底盘技术的发展背景、演进历程、核心技术架构及创新形态。文章指出智能底盘作为智能汽车的核心执行层,通过线控化(X-By-Wire)和域控化实现驱动、制动、转向、悬架的精准主动控制,支撑高阶智能驾驶落地。技术发展历经机械、机电混合到智能三个阶段,当前以线控转向、线控制动、域控制器等为核心,并辅以传感器、车规级芯片、功能安全等配套技术。文中还重点探讨了“智能滑板底盘”这一创新形态,强调其高度集成化、模块化优势及其在成本、灵活性、空间利用等方面的潜力。最后通过“2025智能底盘先锋计划”的实车测试案例,展示了智能底盘在真实场景中的安全与性能表现,推动技术从研发走向市场验证。; 适合人群:汽车电子工程师、智能汽车研发人员、新能源汽车领域技术人员及对智能底盘技术感兴趣的从业者;具备一定汽车工程或控制系统基础知识的专业人士。; 使用场景及目标:①深入了解智能底盘的技术演进路径与系统架构;②掌握线控技术、域控制器、滑板底盘等关键技术原理与应用场景;③为智能汽车底盘研发、系统集成与技术创新提供理论支持与实践参考。; 阅读建议:建议结合实际车型和技术标准进行延伸学习,关注政策导向与行业测试动态,注重理论与实车验证相结合,全面理解智能底盘从技术构想到商业化落地的全过程。

189

社区成员

发帖
与我相关
我的任务
社区描述
福州大学软件工程教学,推行邹欣老师“构建之法”。
软件工程 高校
社区管理员
  • Dawnfox
  • REP1USONE
  • 纪华裕
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧