《2022年打砖块程序》由会员分享,可在线阅读,更多相关《2022年打砖块程序(9页珍藏版)》请在金锄头文库上搜索。
1、打砖块程序作者:贾胜华更新时间: 2005-05-12 刚编的一个打砖块程序,有雏形了!这里公布原代码,希望大家一起改进。请编译前在主目录下建立一个文本文件(xia.txt)内容为: 0 0 0 0 0 哈哈#include #include #include #include union REGS regs; unsigned int zhuan5; int Msinit(); void Setmouse(int left,int right,int top,int buttom); int Msread(int *xp,int *yp,int *bup); void Draw(int x,
2、int y,int sizex,int sizey); main() int mode=VGAHI,driver=VGA; unsigned int l; int i,gi,gj,j,flag=1;/*i,j是循环变量 ,flag是标记变量 ,-1: 向 x 负半轴移动 ,+1: 向 x 正半轴名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - double qx,qy,k,b=0.0,speech=0.4,x,y; double
3、r=2.0,bx=60.0,byy=270.0; double pianx=100.0,piany=100.0,tx=20.0,ty=10.0,jx=2.0,jy=2.0; int mx=0,my=0,mb,sum;/*sum纪录砖块的数目 */ FILE * p; if(p = fopen(xia.txt, r) = NULL) printf(The file cannot open!n); exit(1); initgraph(&driver,&mode,tcBGI); Msinit(); Setmouse(int)(pianx+1+bx/2),(int)(tx+jx)*8+pianx-1
4、-bx/2),(int)byy+piany,(int)byy+pstar:cleardevice();/*程序重载的介入点 */ sum=0; qx=100.0+pianx-10;qy=180.0+pianx-10;k=0.33; setcolor(7); rectangle(int)(pianx-2),(int)(piany-2),(int)(tx+jx)*8+2+pianx),302+piany); setcolor(1); rectangle(int)(pianx-1),(int)(piany-1),(int)(tx+jx)*8+1+pianx),301+piany); /* 读取盘面情
5、况 */ for(i=0;i5;i+) fscanf(p,%x ,&zhuani); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - /*画砖块 */ for(i=0;i5;i+) l=1; for(j=0;j16;j+) if(zhuani&l)=0) Draw(int)(jx+tx)*(16*i+j)%8)+pianx+jx),(int)(jy+ty)*(int)(16*i+j)/8)+piany(int)tx,(int)t
6、y); sum+=1; l=l*2; for(;) setfillstyle(1, 0); bar(mx-bx/2,my,mx+bx/2,my+5); Msread(&mx, &my, &mb); Draw(mx-bx/2,my,bx,5); setcolor(0); circle(qx,qy,r); /*判断求是否反弹 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - if(qx-r=(tx+jx)*8+pianx-1)
7、flag=-flag;k=-k; if(qy-r=piany+1) k=-k; for(gi=0;gi5;gi+) l=1; for(gj=0;gj=y-ty/2 & qy=y+ty/2 &(pow(qx+r-x+tx/2,2)1 | pow(qx-r-x-tx/2,2)=x-tx/2 & qx=x+tx/2 &(pow(qy+r-y+ty/2,2)1 | pow(qy-r-y-ty/2,2)1) k=-k; zhuangi=zhuangi|l; sum-=1; if(sum=0) printf(Win!n);getch();goto star; setfillstyle(1, 0); bar
8、(jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty) *j+piany+jy+ty); else /*角判断 */ if(pow(qx-x+tx/2,2)+pow(qy-y+ty/2,2)=r*r | pow(qx-x-tx/2,2)+pow(qy-y+ty/2,2)=pow(qx-x+tx/2,2)+pow(qy-y-ty/2,2)=r*r | pow(qx-x-tx/2,2)+pow(qy-y-ty/2,2)=r*r) flag=-flag; zhuangi=zhuangi|l; sum-=1; if(sum
9、=0) printf(Win!n);getch();goto star; setfillstyle(1, 0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - bar(jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty) *j+piany+jy+ty); l=l*2; /*棍棒的反弹 */ if(qx=mx-bx/2 & pow(qy+r-my,2
10、)my+0.5) printf(DEAD!);Setmouse(0,0,640,480);getch();exit(1); b=qy-qx*k; if(flag=1) qx=qx+speech/pow(1.0+k*k,0.5); if(flag=-1) qx=qx-speech/pow(1.0+k*k,0.5); qy=qx*k+b;/*计算球心坐标 */ setcolor(14); circle(int)qx,(int)qy,r); delay(1); if(mb=1) Setmouse(0,0,640,480);exit(1); /* 这个函数用于实现鼠标的初始化*/ int Msinit
11、() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - int recored; regs.x.ax=0; int86 (0x33, & regs, & regs); recored=regs.x.ax; if(recored=0) printf(Mouse not foundd or Mouse driver not installed.n); return 0; else return recored; /* 下面的函数用于实
12、现设置鼠标的移动范围*/ void Setmouse(int left,int right,int top,int buttom) regs.x.ax=7; regs.x.cx=left; regs.x.dx=right; int86(0x33,& regs,& regs); regs.x.ax=8; regs.x.cx=top; regs.x.dx=buttom; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - int86(0
13、x33,& regs,& regs); /* 下面这个函数用于实现鼠标的读取*/ int Msread(int *xp,int *yp,int *bup) int xnew,ynew,ch; if(kbhit() return getch(); regs.x.ax=3; int86(0x33,& regs,& regs); xnew=regs.x.cx; ynew=regs.x.dx; *bup=regs.x.bx; *xp=xnew; *yp=ynew; return -1; /* 下面这个子程序是完成描绘一个按钮*/ void Draw(int x,int y,int sizex,int
14、sizey)/* x, y为左上角坐标 sizex,sizey为长和宽 */ int sizx=sizex-1; int sizy=sizey-1; setcolor(15);/*这里最好用白色 */ line(x,y,x+sizx-1,y); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - line(x,y+1,x+sizx-2,y+1); line(x,y,x,y+sizy-1); line(x+1,y,x+1,y+sizy
15、-2); setcolor(8);/*这里最好用深灰色 */ line(x+1,y+sizy,x+sizx,y+sizy); line(x+2,y+sizy-1,x+sizx,y+sizy-1); line(x+sizx-1,y+1,x+sizx-1,y+sizy); line(x+sizx,y+2,x+sizx,y+sizy); setcolor(7);/*这里最好用灰色 */ putpixel(x,y+sizy,3); putpixel(x+1,y+sizy-1,3); putpixel(x+sizx,y,3); putpixel(x+sizx-1,y+1,3); setfillstyle(1, 7);/*这里最好用灰色 , 设置填充模式 */ bar(x+2,y+2,x+sizx-2,y+sizy-2); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -