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 类将按钮对象化。又觉得点击按钮没有动画效果有点怪,结对成员又用上矩形绘画的方式做了点击的动画效果。体会到了将面向对象的思想融合到具体代码,也更理解了此种做法带来的好处。
  • 实现页面切换
        可能是个人最困扰的问题。毕竟简单的单页面网上教程很多,只有这种如何在多个页面之间切换的问题无法找到确切的教程。所以只能不断地看相关教程或是一些可借鉴的小游戏去寻找思路。也还好是结对作业,有个人能一起商量探讨如何实现,分享查找到的不同方法。不仅是技术上的收获,更多可能是精神上的收获。毕竟又锻炼了下耐心且毅力地摆脱困境的能力以及让人感到队友的可靠。
...全文
408 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

189

社区成员

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

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