程序设计实训报告_第1页
程序设计实训报告_第2页
程序设计实训报告_第3页
程序设计实训报告_第4页
程序设计实训报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE中北大学课程设计报告学院、系:软件学院专业软件工程学生姓名:薛军军学号:1121011721设计题目:弹力球游戏起迄日期:2012年指导教师:康珺发任务书日期:2012年6月10日

1.课程设计任务概述及实施方案任务概述1) 弹球区域下方为横板接球,上方为砖块。2) 通过键盘的左、右光标键控制接球横版的移动。3) 小球落到横板水平线,横板未接注小球,本局结束。4) 小球弹起碰到的砖块自动打碎、消失。5) 每隔一定时间(例如5s,可适当调整),砖块上方增加一行,原有砖块下移,砖块增加到横板水平线本局结束结束。6) 小球与横板为完全弹性碰撞,不考虑能量损耗。7) 每次游戏开始后有三局(或更多,可适当调整),三局都结束游戏重新开始。2)实施方案(画出系统NS流程图)2.课程设计的具体工作内容:模块N-S流程图(开始游戏功能模块)

2)模块源代码/*开始游戏*/voidstart(){intbricknumber=49;/*砖块初始数目为49个*/inti,j,key;intballX,ballY,dx=1,dy=1;intbrickx,bricky;/*砖块的左上角坐标*/intboardX=280,boardY=435,x,y;ballX=310;/*球心初始位置*/ballY=425;while(bricknumber>0)/*设置循环直至砖块被打完*/{while(!kbhit())/*检查当前按下的键*/{if((ballX<=140||ballX>=480))/*判断球心的范围以设置斜率控制其反弹*/dx=-dx;if((ballY<=20)||(ballY>=450))dy=-dy;setcolor(LIGHTRED);/*设置划线颜色为淡红色*/circle(ballX+=dx,ballY-=dy,7);/*根据判断结果在指定位置画出小球*/setfillstyle(SOLID_FILL,LIGHTRED);/*将小球填充成淡红色*/floodfill(ballX,ballY,LIGHTRED);delay(3000);/*设置小球移动的速度*/setcolor(LIGHTBLUE);/*设置划线颜色为淡蓝色*/circle(ballX,ballY,7);/*在小球经过的位置消除其痕迹*/setfillstyle(SOLID_FILL,LIGHTBLUE);/*将小球填充为淡蓝色*/floodfill(ballX,ballY,LIGHTBLUE);/*此部分控制砖块的碰撞及消除*/for(bricky=15,i=0;bricky<=138;bricky+=20,i++)for(brickx=135,j=0;brickx<=435;brickx+=50,j++){if((ballX>brickx)&&(ballX<brickx+50)&&((ballY>=(bricky-7))&&(ballY<=(bricky+27)))&&(a[i][j].key==0))/*判断小球是否碰到砖块*/{dy=-dy;setfillstyle(SOLID_FILL,LIGHTBLUE);/*将小球碰到的砖块填充成淡蓝色以达到消除方块的效果*/bar(brickx,bricky,brickx+48,bricky+18);bricknumber=bricknumber-1;/*砖块数目减一*/a[i][j].key=1;/*表示击中砖块,存放信息*/}}/*判断挡板是否接住小球*/if((ballX>=boardX)&&(ballX<=boardX+60)&&(ballY>=425))dy=-dy;if(((ballX<boardX)||(ballX>boardX+60))&&(ballY>445)){sleep(1);losegame();/*游戏失败*/}}/*键盘控制挡板的运动*/key=bioskey(0);/*返回所按键的键码*/if(key==LEFT)/*判断是否按下左箭头*/{if(boardX>=134.9)/*设置挡板向左移动的范围*/{setfillstyle(SOLID_FILL,LIGHTBLUE);/*挡板移动过的地方填充成背景色以消除痕迹*/bar(boardX,boardY,boardX+60,boardY+5);boardX=boardX-20;/*挡板左上角横坐标减小*/setfillstyle(SOLID_FILL,WHITE);/*在新位置画出一条白色挡板*/bar(boardX,boardY,boardX+60,boardY+5);}}elseif(key==RIGHT)/*判断是否按下右箭头*/{if(boardX<=424)/*设置挡板向右移动的范围*/{setfillstyle(SOLID_FILL,LIGHTBLUE);bar(boardX,boardY,boardX+60,boardY+5);boardX=boardX+10;setfillstyle(SOLID_FILL,WHITE);bar(boardX,boardY,boardX+60,boardY+5);}}elseif(key==ESC)/*判断是否按下退出键*/quitgame();/*调用退出游戏函数*/}wingame();/*循环结束砖块数目为零,玩家胜利*/}模块运行结果(抓图结果附上)(1)游戏运行一开始时(2)游戏运行一段时间后3.课程设计心得(要求300字以上,程序源代码以附录形式附在报告最后)通过这次程序设计实训,可以说我真的是获益匪浅。经过这短短的几天忙碌,我真的充实了不少。我想,当绝大部分人拿到自己的任务时,肯定都无从下手,我也不例外。我们的任务是弹力球,当我们第一天去上机时,一开始真的是毫无头绪,只能先上网查查资料,大概了解一下设计思路。通过查相关资料,我们了解到软件设计的大致思路为:需求分析、总体设计、详细设计、编写代码、软件测试。通过我们小组的讨论,先是确定了该游戏的各个功能,然后划分了各自所负责的模块,并最终决定以C语言来编写程序代码。我负责的模块是实现游戏的运行这块,通俗一点讲就是实现通过键盘操作来控制玩游戏。说起来这部分还是比较复杂的,不仅需要大量的循环控制语句,而且还必须调用大量的功能实现函数。而其中许多函数我们之前都没学过,无奈之下,我只能是现学现卖了。我通过上网、查书、请教老师、请教学长等各种方法来填充自己大脑在这方面的空白。终于,功夫不负有心人,我的程序有点眉目了。就这样,我不断查,不断问,不断调试,不断改进,经过大约一个礼拜的时间,我的程序终于做好了。当我们的程序运行成功的那一刻,我心里真的是既激动又兴奋,那种感觉真的无法言语。通过这次实训,我觉得要想设计出一款比较好的软件,首先,最重要的是要有扎实的基础,有了基础,你在设计程序时才会游刃有余。其次,团队合作很重要,小组成员只有精诚合作,不断交流,才能有所成。另外就是要虚心请教,在前辈那里,我们真的可以学到很多。最后,我不得不说,自学能力也非常重要。从这次实训来看,许多知识我们之前根本没接触过,因此,这就需要我们的自学能力了。总之,这次实训我学到了很多,经过这次实训,不仅使我的C语言知识的到了巩固,而且如何将理论知识运用到实际问题的能力也得到了一定的提升。附录:系统源代码/*打砖块小游戏*/#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#defineESC0x011b#defineLEFT0x4b00#defineRIGHT0x4d00#defineclosegrclosegraph/*文件包含程序中调用的库函数的文件库*//*设定一个数据结构存放砖块的信息*/structbrick{intx;/*砖块左上角横坐标*/inty;/*砖块左上角纵坐标*/intkey;/*表示砖块是否被击中过的变量,1表示被击中过,0表示未被击中过*/}a[7][7];/*对要用到的自定义函数的声明*/voidinitgr();voidstart();voidwelcome();voidpicture();voiddraw();/*画方块*/voidquitgame();voidlosegame();voidwingame();/*主函数*/main(){inti,j,x,y;for(i=0,y=0;i<7;i++)/*设置循环存放砖块信息*/{x=0;for(j=0;j<7;j++){a[i][j].x=x;a[i][j].y=y;a[i][j].key=0;x=x+48;}y=y+18;}initgr();/*初始化图形系统函数*/welcome();/*欢迎界面函数*/picture();/*画出游戏界面*/start();/*开始游戏*/cleardevice();/*清除图形屏幕*/closegraph();/*关闭图形系统*/}/*初始化图形系统函数*/voidinitgr(){intgdriver,gmode;gdriver=VGA;gmode=VGAHI;registerbgidriver(EGAVGA_driver);/*注册BGI驱动*/initgraph(&gdriver,&gmode,"");/*初始化图形系统*/}/*欢迎界面函数*/voidwelcome(){inti;setcolor(GREEN);/*设置文本颜色为绿色*/settextstyle(0,0,1);/*设置文本的位置及字体*/outtextxy(200,380,"MadebySLY");outtextxy(200,400,"Pressanykeytocontinue...");/*在指定位置输出指定文本信息*/while(!kbhit())/*检查当前按下的键*/{settextstyle(0,0,4);/*设置文本的位置及字体*//*此部分通过文本循环变换颜色来达到文本闪烁的效果*/for(i=1;i<=15;i++){setcolor(i);outtextxy(230,180,"Welcome!");delay(5000);}}cleardevice();/*清除图形屏幕*/}/*画出游戏界面*/voidpicture(){inti,j,m,n;setbkcolor(LIGHTBLUE);/*设置背景色为淡蓝色*/setcolor(YELLOW);/*设置划线颜色为黄色*/draw(130,10,360,450);/*在指定位置画出指定大小的矩形*//*设置循环画出屏幕上方的砖块*/for(i=1;i<=7;i++){for(j=1;j<=7;j++){for(m=0;m<7;m++){for(n=0;n<7;n=n++){setfillstyle(SOLID_FILL,YELLOW);bar(135+m*50,15+n*20,183+m*50,33+n*20);}}}printf("\n");}setfillstyle(SOLID_FILL,WHITE);/*设置填充颜色为白色*/bar(280,435,340,440);/*在指定位置画出一条形图,即游戏所需挡板*/}/*开始游戏*/voidstart(){intbricknumber=49;/*砖块初始数目为49个*/inti,j,key;intballX,ballY,dx=1,dy=1;intbrickx,bricky;/*砖块的左上角坐标*/intboardX=280,boardY=435,x,y;ballX=310;/*球心初始位置*/ballY=425;while(bricknumber>0)/*设置循环直至砖块被打完*/{while(!kbhit())/*检查当前按下的键*/{if((ballX<=140||ballX>=480))/*判断球心的范围以设置斜率控制其反弹*/dx=-dx;if((ballY<=20)||(ballY>=450))dy=-dy;setcolor(LIGHTRED);/*设置划线颜色为淡红色*/circle(ballX+=dx,ballY-=dy,7);/*根据判断结果在指定位置画出小球*/setfillstyle(SOLID_FILL,LIGHTRED);/*将小球填充成淡红色*/floodfill(ballX,ballY,LIGHTRED);delay(1000);/*设置小球移动的速度*/setcolor(LIGHTBLUE);/*设置划线颜色为淡蓝色*/circle(ballX,ballY,7);/*在小球经过的位置消除其痕迹*/setfillstyle(SOLID_FILL,LIGHTBLUE);/*将小球填充为淡蓝色*/floodfill(ballX,ballY,LIGHTBLUE);/*此部分控制砖块的碰撞及消除*/for(bricky=15,i=0;bricky<=138;bricky+=20,i++)for(brickx=135,j=0;brickx<=435;brickx+=50,j++){if((ballX>brickx)&&(ballX<brickx+50)&&((ballY>=(bricky-7))&&(ballY<=(bricky+27)))&&(a[i][j].key==0))/*判断小球是否碰到砖块*/{dy=-dy;setfillstyle(SOLID_FILL,LIGHTBLUE);/*将小球碰到的砖块填充成淡蓝色以达到消除方块的效果*/bar(brickx,bricky,brickx+48,bricky+18);bricknumber=bricknumber-1;/*砖块数目减一*/a[i][j].key=1;/*表示击中砖块,存放信息*/}}/*判断挡板是否接住小球*/if((ballX>=boardX)&&(ballX<=boardX+60)&&(ballY>=425))dy=-dy;if(((ballX<boardX)||(ballX>boardX+60))&&(ballY>445)){sleep(1);losegame();/*游戏失败*/}}/*键盘控制挡板的运动*/key=bioskey(0);/*返回所按键的键码*/if(key==LEFT)/*判断是否按下左箭头*/{if(boardX>=134.9)/*设置挡板向左移动的范围*/{setfillstyle(SOLID_FILL,LIGHTBLUE);/*挡板移动过的地方填充成背景色以消除痕迹*/bar(boardX,boardY,boardX+60,boardY+5);boardX=boardX-10;/*挡板左上角横坐标减小*/setfillstyle(SOLID_FILL,WHITE);/*在新位置画出一条白色挡板*/bar(boardX,boardY,boardX+60,boardY+5);}}elseif(key==RIGHT)/*判断是否按下右箭头*/{if(boardX<=424)/*设置挡板向右移动的范围*/{setfillstyle(SOLID_FILL,LIGHTBLUE);bar(boardX,boardY,boardX+60,boardY+5);boardX=boardX+10;setfillstyle(SOLID_FILL,WHITE);bar(boardX,boardY,boardX+60,boardY+5);}}elseif(key==ESC)/*判断是否按下退出键*/quitgame();/*调用退出游戏函数*/}wingame();/*循环结束砖块数目为零,玩家胜利*/}/

温馨提示

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

评论

0/150

提交评论