免费预览已结束,剩余6页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机技术基础(C语言)课程设计一. 选题背景:该游戏程序是一个集休闲,娱乐为一身的游戏程序。能在紧张的学习和工作之余,给你一个轻松大脑和身体的空间,让你体会到在游戏中锻炼大脑思维的乐趣。同时游戏该程序也给你一个创造新思路,发展新思维的新途径。游戏的目的也很简单,就是让弹球在游戏区中尽可能少的弹碰,并根据球停止点离左边强的距离来计算你所获得的积分。二、设计思想:用比较常见的函数以及部分绘图函数来实现游戏的界面的制作。其运用Bioskey()函数来设定键盘上左右键的功能,该程序中还定义了SPORT()函数来进行该游戏的主要运算记分过程,另外还定义了其他几个函数来实现该程序的其他运行部分。三程序流程图initiateReturn(0)Return(1)调用initgr调用ball()变量赋值i=0Setcolor(I+7);i-Main 函数调用sport()While()If()If()Oldx=place.x;SIDE BY SIDESIDE BY SIDENYNY NY NYNY调用shouHZ函数if()q=pif()Return(i)清屏再次调用ball()函数调用paixu()函数P!=NULLShouHZ()内定义变量If()=NULLPrintf(“ error ”)i=0inext=NULL; return 1; void initgr(void) /* BGI初始化 */int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */ initgraph(&gd,&gm,);int key() /*左右键功能函数*/ int key,number=0,n; for(;) if(bioskey(1) /*判断是否有键按下*/ key=bioskey(0); /*取键值*/ if(key=VK_RIGHT) /*如果按下右键*/ number=number+2; if(number=200) number=200; setlinestyle(0,0,3); setcolor(14); /*力量槽*/ line(number+150,getmaxy()-49,number+150,getmaxy()-11); if(key=VK_LEFT) setcolor(1); for(n=152;n=0;i-) setcolor(i + 7); circle(place.x,place.y,i); dis() /*消去小球*/ int i; for(i =8;i=0;i-) setcolor(1); circle(place.x,place.y,i); int paixu(ffile *h) /*将当前成绩与历史成绩比较并排序,然后一起存入链表*/ffile *p,*q,*t; int j=1; float length; void *size;p=h-next; q=h; place.length=getmaxx()-100-place.x; /*球停下后离右边墙的距离*/ length=place.length; place.zonghe=place.ci*5+(1-(length-8)/400)*80;/*综合成绩(综合考虑了距离和碰墙数)*/ setfillstyle(SOLID_FILL,1); floodfill(155,30,3); sprintf(size,%d,place.length); outtextxy(155,30,size); while(p!=NULL) if(place.zonghedata) q=p; p=p-next; j+; if(place.zonghe=p-data) if(t=(ffile *)malloc(sizeof(ffile)=NULL) return 0; t-data=place.zonghe; t-next=q-next; q-next=t; place.time+; break; return(j); /*返回本次成绩在历史中排名*/sport() /*小球运动功能*/int oldx=0; /*记录先前的位置*/ float v; /*设定初始速度*/ int n=0; float k=0; /*摩擦系数*/ int m=1; int km; void *speedx; /*速度*/ place.ci=0; v=10000-50*key(); /*初始速度*/ dis() ; while(v10000&!kbhit() if(oldxplace.x&place.xplace.x&place.x110)|(place.x=(getmaxx()-109) if(place.x=(getmaxx()-109) ) place.ci+; setcolor(13); setfillstyle(SOLID_FILL,1); floodfill(375,30,3); sprintf(speedx,%d,place.ci); outtextxy(375,30,speedx); n=1; oldx=place.x; switch(n) case 0: place.x=place.x+1; break; case 1: place.x=place.x-1; break; ball(); k=k+0.01; v=v+(int)k; delay(v); setcolor(13); km=(10000-v)/50; setfillstyle(SOLID_FILL,1); floodfill(455,30,3); sprintf(speedx,%d,km); outtextxy(455,30,speedx); dis(); void showHZ(int x,int y,unsigned char color, char *str) /*汉字显示功能*/ int num=strlen(str),i,a,b,xx=x; FILE *stream; unsigned char bit8=128,64,32,16,8,4,2,1, bitdata32; if(stream=fopen(hzk16,rb)=NULL) printf(Open hzk16 error!n); exit(0) ; for(i=0;inum;i+=2) long fops=32L*(unsigned char)stri-161)*94+(unsigned char)stri+1-161); fseek(stream,fops,SEEK_SET); fread(bitdata,32,1,stream); for(a=0;a16;a+) for(b=0;b8;b+) if(bitdata2*a&bitb) putpixel(xx+b,a+y,color); if(bitdata2*a+1&bitb) putpixel(xx+8+b,a+y,color); xx+=16; fclose(stream); return;void cls(int x1,int y1,int x2,int y2) /*清屏*/ int j; for(j=y1;jy2;j+) setcolor(0); line(x1,j,x2,j); setcolor(WHITE); return;main() int px; void *si; ffile *l; Initiate(*l); initgr(); setbkcolor(1); /*绘制窗体*/ setcolor(0); rectangle(0,0,getmaxx(),getmaxy(); rectangle(1,1,getmaxx()-1,getmaxy()-1); setcolor(8); setfillstyle(SOLID_FILL,4); rectangle(20,2,100,getmaxy()-2); rectangle(getmaxx()-20,2,getmaxx()-100,getmaxy()-2); floodfill(21,3,8); floodfill(getmaxx()-99,3,8); setcolor(3); rectangle(150,getmaxy()-50,352,getmaxy()-10); /*力量条*/ setcolor(3); setlinestyle(0,0,3); rectangle(450,20,500,50); rectangle(370,20,420,50); rectangle(150,20,200,50); setcolor(YELLOW); outtextxy(455,30,SPEED); /*显示速度*/ outtextxy(375,30,BUMP); /*显示碰墙次数*/ outtextxy(155,30,DIS); /*显示距离*/ place.x=120; /*设定小球初始位置*/ place.y=240; setlinestyle(0,0,1); ball(); /*调用函数*/ sport(); ball(); diaofile(l); px=paixu(l); save(l); getch(); cls(0,0,640,480); setcolor(13); showHZ(260,150,13,综合评分:); sprintf(si,%d,place.zonghe); outtextxy(350,155,si); getch(); closegr();五、主要解决问题的方法及技术关键1、 主要问题及解决方法A、 图形的绘制用if语句和while(!kbhit()来实现循环,用预编译命令引进库函数并通过initgraph初始化图形系统。利用setcolor()函数去实现游戏界面色彩的设置。而且还运用了outtextxy()函数在屏幕上指定位置输出字符串。此外还有Rectangle()来实现游戏界面上的矩形绘制,SetBkColor为指定的设备场景设置背景颜色,而且还用floodfill()当前选定的刷子在指定的设备场景中填充一个区域,区域是由颜色crColor定义的,各种函数的应用完善了游戏的界面效果。B 多次调用函数在主函数执
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年年度假村项目规划申请报告
- 高端海洋预制菜项目环境影响报告表
- 环保整改办法承诺书(3篇)
- 用户隐秘守秘承诺书5篇
- 合作伙伴关系稳定与发展的承诺函4篇
- 糖尿病中医内部交流
- 康复科护理的要点与实践
- 保险业务精英绩效评定表
- 班级故事会记一次班级活动6篇
- 医院院长护理工作绩效评定表
- 渝22TS02 市政排水管道附属设施标准图集 DJBT50-159
- 商业道德政策培训课件
- CJ/T 434-2013超声波水表
- 肝衰竭诊治进展
- 肌电图培训课件
- 计算国内航空货物运费国内航空货物运费的计算方法国内航空
- 2022浪潮英信服务器NP5570M5产品技术白皮书V2.0
- 【MOOC】知识图谱导论-浙江大学 中国大学慕课MOOC答案
- 学校降温情况报告范文
- 《生活污水处》课件
- 严重创伤患者紧急救治血液保障模式与输血策略中国专家共识(2024版)
评论
0/150
提交评论