现代程序设计 作业5

在前四个作业中, 我们体会了数组,子数组的和,二维数组,字符串和字母的处理, 简单和复杂的 UI 程序等。大家锻炼了命令行的处理,模块的持续重构和演化,单元测试,UI 程序的处理,全局单例的做法,MVC 设计模式等等。同时我们还学习和练习了两次结对编程,学习了如何用代码规范让自己的程序容易理解,便于维护。

有了前面的基础,现在我们来尝试一些更有意思的题目 – 设计 client/server 的程序,做实时的数据处理。

这个作业来源于:

创新的时机 – 黄金点游戏

我们在课堂上也玩过这个游戏,我们自然想把这个游戏搬到网上。 我们分两步走:

1) 9/30 课堂练习

同学们还是两人结对 (这次可以自由组合),设计一个基于网络的黄金点游戏。 要求:

  1. 多人游戏, 每个选手有一个客户程序在运行, 和一个服务器通过互联网的某种协议交互。
  2. 在有网络接的地方就可以玩 (LAN, WiFi,  3G 都应该可以)。
  3. 客户程序要先向服务器注册, 确保在一个游戏的过程中, 注册信息能保证一个(并且只有一个)客户以某确定的用户名参与游戏。
  4. 服务器可以规定一次锦标赛有多少轮,  每轮的具体提交数据的格式是什么。 在服务器规定的时间范围内, 每个客户程序向服务器提交黄金点数据。 客户程序之间不交流。
  5. 在一轮介绍后, 服务器把此轮的结果 (参与用户名,  提交的数据,第一名,G-number) 公布在服务器上。  每个客户程序都能自由获取。
  6. 一轮的优胜程序可以得 10 分, 一轮的最后一名得 (–1)分, 其余选手得 0 分。  在规定时间内不能提交数字的客户程序得 (-5) 分。 如果有并列第一名, 则服务器取提交数字较早的客户程序作为优胜者。  如果有并列最后一名, 则并列者都得 (-1) 分。
  7. 每次锦标赛事先规定好是采取下列哪一个模式:
    1. 每个客户程序必须提交一个有理数。
    2. 每个客户程序必须提交两个有理数。  (任何一个数字最接近G-number 则此客户程序就是优胜。)
  8. 客户程序可以用任何语言编写, 只要它能够按要求和服务器交互即可。
  9. 服务器必须实时地通过一个网页显示每个用户的得分 (人可以从这里看进展,客户端程序会从这里拿数据进行分析)。
  10. 服务器必须能避免接口拥堵, DDOS 等意外情况。

课堂作业交什么?

  1. 你对于这个系统的服务器和接口是如何设计的?  应该采取哪些设计让游戏能顺利完成? 写出具体的接口。
  2. 你和你的同伴分工负责, 设计出服务器应该有几个功能模块,  这些功能模块之间的关系 (用 UML 或其它图例来表示)。
  3. 写出每个模块功能的伪代码,要能做到让另一个同学能看到这些伪代码,就能明确实现的要求并马上开始实现。
  4. 我们的课程有 60 名学生 (60 个客户程序),如何能设计服务器程序和交互的接口让它能在 1 秒钟之内就完成一轮比赛?  

2) 实际服务器程序设计和展示

既然同学们设计好了服务器,那就让我们测试大家写的服务器吧。 两人一组写服务器 (按照你们原来的设计), 每个人自己写一个比较简单的客户端 (这样就有两个客户端了)。

测试: 上课时候大家轮番上阵,  做下面的事情。

    1. 显示你们的博客,上面应该有你们的设计,特别是接口的设计,说明你们的接口设计是如何简明而有效,独特之处在哪里?
    2. 每一对同学带两台电脑到讲台上。在你们的电脑上,  启动你们的服务器, 在的两个电脑各运行 20 个实例 ,那就有 40 个进程了,这 40 个进程各有各的用户名和密码。 建议把用户名和密码放到一个文件中,服务器保存了所有的 <用户名,密码>信息,  每一个客户端进程使用一个 <用户名,密码>。 建议在每个程序中加入一定的随机因素,来避免所有的客户端都提交一样的数字) 。两台电脑可以通过局域网或其它连接方式 (例如用网线直接连接两个电脑的网卡),这个由学生自己事前设置好,不要到时候再出错。
    3. 开始一个锦标赛 (大约100 轮, 为时2分钟。 到时如果没有完成也强行停止)
    4. 同时服务器显示网页自动展现各个用户在每个轮次的排名,和每轮黄金点的变化曲线 (这样大家用肉眼就可以看到)。
    5. 根据锦标赛完成的质量, 同学们和TA  在下面评分。

