C++数织游戏[2025-06-12]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值