计算机技术基础C语言课程设计简单的弹球得分游戏_第1页
计算机技术基础C语言课程设计简单的弹球得分游戏_第2页
计算机技术基础C语言课程设计简单的弹球得分游戏_第3页
计算机技术基础C语言课程设计简单的弹球得分游戏_第4页
计算机技术基础C语言课程设计简单的弹球得分游戏_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机技术基础( C 语言) 课程设计一. 选题背景:该游戏程序是一个集休闲, 娱乐为一身的游戏程序。 能在紧张的学习和工 作之余,给你一个轻松大脑和身体的空间, 让你体会到在游戏中锻炼大脑思维的 乐趣。同时游戏该程序也给你一个创造新思路,发展新思维的新途径。游戏的目的也很简单,就是让弹球在游戏区中尽可能少的弹碰,并根据 球停止点离左边强的距离来计算你所获得的积分。二、 设计思想:用比较常见的函数以及部分绘图函数来实现游戏的界面的制作。其运用Bioskey ()函数来设定键盘上左右键的功能,该程序中还定义了SPOR(T )函数来进行该游戏的主要运算记分过程, 另外还定义了其他几个函数来实现该程

2、序 的其他运行部分三.程序流程图四、程序清单#include "stdio.h"#include "conio.h"#include "graphics.h"#define closegr closegraph#define VK_RIGHT 0x4d00/* 右键 */#define VK_LEFT 0x4b00 /* 左 键*/ struct qiu /* 记录 球的位置 */ int x;int y;int length; /* 球离右 边墙的距离 */int time; /* 磁盘文件中记录的个数 */int ci;/* 记录

3、碰墙 的次 数*/int zonghe; /* 综合成 绩*/place;typedef int defen;typedef struct files defen data;struct files *next;ffile;int Initiate(ffile *h)/* 初始化 链 表*/ if(*h=(ffile *)malloc(sizeof(ffile)=NULL) return 0;(*h)->next=NULL;return 1;void initgr(void) /* BGI 初始化 */int gd=DETECT,gm=0; /*和 gd=VGA,gm=VGAHI 是同

4、样效果 */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,numbe

5、r+150,getmaxy()-11);if(key=VK_LEFT) setcolor(1);for(n=152;n<=number+150;n+)line(n,getmaxy()-49,n,getmaxy()-11);return(number);ball()/* 画小球 */ int i;for(i =8;i>=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

6、 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,

7、3);sprintf(size,"%d",place.length);outtextxy(155,30,size);while(p!=NULL) if(place.zonghe<p->data) 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(

8、j); /* 返回本次成 绩在历史中排名 */ sport() /* 小球 运动功能 */int oldx=0;/* 记录 先前的位置 */float v;/*设定初始速度 */int n=0;float k=0;/* 摩擦系 数*/int m=1;int km;void *speedx;/* 速度 */place.ci=0;dis() ;while(v<10000&&!kbhit() if(oldx<place.x&&place.x<(getmaxx()-109)|(place.x=110) if(place.x=110)place.ci+;

9、/* 记录碰墙 次数 */setcolor(13);setfillstyle(SOLID_FILL,1); floodfill(375,30,3);sprintf(speedx,"%d",place.ci); outtextxy(375,30,speedx);n=0; if(oldx>place.x&&place.x>110)|(place.x=(getmaxx()-109) if(place.x=(getmaxx()-109) )place.ci+;setcolor(13); setfillstyle(SOLID_FILL,1); floodf

10、ill(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(spee

11、dx,"%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 hzk16err

12、or!n");exit(0) ;for(i=0;i<num;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;a<16;a+)for(b=0;b<8;b+) if(bitdata2*a&bitb)putpixel(xx+b,a+y,color);if(bitdata2*a+1&bitb) putpixel(xx+8+b,a+y

13、,color);xx+=16;fclose(stream);/* 清屏 */return;void cls(int x1,int y1,int x2,int y2)int j;for(j=y1;j<y2;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,get

14、maxx()-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);rectang

15、le(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(); /* 调用函 数*/

16、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 定义的,各

温馨提示

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

评论

0/150

提交评论