收藏 分销(赏)

C专业课程设计方案报告.doc

上传人:天**** 文档编号:2864425 上传时间:2024-06-07 格式:DOC 页数:18 大小:285.54KB 下载积分:8 金币
下载 相关 举报
C专业课程设计方案报告.doc_第1页
第1页 / 共18页
C专业课程设计方案报告.doc_第2页
第2页 / 共18页


点击查看更多>>
资源描述
赣 南 师 范 学 院 科 技 学 院 C课程设计汇报 教 学 系 数学和信息科学系 年 级 级 专 业 计算机科学和技术 学 号 151128 姓 名 钟莉筠 任课老师 郑志明 完成日期 7月6日 分数 署名 目 录 一、课程设计介绍 - 2 - 二、程序功效介绍 - 2 - (一)俄罗斯方块游戏需要处理问题包含 - 2 - (二)俄罗斯方块有戏需要设计功效函数包含 - 2 - 三、 开发环境及工具 - 3 - 四、程序数据结构设计 - 3 - (一)从配置文件获取方块数据 - 3 - (二)游戏初始化控制 - 3 - (三)显示游戏池边界 - 4 - (四)显示游戏提醒信息结点 - 5 - (五)运行游戏信息结点 - 5 - (六)是否重玩游戏信息结点 - 6 - 五、程序设计储存设计 - 7 - 六、程序步骤设计 - 7 - 七、程序运行效果图 - 8 - 八、程序测试结果图 - 9 - 九、程序存在不足及改善方法 - 10 - 十、程序设计心得体会 - 11 - 一、课程设计介绍 程设计中利用C语言在控制台情况下实现俄罗斯方块游戏,俄罗斯方块基础规则是移动、旋转和摆放游戏自动输出多种方块,使之排列成完整一行或多行而且消除得分。课程中就是灵活利用C语言中知识,掌握对于结构体,数组,指针等变量使用方法,和掌握对于函数嵌套调用,在此次课程中掌握对于编写程序格式和模块化,能够使得整体看上去愈加简练。 二、程序功效介绍 (一)俄罗斯方块游戏需要处理问题包含: ⑴按任意键开始游戏,随机产生方块并自动下移 ⑵用Esc键退出游戏。 ⑶用↑键变换方块 ⑷用←键和→ 键左右移动方块 ⑸用↓键使方块加速下移 ⑹用空格键使方块直接下移 ⑺能正确判定满行并消行、计分、定等级 ⑻能正确计时 ⑼设定游戏为不一样等级,等级越高难度越大 关键: *游戏面包数据结构:二维数组 *7种形状方块数据结构:结构体保留每种形状方块坐标、颜色 (二) 俄罗斯方块游戏需要设计功效函数包含: (1) 申明俄罗斯方块结构体 (2) 函数原型申明 (3) 制作游戏窗口 (4) 制作俄罗斯方块 (5) 判定方块是否能够下移,左移,右移。 (6) 判定是否能够消除 (7) 判定是否满格 三、 开发环境及工具 开发环境:windows7系统 工具:codeblocks 四、程序数据结构设计 (一)从配置文件获取方块数据 (二) 游戏初始化控制 typedef struct TetrisManager // 这个结构体存放游戏相关数据 { uint16_t pool[28]; //游戏池 int8_t x ;//目前X坐标,此处坐标为方块左上角坐标 int8_t y ;//目前方块Y坐标 int8_t block_type[3];//目前,下个,和下下个方块类型 int8_t orientation[3];//目前,下个,和下下个方块旋转状态 unsigned score;//得分 unsigned erased_count[4];//消行数 unsigned erased_count_total;//消行总数 unsigned tetris_count[7];//个方块数 unsigned tetris_count_total;//方块总数 bool dead; //挂 } TetrisManager; void initGame(TetrisManager *manager, TetrisControl *control) { CONSOLE_CURSOR_INFO cursorInfo = { 1, FALSE }; // 光标信息 g_hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 获取控制台输出句柄 SetConsoleCursorInfo(g_hConsoleOutput, &cursorInfo); // 设置光标隐藏 SetConsoleTitleA("俄罗斯方块"); restartGame(manager, control); } (三)显示游戏池边界 void GameInterface() { signed char y; SetConsoleTextAttribute(hOut, 0xFF9); for (y = ROW_BEGIN; y < ROW_END; ++y) // 不显示顶部4行和底部2行 { MoveXY(10, y - 3); printf("%2s", ""); MoveXY(23, y - 3); printf("%2s", ""); } MoveXY(10, y - 3); // 底部边界 printf("%28s", ""); } (四)显示游戏提醒信息结点 void PromptInformation() { SetConsoleTextAttribute(hOut, 0xF); MoveXY(0, 2); printf("◆游戏规则:"); MoveXY(0, 6); printf("□向左移动:← A 4"); MoveXY(0, 8); printf("□向右移动:→ D 6"); MoveXY(0, 10); printf("□向下移动:↓ S 2"); MoveXY(0, 12); printf("□顺时针转:↑ W 8"); MoveXY(0, 14); printf("□逆时针转:0"); MoveXY(0, 16); printf("□直接落地:空格"); MoveXY(0, 18); printf("□暂停游戏:回车"); MoveXY(0, 23); printf("FROM ME。"); } (五) 运行游戏信息结点 void runGame(TetrisManager *manager, TetrisControl *control) { clock_t clockLast, clockNow; clockLast = clock(); // 计时 printTetrisPool(manager, control); // 显示游戏池 while (!manager->dead) // 没挂 { while (_kbhit()) // 有键按下 { keydownControl(manager, control, _getch()); // 处理按键 } if (!control->pause) // 未暂停 { clockNow = clock(); // 计时 // 两次记时间隔超出0.45秒 if (clockNow - clockLast > 0.45F * CLOCKS_PER_SEC ) { clockLast = clockNow; keydownControl(manager, control, 80); // 方块往下移 } } } } (七) 是否重玩游戏信息结点 bool ifPlayAgain() { int ch; SetConsoleTextAttribute(g_hConsoleOutput, 0xF0); gotoxyWithFullwidth(15, 10); printf("游戏结束"); gotoxyWithFullwidth(13, 11); printf("按Y重玩,按N退出"); do { ch = _getch(); if (ch == 'Y' || ch == 'y') { return true; } else if (ch == 'N' || ch == 'n') { return false; } } while (1); } 五、程序设计储存设计 程序存放是存在硬盘上,分三个文件存放。俄罗斯放方块信息数据存放在"definefile"中,游戏操作信息数据存放在"gamefile",游戏界面显示信息数据存放在"displayfile"。打开方法是ab+,每次打开用FILE*fp=fopen();语句,从硬盘中读取出来从而显示。 六、 程序步骤设计 图1所表示游戏系统运行大约运行过程:函数初始化、显示各界面、如游戏池界面、按键控制提醒界面、成绩统计界面、方块统计界面等,游戏开始运行,再判定是否结束,判定是结束后再判定是否要重新开始游戏,然后循环。 图1 程序步骤图 七、程序运行效果图 程序运行效果图见图2所表示 图2 八、 程序测试结果图 游戏系统运行大约运行过程:加载游戏,函数初始化、显示各界面、如游戏池界面、按键控制提醒界面、成绩统计界面、方块统计界面等,游戏开始运行,再判定是否结束,判定是结束后再判定是否要重新开始游戏,然后循环。 程序测试结果图见图3所表示 图3 九、程序存在不足及改善方法 (一)不足之处: (1) 没有做一个或多个通用函数,没有做排序函数,造成输出信息不能依次排序。 (2) 俄罗斯方块类型在程序中写死了,不好添加修改方块类型。 (3) 对于程序细节内容没有去添加,整个程序显得太繁琐。 (二)改善方法: (1)正确使用指针指向下个结点,使查询和编辑连续操作。 (2)利用一个配置文件把所需要方块类型添加进去,然后在源程序中调用生成对应数值,这么只要在配置文件中修改方块参数就能够得到所需要方块类型。 (3) 用一个或多个函数分解出来,这么能够实现同一个函数数次调用,大大降低代码数量。 十、程序设计心得体会 这次课程设计,在一周上课中,我一直全部处于模糊状态,对C语言没有足够认识和了解。依据老师讲解,我在暑假经过书本和资料查找,慢慢琢磨和试验操作,即使还不能通透这尔罗斯方块游戏程序,但经过这次学习最终让我愈加了解书本知识,对C语言中知识学会了部分应用,加深了对C语言知识了解,和对指针、结构体操作,能够依据自己需求而去构建需要函数,在处理问题时学会了先整体分析,在细化处理其它内容。在编程时,只有大框架做好了才能够去优化,才有时间去完善自己想要做功效。在有些类似问题处理时学会相互调用函数,以简化繁琐而反复代码。这次课程设计教会了我相当基础知识,让我对C语言有了更深入认识,为以后学习有了不一样铺垫,在以后学习中,还是需要不停探索和试验,这么才能把书本上东西真正掌握成为自己东西。同事,感谢这次C课程,也感谢老师指导,在以后学习中我会愈加努力。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服