您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 高中教育 > 打砖块小游戏-C语言编写
#includestdio.h#includestdlib.h#includegraphics.h#includebios.h#includeconio.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;i7;i++)/*设置循环存放砖块信息*/{x=0;for(j=0;j7;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(WHITE);/*设置文本颜色为白色*/outtextxy(270,380,MadebySLY);outtextxy(200,400,Pressanykeytocontinue...);/*在指定位置输出指定文本信息*/while(!kbhit())/*检查当前按下的键*/{settextstyle(0,0,4);/*设置文本的位置及字体*//*此部分通过文本循环变换颜色来达到文本闪烁的效果*/for(i=1;i=15;i++){setcolor(i);outtextxy(230,180,DxBall);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;m7;m++){for(n=0;n7;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(bricknumber0)/*设置循环直至砖块被打完*/{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((ballXbrickx)&&(ballXbrickx+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(((ballXboardX)||(ballXboardX+60))&&(ballY445)){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();/*循环结束砖块数目为零,玩家胜利*/}/*画方块*/voiddraw(intx,inty,intsizex,intsizey){rectangle(x,y,x+sizex,y+sizey);}/*退出游戏*/voidquitgame(){cleardevice();/*清除图形屏幕*/setbkcolor(YELLOW);/*设置背景颜色为黄色*/setcolor(LIGHTBLUE);/*设置文本颜色为淡蓝色*/settextstyle(0,0,4);/*设定文本位置及属性*/outtextxy(180,220,GAMEOVER);sleep(2);/*执行挂起一段时间*/cleardevice();/*清除图形屏幕*/closegraph();/*关闭图形系统*/}/*游戏失败*/voidlosegame(){cleardevice();/*清除图形屏幕*/setbkcolor(YELLOW);setcolor(LIGHTBLUE);settextstyle(0,0,4);outtextxy(50,220,SORRY!YOUARELOST!);sleep(2);cleardevice();settextstyle(0,0,4);outtextxy(180,220,GAMEOVER);sleep(2);cleardevice();closegraph();}/*玩家胜利*/voidwingame(){cleardevice();setbkcolor(YELLOW);setcolor(LIGHTBLUE);settextstyle(0,0,4);outtextxy(50,220,WELLDONE!YOUWIN!);sleep(2);cleardevice();settextstyle(0,0,4);outtextxy(180,220,GAMEOVER);sleep(2);cleardevice();closegraph();}
本文标题:打砖块小游戏-C语言编写
链接地址:https://www.777doc.com/doc-6189275 .html