3) 同学们的客户端比赛

我们通过上面的比赛和评比, 选出一个好用的服务器程序之后,  下面就要进行真刀真枪的客户端比赛了。同学们根据服务器的设计要求修改一下他们的程序 (主要是接口部分), 每个人为一个单位参加比赛。 写好程序,提交到 GitHub,  TA 组织大家在一个网络相对稳定的环境中进行比赛。 根据服务器的负载和运行效率,计划用 1 小时完成 1,000 轮比赛,最后得出所有人的名次 。

谁的程序设计得好, 那就拉出来溜溜吧!

这个比赛如何算分?  给同学们提供服务器程序的同学得到最高分10 分, 不参加比赛 (包括程序不能正常和服务器交流)的同学得 负分。

比赛最好的同学在1000轮的锦标赛中得了 2000 分, 他的得分算10 分,其余的同学按这个(最高分:同学实际得分)比例算得分,例如一个同学得了 200 分, 是最高分的 10%, 那么他得 1 分。

【这是 现代程序设计 (课程设计中, 征求意见稿) 的一部分】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代程序设计 作业6 - 简单而有意义的题目

这是这个课件的一部分: 现代程序设计 &#xff08;课程设计中, 征求意见稿&#xff09; 好多同学们都说题目难&#xff0c;这回我们来一个简单而很有意义的。 :&#xff09; 写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索&#xff0c;似乎比较容易&#xff1b;然而从…

现代程序设计 作业7 - 更加简单的题目

在网上&#xff0c;当用户发现一个新东西 &#xff08;海洋里捞出来的新物种&#xff0c;奇怪颜色的飞鸟&#xff0c;某种新的植物等&#xff09;, 大家会问下面的问题: 能吃么 好吃么 怎么吃 这三个振聋发聩的问题被吃货们简称为能好怎&#xff0c; 大家可以打开链接看看&…

现代程序设计 作业9 - 综合练习

