/* 【自学去】网站收集 http://www.zixue7.com */
#include<graphics.h>
#include<dos.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<bios.h>
#define R 4
#define Key_Up 0x4800
#define Key_Enter 0x1c0d
#define Key_Down 0x5000
struct wall/*墙*/
{ int x;
int y;
int color;
}a[20][20];
int Keystate;
int MouseX;
int MouseY=400;
int dx=1,dy=1; /*计算球的反弹*/
int sizex=20,sizey=10; /*墙的宽度和长度*/
int Ide,Key;
void draw(int x,int y) /*画组成墙的砖*/
{
int sizx=sizex-1;
int sizy=sizey-1;
setcolor(15);
line(x,y,x+sizx,y);
line(x,y+1,x+sizx,y+1);
line(x,y,x,y+sizy);
line(x+1,y,x+1,y+sizy);
setcolor(4);
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);
setfillstyle(1,12);
bar(x+2,y+2,x+sizx-2,y+sizy-2);
}
void picture(int r,int l) /*画墙*/
{ int i,j;
setcolor(15);
rectangle(100,50,482,461);
for(i=0;i<r;i++)
for(j=0;j<l;j++)
{ a[i][j].color=0;
a[i][j].x=106+j*25;
a[i][j].y=56+i*15;
draw(106+j*25,56+i*15);
}
sizex=50,sizey=5;
}
void MouseOn(int x,int y)/*鼠标光标显示*/
{
draw(x,y);
}
void MouseSetX(int lx,int rx)/*设置鼠标左右边界*/
{
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}
void MouseSetY(int uy,int dy)/*设置鼠标上下边界*/
{
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/*设置鼠标当前位置*/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
void MouseSpeed(int vx,int vy)/*设置鼠标速度*/
{
_CX=vx;
_DX=vy;
_AX=0x0f;
geninterrupt(0x33);
}
void MouseGetXY()/*获取鼠标当前位置*/
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void MouseStatus()/*鼠标按键情况*/
{
int x;
int status;
status=0;
x=MouseX;
if(x==MouseX&&status==0) /*判断鼠标是否移动*/
{
MouseGetXY();
if(MouseX!=x)
if(MouseX+50<482)
status=1;
}
if(status)/*如果鼠标移动则重新显示鼠标*/
{
setfillstyle(1,0);
bar(x,MouseY,x+sizex,MouseY+sizey);
MouseOn(MouseX,MouseY);
}
}
void Play(int r,int l)
{int ballX;
int ballY=MouseY-R;
int i,j,t=0;
srand((unsigned long)time(0));
do
{
ballX=rand()%477;
}while(ballX<=107||ballX>=476);/*随机产生小球的位置*/
while(kbhit)
{
MouseStatus();
if(ballY<=(59-R)) /*碰上反弹*/
dy*=(-1);
if(ballX>=(482-R)||ballX<=(110-R)) /*碰左右反弹*/
dx*=(-1);
setcolor(YELLOW);
circle(ballX+=dx,ballY-=dy,R-1);
delay(2500);
setcolor(0);/*将球移动后留下的印记用背景色覆盖*/
circle(ballX,ballY,R-1);
for(i=0;i<r;i++)
for(j=0;j<l;j++) /*判断是否撞到墙*/
if(t<l*r&&a[i][j].color==0 && ballX>=a[i][j].x && ballX<=a[i][j].x+20
&& ballY>=a[i][j].y && ballY<=a[i][j].y+10)
{t++;
dy*=(-1);
a[i][j].color=1;
setfillstyle(1,0);
bar(a[i][j].x,a[i][j].y,a[i][j].x+20,a[i][j].y+10);
}
if(ballX==MouseX||ballX==MouseX-1||ballX==MouseX-2&&ballX==(MouseX+50+2)||ballX==(MouseX+50+1)||ballX==(MouseX+50)) /*判断球落在板的边缘*/
if(ballY>=(MouseY-R))
{ dx*=(-1);
dy*=(-1); /*原路返回*/
}
if(ballX>MouseX && ballX<(MouseX+50)) /*碰板反弹*/
if(ballY>=(MouseY-R))
dy*=(-1);
if(t==l*r)/*判断是否将墙壁完全清除*/
{ sleep(1);
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(100,200,"Win");
sleep(5);
break;
}
if(ballY>MouseY)
{ sleep(1);
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(130,200,"Game Over");
sleep(5);
break;
}
}
dx=1,dy=1; /*dx、dy重新置1*/
sizex=20,sizey=10;
}
void Rule()/*游戏规则*/
{
int n;
char *s[5]={"move the mouse right or left to let the ball rebound","when the ball bounce the wall","the wall will disappear","when all the wall disappear","you will win!"};
settextstyle(0,0,1);
setcolor(GREEN);
for(n=0;n<5;n++)
outtextxy(150,170+n*20,s[n]);
}
void DrawMenu(int j)/*菜单中的选项*/
{
int n;
char *s[4]={"1.Mession One","2.Mession two","3.rule","4.Exit Game"};
settextstyle(0,0,1);
setcolor(GREEN);
for(n=0;n<4;n++)
outtextxy(250,170+n*20,s[n]);
setcolor(RED);/*选中那个菜单,那个菜单变为红色*/
outtextxy(250,170+j*20,s[j]);
}
void MainMenu()/*主菜单*/
{
void JudgeIde();
setbkcolor(BLACK);
cleardevice();
Ide=0,Key=0;
DrawMenu(Ide);
do
{
if(bioskey(1)) /*有键按下则处理按键*/
{
Key=bioskey(0);
switch(Key)
{
case Key_Down:
{
Ide++;Ide=Ide%4;
DrawMenu(Ide);
break;
}
case Key_Up:
{
Ide--;
Ide=(Ide+4)%4;
DrawMenu(Ide);
break;
}
}
}
}while(Key!=Key_Enter);
JudgeIde(); /*调用judgeIde*/
}
void JudgeIde()
{
switch(Ide)
{
case 0:
cleardevice();
picture(6,15);
MouseSetX(101,431); /*设置鼠标移动的范围*/
MouseSetY(MouseY,MouseY); /*鼠标只能左右移动*/
MouseSetXY(150,MouseY); /*鼠标的初始位置*/
Play(6,15);
MainMenu();
break;
case 1:{
cleardevice();
picture(9,15);
MouseSetX(101,431);
MouseSetY(MouseY,MouseY);
MouseSetXY(150,MouseY);
Play(9,15);
MainMenu();
break;}
case 2:{
cleardevice();
Rule();
sleep(8);
MainMenu();
break;}
case 3:cleardevice();
settextstyle(0,0,4);
outtextxy(150,200,"goodbye!");
sleep(5);
exit(0);
}
}
void main()
{int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
MainMenu();
closegraph();
}
没有合适的资源?快使用搜索试试~ 我知道了~
c语言实现类似弹力球效果.rar
共4个文件
obj:1个
exe:1个
c:1个
需积分: 0 0 下载量 70 浏览量
2024-08-12
11:44:08
上传
评论
收藏 23KB RAR 举报
温馨提示
内容介绍 项目源码:核心部分是项目的完整源代码。源码通常包括多个C文件和头文件,组织成不同的模块或功能单元。这些代码通常遵循良好的编程规范,并且附有注释,便于理解和学习。 文档:项目的文档部分通常包括代码的详细说明、项目的设计架构、模块之间的依赖关系,以及项目的使用说明。部分高级项目还会包括性能优化建议和扩展模块的开发指南。 示例和测试用例:为了帮助用户更好地理解项目,源码资源中可能包含示例代码和测试用例。这些示例代码演示了项目的主要功能,而测试用例则用于验证项目的正确性。 适用人群 初学者:对于刚接触C语言的初学者,这些项目源码是学习如何编写规范、功能完善的C代码的绝佳资源。通过阅读和研究项目源码,初学者可以学到实际项目的构建方法和最佳实践。 计算机科学学生:对于计算机科学或软件工程专业的学生来说,C语言项目源码是完成课程项目或毕业设计的宝贵参考资料。学生可以通过研究源码了解项目的架构设计,掌握复杂系统的实现方法。 软件开发者:有经验的C语言开发者可以利用这些资源快速搭建或扩展自己的项目。源码中实现的某些模块或功能可以直接复用,或者作为开发自定义功能的基础。 开源社区贡献者:对于那些希望为开源项目做出贡献的人,C语言项目源码是进入某个开源项目的切入点。通过深入研究这些源码,贡献者可以更好地理解项目的代码结构和开发流程,从而为项目做出有效的贡献。
资源推荐
资源详情
资源评论
收起资源包目录
c语言实现类似弹力球效果.rar (4个子文件)
c语言实现类似弹力球效果
EGAVGA.BGI 5KB
TANLIQIU.OBJ 4KB
TANLIQIU.EXE 26KB
tanliqiu.c 6KB
共 4 条
- 1
资源评论
零度°
- 粉丝: 1919
- 资源: 1939
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功