C++数织游戏[2025-06-12]
综合题 - 第02题 - 数织游戏
§.综合题-II
[注意:]
1、本次作业只允许使用学过的知识来完成,具体为从基本结构、函数、数组、指针、引用、结构体、类为止
2、所有学过/未学过的知识中,黑名单中的内容均不允许使用(具体见 520加分活动)
3、不允许使用 scanf/printf进行输入/输出
4、要做到“0 errors, 0 warnings”
综合题2:数织游戏的实现
[游戏参考网址:]
[游戏规则描述:]
1、游戏区域为矩形,有多种大小(在线游戏最大 25 * 25,demo限于cmd界面的大小,为 15 * 15)
2、矩形初始为空,然后在矩形中生成一半的球(向上取整,即 5* 5为 13个球),再生成行提示栏及列提示栏,提示栏中为多个数字,表示从左到右连续出现的球的个数
5x5数织题号:9,916,599
3、用鼠标对数据区进行操作,左键标记为该位置球存在,右键标记为不存在,再次点击则消除标记
4、将所有球位置标记出来后,点击“完成”按钮,系统自动告知游戏是否成功
5、此外还有重玩/新游戏/记录游戏时间等操作(不需要实现)
[要求:]
1、用伪图形界面方式完成数织游戏(MagicBall)
2、提供 90-b2-demo.exe供参考(需设置为新版控制台,去除快速编辑和插入模式才能支持鼠标)
3、如果网络版游戏的规则和本作业的具体要求不同,以作业要求为准
4、伪图形界面工具函数集的学习:附件中有 3个文件,说明如下cmd_console_tools.cpp:伪图形界面下基本功能函数的具体实现
cmd_console_tools.h:伪图形界面下基本功能函数的函数声明
test-cct.cpp
:测试用例
说明:①在VS中建立一个项目 test-cct,将这 3个文件放入,即可编译并运行测试用例,每个函数的具体功能及使用方法请阅读源程序及测试用例
注:要求三个文件放在同一项目中(左)并且在同一目录下(右)
cmd_console_tools中的 cct_系列函数已经能满足本次作业的所有需求,不需要再额外添加伪图形界面类的函数,也不要再用光标移动作业时给出的几个简易函数(cct_中均有对应功能的函数)
如果阅读时源代码与注释有不一致的地方,以可编译的源码为准
5、项目命名及提交要求:整个项目由 8个文件组成(需提交的为 6个),具体如下cmd_console_tools.cpp:伪图形界面工具函数集的实现(不准改动,不需要提交)cmd_console_tools.h::伪图形界面工具函数集头文件(不准改动,不需要提交)
pullze.h
:本项目的头文件
pullze_main.cpp:存放main函数
pullze_base.cpp:内部数组版的相关函数的实现
pullze_console.cpp:伪图形界面的相关函数的实现
pullze_tools_.cpp:需要的工具函数,例如菜单、判断提交是否成功等
说明:①在VS中建立一个项目 90-b2,包括 2个头文件和 5个源程序文件,要求编译生成的 exe文件名必须是90-b2.exe
要求7个文件放在同一项目中(上图左)并且在同一目录下(上图右),否则可能会编译出错导致得分为0!!!
cmd_console_tools.h/.cpp,不允许修改,也不需要提交,检查作业时,会将原始的.h/.cpp放入后编译,出错则得分为0!!!
其余5个文件需要提交,网页上只有一个文件有分数,该分数即本次作业的总分,本题得分按实现功能总体评价而不是按各文件分别给分(例:pullze_base.cpp提交后编译报error错,则本题总得分为0分,而不仅仅是pullze_base.cpp零分)
5个文件必须全部提交,否则编译错误会导致得分为0!!!
函数的命名、函数的功能划分等,没有绝对的对错与硬性要求,各人自己在作业的实现过程中慢慢领悟,不会因为分解不是最佳、函数命名不好而扣分
[子题目划分:]
为了降低难度,整个程序拆分为若干小题,完成每个小题都能够取得相应的分数
子题目A:初始化矩阵并打印
键盘输入行列(要处理输入错误,下同)
显示初始数组,行号从A开始,列号从a开始,输出0表示此位置有球,空格表示无球
为了方便查看,每5行/5列输出1个分隔行/分隔列(注意交叉位置的符号不同)
子题目B:生成行提示栏和列提示栏并打印
在子题目A完成的基础上进行
行提示栏从左到右,数字之间有空格,整个行提示栏为右对齐,宽度要求动态调整
列提示栏从上到下,数字之间有空格,整个列提示栏为下对齐,高度要求动态调整
子题目C:初始矩阵及行/列提示栏生成后,可以开始游戏
在子题目B完成的基础上进行
初始只显示提示区,数据区为空
键盘输入坐标(严格区分大小写),表示“标记该位置的球存在”(等价于左键),再次输入相同坐标则取消标记
不需要完成“标记为不存在”的操作(等价于右键)
选择作弊模式,无颜色的“0”是有球存在但未标记过的,有颜色“0”是有球存在且标记过的,标记错误的显示为“X”
子题目D:在伪图形界面下画出初始状态
相当于子题目A的伪图形化实现,数据区外边有边框,球之间没有分隔线
边框必须是中文制表符(这个是强制限制,不符合要求大作业成绩直接为0,下同),边框的具体使用方法请认真阅读本文档后面的内容及附件
要能够依据区域的大小选择字体,字体及大小不强制要求,但要保证在1920x1080且100%缩放下显示正常(后续所有伪图形界面要求均相同)
子题目E:在伪图形界面下画出初始状态(含行/列提示栏)
相当于子题目B的伪图形化实现,球之间没有分隔线
行提示栏和行标、列提示栏和列标之间要有分隔线
希望和子题目D共用画框架的参数,是否打印状态栏通过参数决定(后续同)
子题目F:在伪图形界面下画出初始状态并支持鼠标移动
在子题目E完成的基础上进行,鼠标操作的方法读懂test_cct即可(不需要额外查其它资料)
只有在数据区才显示坐标,其它位置均为非法
将实时读取的坐标在数据区下方打印
合法位置单击左键/右键后,打印读取的坐标并结束
子题目G:在伪图形界面下完成完整的游戏
在子题目F完成的基础上进行
回车键提交,正确则结束,否则按从上到下,从左到右的顺序给出第一个错误位置并继续
Q/q退出游戏,返回菜单
子题目H:在伪图形界面下画出初始状态
相当于子题目D的有分隔线版本,分隔线也是中文制表符,否则0分
每个球自身带一个小边框,也需要用中文制表符绘制,否则0分
有分隔线版本的字体大小和有分隔线不同,合理即可
希望和无分隔线版本共用画框架的函数,通过参数区分差异(后续同)
子题目I:在伪图形界面下画出初始状态(含行/列提示栏)
相当于子题目E的有分隔线版本
子题目J:在伪图形界面下画出初始状态并支持鼠标移动
相当于子题目F的有分隔线版本
鼠标移动到数据区的分隔线上,也属于非法
子题目K:在伪图形界面下完成完整的游戏
相当于子题目G的有分隔线版本
函数的分解与使用限制:
1、继续进行函数的分解和调用关系的训练,但无硬性要求
2、参数解决差异时,仍然不建议用 if-else/switch-case等简单方法分解,例如:画 5/10列的框线时,不能采用下面这种形式,而应该用循环打印整个框线,根据循环值决定框线的长短;同样,是否有分隔线也希望通过参数设置而不是写两个函数来完成switch(col){
case 5:
3、共用函数中,均允许调用其它函数,基本原则就是高效完成程序,减少冗余代码
4、建议:尽量保证每个函数(包括main)不要超过50行(不强求)
5、函数分解合理规范的,可以给予最多1分的总分额外加分,本加分项不需要额外提交程序,通过检查源程序后给出相应得分(本加分项为老师/助教主观判定,无固定标准,也不接受差异申诉)
[无强制要求的内容:]
1、内部数组的数据类型、具体值等无强制要求(例:用char数组,既可以’0’-‘9’,也可以是0-9)
2、字体、字号、颜色等无强制要求(但需要保证在 1920x1080分辨率/缩放率 100%条件下显示正常)
3、画边框的顺序无强制要求
4、边框的线型无强制要求(四选一),但必须是中文边框线(“ 24252-900102-W1402.综合题-附件四种线型的中文制表符框架.cpp”给出了四种线型,任选一种即可)
5、各种提示信息、状态栏的内容等无强制要求
6、出错时的各种提示无强制要求,清晰明了即可
7、本题是人工判题,不是自动判题(即:不必太在意细节处理)
[全局变量禁用要求:]
本次作业禁止使用全局变量,包括外部全局和静态全局,但不限制const全局变量的使用
[禁用知识要求:]
所有学过/未学过的知识中,黑名单中的内容均不允许使用(具体见 520加分活动)
[编译器要求:]
仅VS2022通过即可,要做到“O errors, O warnings”
[分辨率要求:]
在 1920 * 1080的屏幕下(FHD)显示正常,如果你的笔记本是高分屏(超过 FHD)但是使用了缩放倍率,完成后最好设成分辨率1920x1080/缩放100%验证一下,否则可能影响得分
[实验报告:]
本次作业还需要完成对应的实验报告,具体要求另行下发
[作业要求:]
1、6月18日前(第17周周三)网上提交本次作业
2、每题所占平时成绩的具体分值见网页
3、超过截止时间提交作业会自动扣除相应的分数,具体见网页上的说明
4、大作业期间,每周作业正常下发
[重要提醒:
1、不要卡DDL!!!
2、本截止日期为本课程作业的最终提交日期,之后作业提交系统会关闭,考虑到作业的批改需要预留一定的时间,不接受任何方式的延期请求(包括有正式病假条及合理事假理由在内的任何理由)
3、汉诺塔犯过错误的同学一定要记住教训,本作业没有编译出错后的重交机会
[控制台要求:]
1、必须是Windows控制台主机的新版控制台,选项中去除“快速编辑模式”和“插入模式”
2、如何将cmd窗口由“powershell”改为“Windows控制台主机”,参见之前的文档/视频
[附录:]边框线的画法
demo中的框线是中文表格线,每个横向线段占2个字节,可以从Word的插入中寻找(也可以附件cpp中寻找)
源码联系UP主 -> https://space.bilibili.com/329101171