经过大半学期的学习和练习, 我们把学到的东西综合起来。 在作业2 (http://www.cnblogs.com/xinz/p/3318230.html ) 中, 同学们用各种方法 &#xff08;主要是动态规划&#xff0c;外加一些遍历&#xff09;计算了一维和二维数组中最小最大子数组的和。 当然&#xff0c;程序在…

对微软实习生或者工作感兴趣的读者, 目前我的项目是...

从 2018/4 开始&#xff0c;我在微软亚洲研究院(北京)工作&#xff0c;做AI 工具的研发&#xff0c;请看&#xff1a;https://github.com/microsoft/ai-edu --------------- 从2014/7/28 开始&#xff0c;我在Windows 的中国工程团队干活&#xff1a; http://weibo.com/355…

现代软件工程 第一章 【概论】练习与讨论

0. 学习别人的经验和体会。 同学们在上这门课的时候&#xff0c;都是大二&#xff0c;大三&#xff0c;有的是跨专业考研过来的。觉得在大学里&#xff0c;到教室来听课有意思么&#xff1f;请看&#xff1a;你为何要来上课并且认真参与&#xff0c; 另外&#xff0c;请看&…

现代软件工程 第二章 【个人技术】 练习与讨论

1 基本作业&#xff1a; 从Hello World开始 要求每个读者(或者学生)开始管理自己的源代码&#xff1a; 每个人都有一个VSTS的客户端&#xff0c;系统管理员给每一个人都创建了TFS项目&#xff0c;每个学员都是各自项目的管理员。每个同学去申请一个GitHub [i]的项目&#xff0…

现代软件工程 第三章 【软件工程师的成长】练习与讨论

1. 选哪一种医生? 作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会&#xff1a; 看书的时候觉得“技止此耳”&#xff0c;开发项目的时候才觉得实际情况和书上讲的都有一些出入&#xff0c;一些重要的细节书上没有提。我们很多人是边看Asp.net的书, 边开发Asp.ne…

现代软件工程 课件 软件工程师能力自我评价表

这是《构建之法》和软件工程教学的一部分&#xff0c;用于学生/工程师自我评价。 软件工程师如何评价自己的能力&#xff1f; 有人写Java&#xff0c;有人用C&#xff0c;还有人用1980年代就出现的 Object-C, 有人写前端&#xff0c;有人写后端&#xff0c;有人偏于行业应用&a…

现代软件工程 第四章 【结对编程】练习与讨论

4.7.0 结对编程的练习题 地铁导航和遍历 4.7.1 结对项目的案例和论文 在现代软件工程教学的过程中&#xff0c;同学们已经总结了不少切身体会。例如: 总结1[i]&#xff1a;那是project到了比较关键的创造阶段&#xff0c;整整一天&#xff0c;我们俩椅子靠椅子的坐在电脑前&am…

现代软件工程 第五章 【团队和流程】练习与讨论

团队模式和团队的开发模式有什么关系&#xff1f;如果你领头开展一个全新的项目&#xff0c;你要怎么选择“合适”的团队模式&#xff1f;不同的团队模式如何影响团队绩效的评估&#xff1f;团队精神和集体主义的区别&#xff1f; 大家回想在小学和中学的学习过程&#xff…

现代软件工程 第六章 【敏捷流程】练习与讨论

6.3.1 什么时候适合选择敏捷 我们看了这么多方法论之后&#xff0c;一些同学一定比较困惑&#xff0c;到底选择哪一种开发方法比较好呢? 这在实践中不是难题&#xff0c;有学者还列出了一些简单的问题来帮助人们做决定[i]&#xff1a; 表6-3 问题引出方法 问题 Yes – 偏向传…

现代软件工程 第七章 【MSF】练习与讨论

7.7 移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超&#xff0c;同学们自豪地说&#xff0c;我们要用全套TFS敏捷开发模式开发项目&#xff01; 真的&#xff1f;阿超不敢相信。 同学&#xff1a; 对&#xff01;我们要用全5个工作项类型 – 任务、缺陷、场景…

现代软件工程 第八章 【需求分析】练习与讨论

1 扩展阅读下面两篇文章也说明了软件估计的难度&#xff1a; Steve McConnell 软件估计的 10 种罪&#xff1a;http://www.ewh.ieee.org/r5/central_texas/austin_cs/presentations/2004.08.26.pdf Quora精选: 为什么软件开发周期总是预估的2~3倍http://jandan.net/201…

现代软件工程 第九章 【项目经理】练习与讨论

9.5.1 PM们的故事 讲了这么多条条框框&#xff0c;我们还是来讲几个故事吧。 A)是不是所有的好功能都是由PM主导&#xff0c;一步一步根据用户需求&#xff0c;按照用户场景设计&#xff0c;然后进行可用性测试等等步骤之后得来的呢&#xff1f; 功能本天成&#xff0c;妙手偶…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论&#xff1a;下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说&#xff0c;我们敏捷的团队&#xff0c;就喜欢直接的面对面的交流&#xff0…

现代软件工程 第十一章 【软件设计与实现】 练习与讨论

1 如何避免在产品开发后期不断有重大修改&#xff0c;导致其它模块的连锁反应? DCR Tell mode vs. Ask mode设计变更 在项目早期&#xff0c;如果大家觉得要做一个设计变更&#xff0c;便可以采用告知模式(Tell-mode)的形式&#xff0c;也就是说&#xff0c;修改方必须通告所…

现代软件工程 第十二章 【用户体验】练习与讨论

1 什么是用户体验&#xff0c; 什么时候开始考虑用户体验&#xff1f; 究竟什么是用户体验呢? 请看&#xff1a; http://www.infoq.com/articles/aaron-sanders-user-experience (中文版)http://kb.cnblogs.com/page/508097/ 既然用户体验和用户界面对一个项目这么重要&…

现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论

0. 为啥要讲人、绩效、和职业道德&#xff1f; 学好专业不就行了么&#xff0c;为啥要扯这么多&#xff1f; 用专业知识教育人是不够的。通过专业教育&#xff0c;他可以成为一种有用的机器&#xff0c;但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情…

现代软件工程 第十三章 【软件测试】 练习与讨论

13.5.2 有错不改 果冻&#xff1a; 微软的产品经过这么多版本的不断完善&#xff0c;应该是把所有问题都搞定&#xff0c;“止于至善”了吧&#xff1f; 阿超&#xff1a; 那也不一定&#xff0c;在非常有名的电子表格软件Excel中&#xff0c;就有这样一个Bug&#xff1a;Exce…

现代软件工程 第十四章 【质量保障】 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test)&#xff0c;你怎么看&#xff1f; 我猜想和踢足球类似&#xff0c;还是那几个原因&#xff1a; 人太牛&#xff1a; 不世出的天才&#xff0c;例如高德纳写书时发现排版软件不好用&#xff0c;就自己写了一个。也没听…