版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序实习汇报学号:姓名:专业:班级:指导教师:通信与电子工程学院7月5日
项目实习过程程序实习汇报总分指导教师签字分数实习汇报一窗口程序基本练习实习时间:6月25日地点:207机房实习过程:理解Windows窗口程序的基本状况。我们这里的Windows窗口的建立需要在VC++的环境里实现,因此就需要VisualC++Windows程序的两种方式去得到我们需要的新建的windows窗口。:2.窗口程序运行的过程如下:得到应用程序的句柄注册窗口类(RegisterClassEx)建立窗口(CreateWindowEx)显示窗口(ShowWindows)刷新窗口客户区(UpdateWindow)进入无限的消息获取和处理的循环(GetMessageDispatchMessage)。3调试运行。调试的成果是出现一种windows的窗口。实习成果:通过学习老师给的这个程序代码,懂得了在建立一种窗口的时候所必需的某些程序代码。刚开始的时候得到的运行成果是一种和其他同学同样的窗口,在分析了这些代码的意义之后,通过自己的改编,可以得到一种自己需要的长度高度的窗口。这为接下来的试验打下了基础。实习汇报二消息驱动程序练习实习时间:6月26日。地点:207机房。实习过程:在实习一的基础上,学习绘制某些简朴的图形。调试老师给的程序代码,并学习代码。在理解的基础上,变化所给的方块的大小形状颜色位置等。由于最终的任务是编写俄罗斯方块的程序,因此就在老师所给的这些方块的基础上通过自己的研究,绘制了俄罗斯方块游戏中的七种不一样的形状。将如下的程序进行改编voidRect(COLORREFcrColor){ inti,j; for(i=0;i<20;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor);改编的程序如下voidRect(COLORREFcrColor){ inti,j; for(i=0;i<20;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor); for(i=21;i<41;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor);for(i=42;i<62;i++) for(j=0;j<20;j++)SetPixel(hdc,X*20+j,Y*20+i,crColor); for(i=63;i<83;i++) for(j=0;j<20;j++)SetPixel(hdc,X*20+j,Y*20+i,crColor);}得到的是俄罗斯方块中的四个一排的图形。以此类推,可以得到其他的图形。实习成果:对实习一的窗口程序愈加纯熟的掌握。同步掌握了消息驱动程序的基本构造。并且等够运用SetPixel(hdc,x,y,crColor)TextOut(hdc,x,y,Str,StrLen)ReleaseDC(hwnd,hdc)等函数。变化方块的颜色大小位置。方块的下移是是用背景颜色白色覆盖了本来的,通过控制键盘,方快抵达的新的位置显示的还是本来的颜色。在用变化颜色的函数RGB(x,y,z)时,我发现可以打开画图程序,通过选用自己喜欢的颜色对应的三个数字来变化我们所绘制的图形颜色。在这个过程中我明白了某些函数的用处,最重要的是我明白了不停探求新事物的重要性以及它带来的快乐。实习汇报三俄罗斯方块实习时间:6月26日—7月5日地点:207机房实习过程:试图运用在之前两个实习中学会的窗口建立和图形绘制来编写俄罗斯方块的程序。并且在2试验的中绘制了俄罗斯方块的七种图形。在编写的过程中发现碰到困难,从网上查询了某些优秀的作品,起初在编译的过程中,发既有34个错误。运用自己所学习的c语言的知识,修改了这个程序代码,使得程序可以运行。这个程序本来的背景色是黑色,又有格子线,我发现方块在下落的时候会有移动过的轨迹。猜测是两种颜色叠加出现了新的颜色,因此我就将背景颜色变化为白色,这样网格线也不能显示,看上去整洁某些,并且也没有下落的痕迹,这样方块就像是真的是在“下落”。这个程序中的方块下落的速度非常快,影响游戏的进行。在查阅了资料以及跟同学谈论之后找到了控制方块下落速度的函数SetTimer(hwnd,4,300,NULL);通过变化第三个数的大小来变化方块自动下落的速度。这个程序存本来在游戏的进行中,没有分数等级的变化。在通过查阅资料和老师的讲解后,我明白了TextOut()函数中若是输出字符或者是数字的话,只能输出一种不变化的字符。在老师的指导下,在程序中加入了一种函数itoa(),并设置了全局变量分数和等级,并将它们放入数组之中,如下:staticintscore=0; charp[10]; staticintlevel=0; chars[10]并且在判断函数与否下移的时候在循环中加上分数和等级,使得分数和等级可以变化,详细的程序如下:if(!lines) {for(j=1;j<W-7;j++) for(k=i;k>=top;k--) cells[j][k]=cells[j][k-1]; top++; score+=100;level=score/1000;}最终再使用TextOut()函数时,就可以得到了变化的分数和等级。数据构造、流程图和必要的算法描述:该程序的数据的构造:程序需要的基本数据。如建立窗口时的窗口位置,窗口宽度以及高度。绘制的游戏区于非游戏区的方格数等。程序过程中的数据存储和调用。如分数,等级,寄存图形的三个数组等。运用函数过程中的数据,及多种函数的使用。数据的逻辑构造(通过数据逻辑构造的描述,显示函数与函数之间调用关系、功能实现与函数使用的关系、消息发送与功能实现的关系、各功能实现之间先后实现、也许平行实现、必须平行实现的关系。)创立绘制窗口显示方格方格移动判断某行与否被占满,行的消除下落,障碍判断分数等级的累积和变化这些模块的功能实现都是由函数去执行的。因此模块之间是先后次序,而实现模块则需要对应函数与之平行实现。与此同步,消息应在程序的开头或模块的开头发送。游戏开始初始化游戏开始初始化注册窗口绘制游戏区非游戏区与否可如下落与否消行与否按下控制键产生随机方块左右下上与否能移位左右移位加速下落能否变形消行记分游戏结束变化形状与否充斥游戏区否是是是否否是是 否否 是是重要的算法描述游戏界面罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预览图显示等。游戏区域边框的绘制比较简朴,循环中确定光标的位置输出特定字符,即可完毕边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读到的数据显示“□”,最终构成方块的形状,完毕方块的绘制。计分和预览图部分先画出一种矩形区域,然后控制光标在其中显示分数、等级、预览图和提醒信息。方块显示运用函数DrawRact()画正方形。通过环境句柄和正方形的四角坐标来确定正方形的形状。运用函数DrawCell()来画方格。通过设备环境句柄和方格的四角坐标来确定方格。最终用reateSolidBrush()函数来确定方格的颜色。运用数组org[][]显示初始化的图形,org2[][]表达在显示下一种图形里的图形。变化的图形用数组block[][]表达。运用随机函数rand()来产生七个随机数,分别是从0到6,代表七种不一样的形状。 srand((unsigned)time(NULL)); sel=rand()%7; switch(sel) { case0: //▓▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=6;org[1][1]=block[1][1]=0; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=1; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case1: //▓▓▓▓ org[0][0]=block[0][0]=4;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=0; org[2][0]=block[2][0]=6;org[2][1]=block[2][1]=0; org[3][0]=block[3][0]=7;org[3][1]=block[3][1]=0; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case2: //▓ //▓▓ //▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=6;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case3: //▓ //▓▓ //▓ org[0][0]=block[0][0]=6;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=6;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=5;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case4: //▓ //▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=2; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case5: //▓ //▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=2; org[3][0]=block[3][0]=4;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case6: //▓ //▓▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=4;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=1; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } SendMessage(hwnd,MS_NEXTBLOCK,0,0); break; default: SendMessage(hwnd,MS_NEWBLOCK,0,0); SendMessage(hwnd,MS_NEXTBLOCK,0,0); break;}图形移动图形的左右以及下移动比较简朴,是通过用cover()函数来覆盖之前的图形,再用block显示变化过的图形,通过对坐标的增减1来实现每按一次下左右键来使得图形的位置发生变化。如下:switch((int)wParam) { caseVK_LEFT: for(i=0;i<4;i++) block[i][0]--; break; caseVK_RIGHT: for(i=0;i<4;i++) block[i][0]++; break; caseVK_DOWN: for(i=0;i<4;i++) block[i][1]++; break;方块变形 方块的变形稍显复杂,通过键盘的上键控制。变形的图形实际上是在每一种图形可以变化的所有状况。详细实现的算法过程如下:caseVK_UP: r=1; flag++;//【方块】旋转加1 switch(sel)//sel代表目前【方块】的形状 { case0:break; case1: flag=flag%2; for(i=0;i<4;i++) { block[i][(flag+1)%2]=org[2][(flag+1)%2]; block[i][flag]=org[2][flag]-2+i; } break; case2: flag=flag%2; if(flag) {block[0][1]+=2;block[3][0]-=2;} else {block[0][1]-=2;block[3][0]+=2;} break; case3: flag=flag%2; if(flag) {block[0][1]+=2;block[3][0]+=2;} else {block[0][1]-=2;block[3][0]-=2;} break; case4: flag=flag%4; switch(flag) {case0: block[2][0]+=2;block[3][0]+=2; block[2][1]+=1;block[3][1]+=1; break; case1: block[2][0]+=1;block[3][0]+=1; block[2][1]-=2;block[3][1]-=2; break; case2: block[2][0]-=2;block[3][0]-=2; block[2][1]-=1;block[3][1]-=1; break; case3: block[2][0]-=1;block[3][0]-=1; block[2][1]+=2;block[3][1]+=2; break; } break; case5: flag=flag%4; switch(flag) { case0: block[2][0]+=1;block[3][0]+=1; block[2][1]+=2;block[3][1]+=2; break; case1: block[2][0]+=2;block[3][0]+=2; block[2][1]-=1;block[3][1]-=1; break; case2: block[2][0]-=1;block[3][0]-=1; block[2][1]-=2;block[3][1]-=2; break; case3: block[2][0]-=2;block[3][0]-=2; block[2][1]+=1;block[3][1]+=1; break; } break; case6: flag=flag%4; switch(flag) { case0: block[0][0]++;block[0][1]--; block[1][0]--;block[1][1]--; block[3][0]++;block[3][1]++; break; case1: block[1][0]++;block[1][1]++;break; case2: block[0][0]--;block[0][1]++;break; case3: block[3][0]--;block[3][1]--;break; } break; } break;}障碍判断障碍判断,就是在方块运动中或者变形中判断周围与否有障碍阻碍下落、移位、变形。当方块下落碰到下面有方块或者抵达下边界则应停止下落并记录数据,存入背景数据数组。变形时应判断这个变形与否可以进行,假如有障碍则不能变形。例如当方块到达右边界,而若变形则会越过边界,那么这个变形的命令是不应执行的。所有这些判断都由if(!=lines)来判断。 top=H-1; //将第一列和最终一列【方格】置1,控制【方块】不超过游戏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公务员行政职业能力测验题库及答案
- 新闻行业的演变与期待
- 主题管道课程设计
- 专业焦虑的测量课程设计
- 脊柱骨折手术配合
- ipad绘画课程设计
- 原发性高血压护理查房
- 《运筹学》课课程设计
- 肝癌并发症及护理
- 老外学中文的培训方案
- 2024年安徽省行政执法人员资格认证考试试题含答案
- 【初中道德与法治课教学导入问题的调查报告7800字(论文)】
- 英语语法教案设计-新编英语语法第6版
- 智能制造装备设计与故障诊断课件第7章-智能故障诊断技术
- 长期金属材料购销合同
- 1997年全国统一高考化学试卷
- HJ1188-2021核医学辐射防护与安全要求
- 新生儿科专案改善PDCA降低新生儿科患儿入院后臀红率品管圈QCC案例
- “精康融合行动”方案(精神障碍康复)
- 房屋出租税务办理授权委托书
- 单位授权委托书范本精讲
评论
0/150
提交评论