程序设计和实践报告

上传人:daj****de2 文档编号:176612763 上传时间:2022-12-23 格式:DOCX 页数:14 大小:19.56KB
收藏 版权申诉 举报 下载
程序设计和实践报告_第1页
第1页 / 共14页
程序设计和实践报告_第2页
第2页 / 共14页
程序设计和实践报告_第3页
第3页 / 共14页
资源描述:

《程序设计和实践报告》由会员分享,可在线阅读,更多相关《程序设计和实践报告(14页珍藏版)》请在装配图网上搜索。

1、通信与信息工程学院程序设计与实践大作业班级:电子信息工程 1503 班姓名:周阳学号:1507050314指导教师:黄健设计时间:2016年4月25日星期一成绩:评 语:通信与信息工程学院二O六年1. 内容简介:通过学习程序设计与实践课程,我在基于Win32 API的接口上完成了我的第一个可视化的程序设计“俄罗斯方块”。“俄罗斯方块”是一个非常经典的小游戏,很考验玩家的眼力。 玩家可以按 Enter 键开始游戏;左右键控制方块的移动;下键可以使 方块的下落速度变得更快;上键可以使方块进行变形。玩家每次消去 一整行的方块,分数加一;若玩家的方块接触到产生方块的顶端,则 游戏结束。2. 工作总结:

2、通过本次程序设计,我们终于可以实现自己的可视化编程,还是 很有收获的,以前看到使用VB的同学写出可视化界面的程序,很是 羡慕,现在自己终于可以写出可视化的程序,还是很激动的。在Win32接口下,我们学习了一些常用的API函数,使用这些 API函数来搭建我们自己的程序。通过这次学习,使得我们的编写程 序的能力有了一个较大的提升。Win32 API是Windows平台的编程基 石,我们通过学习它,可以充分了解 Windows 下的开发,也为以后 学习MFC编程技术或QT编程技术打下基础。3. 设计思路:通过亲自玩“俄罗斯方块”这个游戏,观察每次下落的方块的形 状,发现只有4 种形状,而且每一次重新

3、玩都是不一样方块,所以我 断定方块是随机出现的,因此我采用随机数函数rand()来控制随机出 现的方块,由于每次重新开始游戏,都会显示不同的方块,所以使用 srand()函数捕获系统时间来生成随机数的种子;这样便可以随机产生 方块了,我把方块放在数组中。每次下落一个方块后,判断是否出现 满行的情况,如果出现这种情况,分数加一,并消去这一行方块;当 然还要判断最上面一行是否出现方块,若出现方块则判定游戏结束。当每次方块下移时,我重新把以前的位置刷一下,避免刷整个背 景造成内存负荷过大;游戏开始时方块按照Set Timer ()函数的设定 时间进行正常下落;当用户按下下键时重新调用另外一个SetT

4、imer() 函数来重新设置时间。基本思路就是这样。4. 关键代码:一随机方块显示代码int CreateRandomSqare()int nFlag = 0;srand(unsigned int)time(NULL); /种子;g_nLineLocation = 0;g_nListLocation = 3;switch (nFlag)case 0:arrSqare00 = 1;arrSqare011;arrSqare03 = 1;arrSqare10 = 0;arrSqare110;arrSqare13 = 0;break;case 1:arrSqare00 = 1;arrSqare010;

5、arrSqare03 = 0;arrSqare10 = 0;arrSqare111;arrSqare13 = 0;break;case 2:arrSqare00 = 0;arrSqare011;arrSqare02 =0;arrSqare12 =1;arrSqare02 =1;arrSqare12 =0;arrSqare02 =1;arrSqare03 = 1;arrSqare10 = 0;arrSqare111;arrSqare13 = 0;break;case 3:arrSqare00 = 0;arrSqare010;arrSqare03 = 0;arrSqare10 = 0;arrSqa

6、re111;arrSqare13 = 1;break;case 4:arrSqare00 = 0;arrSqare011;arrSqare03 = 0;arrSqare10 = 1;arrSqare111;arrSqare13 = 0;break;case 5:arrSqare00 = 0;arrSqare011;arrSqare03 = 0;arrSqare10 = 0;arrSqare111;arrSqare13 = 0;break;1;arrSqare02 =1;arrSqare12 =0;arrSqare02 =1;arrSqare12 =1;arrSqare02 =1;arrSqar

7、e12 =case 6:arrSqare00 = 0;arrSqare010;arrSqare03 = 0;1;arrSqare12 =arrSqare10 = 1;arrSqare111;arrSqare13 = 0;break;default:return 0;return 1;二能否继续下落:int CanSqareDown1()int nList = 0;for (nList = 0; nList = 0; nLine-)for (nList = 0; nList 10; nList+)if (1 = arrBackgroundnLinenList) arrBackgroundnLin

8、enList = 2; return 1;return 1;此处仅列举了一个,其余函数基本一致,在此处不再一一列举四.回调函数中对消息的处理:LRESULT CALLBACK pp(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)PAINTSTRUCT ps;HDC hdc;switch (uMsg)case WM_CREATE:/消息处理CreateRandomSqare();InitSqareLocate();return 0;case WM_TIMER:hdc = GetDC(hWnd);if (1 = CanSqareDown1()

9、 & (1 = CanSqareDown2() SqareDwon();g_nLineLocation+;else/变2Change1To2();/去除满行;Change2To0();if (0 = GameOver()return 0;/产生下一个随机块CreateRandomSqare();InitSqareLocate();ShowScore(hdc);Rectangle(hdc, 0, 0, 300, 600);ShowRandomSqare(hdc);ShowSqareElement2(hdc);ReleaseDC(hWnd, hdc);return 0;case WM_KEYDOW

10、N:switch (wParam) case VK_RETURN:SetTimer(hWnd, DEF_TIMERID, DEF_TIMENUM, NULL); return 0;case VK_LEFT:if (1 = CanSqareLeft1() & (1 = CanSqareLeft2() hdc = GetDC(hWnd);g_nListLocation-;SqareMoveLeft();Rectangle(hdc, 0, 0, 300, 600);ShowRandomSqare(hdc); ShowSqareElement2(hdc); return 0;case VK_RIGHT

11、:if (1 = CanSqareRight1() & (1 = CanSqareRight2()SqareMoveRight();g_nListLocation+;Rectangle(hdc, 0, 0, 300, 600);ShowRandomSqare(hdc); ShowSqareElement2(hdc);return 0;case VK_DOWN:if (1 = CanSqareDown1() & (1 = CanSqareDown2() hdc = GetDC(hWnd);SqareDwon();g_nLineLocation+;Rectangle(hdc, 0, 0, 300,

12、 600); ShowRandomSqare(hdc);ShowSqareElement2(hdc);return 0;case VK_UP:if (1 = CanSqareRight2() & (1 =CanSqareDown2() & (1 = CanSqareLeft2()hdc = GetDC(hWnd);ChangeShape();Rectangle(hdc, 0, 0, 300, 600);ShowRandomSqare(hdc);ShowSqareElement2(hdc);return 0;default:return 0;return 0;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);/画Rectangle(hdc, 0, 0, 300, 600);ShowScore(hdc);ShowRandomSqare(hdc);ShowSqareElement2(hdc);EndPaint(hWnd, &ps);return 0;case WM_DESTROY:KillTimer(hWnd, DEF_TIMERID);PostQuitMessage(0);return 0;lParam);return DefWindowProc(hWnd, uMsg, wParam,心得体会

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!