本文目录一览:
- 1、c语言编的打砖块游戏
- 2、C++打砖块游戏代码完整,有用。
- 3、做一个打砖块的游戏 用C语言
- 4、n年前玩的windows自带打砖块,求地址
- 5、这个C语言打砖块的代码,砖块如何实现刷新(砖块怎么消失)
c语言编的打砖块游戏
这是一个c语言编的打砖块游戏的雏形
编译前在主目录下建立一个文本文件(xia.txt)内容为:0 0 0 0 0
#includedos.h
#includestdio.h
#includegraphics.h
#includemath.h
union REGS regs;
unsigned int zhuan[5];
int Msinit();
void Setmouse(int left,int right,int top,int buttom);
int Msread(int *xp,int *yp,int *bup);
void Draw(int x,int y,int sizex,int sizey);
main()
{int mode=VGAHI,driver=VGA;br/ unsigned int l;br/ int i,gi,gj,j,flag=1;/*i,j是循环变量,flag是标记变量,-1:向x负半轴移动,+1:向x正半轴移动*/br/ double qx,qy,k,b=0.0,speech=0.4,x,y;br/ double r=2.0,bx=60.0,byy=270.0;br/ double pianx=100.0,piany=100.0,tx=20.0,ty=10.0,jx=2.0,jy=2.0;br/ int mx=0,my=0,mb,sum;/*sum纪录砖块的数目*/br/ FILE * p;br/ if((p = fopen("xia.txt", "r")) == NULL)br/ {printf("The file cannot open!\n");br/ exit(1);}-cwindows窗体打砖块
initgraph(driver,mode,"\\tc\\BGI");
Msinit();
Setmouse((int)(pianx+1+bx/2),(int)((tx+jx)*8+pianx-1-bx/2),(int)byy+piany,(int)byy+piany);
star: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);
/*读取盘面情况*/
for(i=0;i5;i++)
fscanf(p,"%x ",zhuan[i]);
/*画砖块*/
for(i=0;i5;i++)
{l=1;br/ for(j=0;j16;j++)br/ {if((zhuan[i]l)==0)br/ {Draw((int)((jx+tx)*((16*i+j)%8)+pianx+jx),(int)((jy+ty)*((int)((16*i+j)/8))+piany+jy),br/br/(int)tx,(int)ty);br/ sum+=1;br/ }-cwindows窗体打砖块
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);
/*判断求是否反弹*/
if(qx-r=pianx+1 || qx+r=(tx+jx)*8+pianx-1) {flag=-flag;k=-k;}
if(qy-r=piany+1) k=-k;
for(gi=0;gi5;gi++)
{l=1;br/ for(gj=0;gj16;gj++)br/ {br/ if((zhuan[gi]l)==0)br/ {j=(16*gi+gj)/8;br/ i=(16*gi+gj)%8;br/ x=(jx+tx)*i+jx+tx/2+pianx;br/ y=(jy+ty)*j+jy+ty/2+piany;br/ /*边判断1*/br/ if(qy=y-ty/2 qy=y+ty/2 (pow(qx+r-x+tx/2,2)1 || pow(qx-r-x-tx/2,2)1))br/ {flag=-flag;k=-k;br/ zhuan[gi]=zhuan[gi]|l;br/ sum-=1;br/ if(sum==0) {printf("Win!\n");getch();goto star;}-cwindows窗体打砖块
setfillstyle(1, 0);
bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)
*j+piany+jy+ty);
}
else
/*边判断2*/
if(qx=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;br/ zhuan[gi]=zhuan[gi]|l;br/ sum-=1;br/ if(sum==0) {printf("Win!\n");getch();goto star;}-cwindows窗体打砖块
setfillstyle(1, 0);
bar((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,int *bup)
{int xnew,ynew,ch;br/ if(kbhit()) return getch();br/ regs.x.ax=3;br/ int86(0x33, regs, regs);br/ xnew=regs.x.cx;br/ ynew=regs.x.dx;br/ *bup=regs.x.bx;br/ *xp=xnew;br/ *yp=ynew;br/ return -1;br/}-cwindows窗体打砖块
C++打砖块游戏代码完整,有用。
#includestring.h
#includestdio.h
#include stdlib.h
#includeconio.h
int scr[22][50], q=14, w=30, ban=20, score=1, sx=-1 , zy=-1 ,speed=1, chang=30;
void moveqiu(void);
void penzhuangqiu(void);
void printf(void);
void menu(void);
main(void)
{
int i=0,j=0;
menu();
for(;j50;j++)
scr[i][j]=4;
j=0;i=1;
;for(;i3;i++)
for(j=2;j48;j++)
scr[i][j]=3;
//这里设置砖头位置
scr[q][w]=2;
while(1)
{
for(j=0;j20;j++)//将板位置归0
scr[21][ban+j]=0;
if(kbhit())//控制板的移动
switch(getch())
{
case'a':case'A':if(ban1ban=29) ban--;
break;
case'd':case'D':if(ban0ban=28) ban++;
break;
case'w':case'W':getch();break;//暂停键
}
for(j=0;j20;j++)//建立板位置为1
scr[21][ban+j]=1;
penzhuangqiu();
moveqiu();
printf();
}
}
void penzhuangqiu(void)
{
int b;
b=0;
if(zy==1)//以下四个if用来检测撞砖,并改变球的运动方向
if(scr[q][w+1]==3||w+1==49)
{
scr[q][w+1]=0;
zy=-zy;
b=1;
}
if(zy==-1)//判断运动又有方向
if(scr[q][w-1]==3||w-1==0)
{
scr[q][w-1]=0;
zy=-zy;
b=1;//用来确认是否敲打左右上下的方块
}
if(sx==1)
if(scr[q-1][w]==3||q-1==0)
{
scr[q-1][w]=0;
sx=-sx;
b=1;
}
if(sx==-1)
if(scr[q+1][w]==3||q+1==21)
{
if(scr[q+1][w]==3)
{scr[q+1][w]=0;
sx=-sx;
b=1;
}
if(q+1==21)
{if(scr[q+1][w]==1)
sx=-sx;
else
{
printf("lose!!!!!!退出游戏");
if(getch())
main();
}
}
}
if(b==0)//斜的砖块
{
if(zy==1sx==1)
if(scr[q-1][w+1]==3)
{
scr[q-1][w+1]=0;
zy=-zy;
sx=-sx;
}
if(zy==-1sx==1)
if(scr[q-1][w-1]==3)
{
scr[q-1][w-1]=0;
zy=-zy;
sx=-sx;
}
if(zy==1sx==-1)
if(scr[q+1][w+1]==3)
{
scr[q+1][w+1]=0;
zy=-zy;
sx=-sx;
}
if(zy==-1sx==-1)
if(scr[q+1][w-1]==3)
{
scr[q+1][w-1]=0;
zy=-zy;
sx=-sx;
}//斜砖完毕
}
}
void moveqiu(void)
{
scr[q][w]=0;//使原来的球位置为0,并建立新的球位置
if(sx==1zy==1)
{
q--;w++;
}
if(sx==1zy==-1)
{
q--;w--;
}
if(sx==-1zy==1)
{
q++;w++;
}
if(sx==-1zy==-1)
{
q++;w--;
}
scr[q][w]=2;
}
void printf(void)
{
int i, j;
system("cls");
for(i=0;i22;i++)
{
for(j=0;j50;j++)
{
if(scr[i][j]==0)printf(" ");
if(scr[i][j]==1)printf("\3");
if(scr[i][j]==2)printf("\4");
if(scr[i][j]==3)printf("\5");
if(scr[i][j]==4)printf("_");
if(j==49)
printf("|\n");
}
}
}
void menu(void)
{
q=14, w=30, ban=20, score=10, sx=-1 , zy=-1 ,speed=1, chang=30;memset(scr,0, sizeof(int)*1100);
system("cls");
printf("A向左,D向右,W暂停\n开始游戏:任意键\n ");
if(getch()) printf("aaaaaa");
}
做一个打砖块的游戏 用C语言
请编译前在主目录下建立一个文本文件(xia.txt)内容为:0 0 0 0 0
哈哈
#includedos.h
#includestdio.h
#includegraphics.h
#includemath.h
union REGS regs;
unsigned int zhuan[5];
int Msinit();
void Setmouse(int left,int right,int top,int buttom);
int Msread(int *xp,int *yp,int *bup);
void Draw(int x,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正半轴移动*/
double qx,qy,k,b=0.0,speech=0.4,x,y;
double 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,"\\tc\\BGI");
Msinit();
Setmouse((int)(pianx+1+bx/2),(int)((tx+jx)*8+pianx-1-bx/2),(int)byy+piany,(int)byy+piany);
star: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);
/*读取盘面情况*/
for(i=0;i5;i++)
fscanf(p,"%x ",zhuan[i]);
/*画砖块*/
for(i=0;i5;i++)
{l=1;
for(j=0;j16;j++)
{if((zhuan[i]l)==0)
{Draw((int)((jx+tx)*((16*i+j)%8)+pianx+jx),(int)((jy+ty)*((int)((16*i+j)/8))+piany+jy),
(int)tx,(int)ty);
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);
/*判断求是否反弹*/
if(qx-r=pianx+1 || qx+r=(tx+jx)*8+pianx-1) {flag=-flag;k=-k;}
if(qy-r=piany+1) k=-k;
for(gi=0;gi5;gi++)
{l=1;
for(gj=0;gj16;gj++)
{
if((zhuan[gi]l)==0)
{j=(16*gi+gj)/8;
i=(16*gi+gj)%8;
x=(jx+tx)*i+jx+tx/2+pianx;
y=(jy+ty)*j+jy+ty/2+piany;
/*边判断1*/
if(qy=y-ty/2 qy=y+ty/2 (pow(qx+r-x+tx/2,2)1 || pow(qx-r-x-tx/2,2)1))
{flag=-flag;k=-k;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0) {printf("Win!\n");getch();goto star;}
setfillstyle(1, 0);
bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)
*j+piany+jy+ty);
}
else
/*边判断2*/
if(qx
;=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;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0) {printf("Win!\n");getch();goto star;}
setfillstyle(1, 0);
bar((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)=r*r ||
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;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0) {printf("Win!\n");getch();goto star;}
setfillstyle(1, 0);
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 qx=mx-bx/2 pow(qy+r-my,2)1) {k=-(k/pow(k*k,0.5))*(0.3*bx/(pow(pow
(qx-mx,2),0.5)+0.000001));}
if((int)(qy+r)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()
{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;
}
/*下面的函数用于实现设置鼠标的移动范围*/
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;
int86(0x33, 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 sizey)/* x, y为左上角坐标sizex,sizey为长和宽*/
{int sizx=sizex-1;
int sizy=sizey-1;
setcolor(15);/*这里最好用白色*/
line(x,y,x+sizx-1,y);
line(x,y+1,x+sizx-2,y+1);
line(x,y,x,y+sizy-1);
line(x+1,y,x+1,y+sizy-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);
}
n年前玩的windows自带打砖块,求地址
呃……这个没玩过啊,你确定windows会自带这个??
不过偶这里有两个很好玩的打砖块,一个是疯狂撞球(block130)(这个比较“疯狂”一点,而且关卡有些都很有挑战性。百度搜一下可以找到的),一个是工地打砖块(有日本风格那种卡通,也很耐玩。这个网上的都是硬盘版,就是要安装的,但是以前有压缩包的可以下。偶比较喜欢压缩包版的~其实你安装后删除剩下游戏主程序和那些音乐文件也是可以玩的)。【偶不是广告啦,如果找不到先玩一下这两个,sorry……】-cwindows窗体打砖块
只是给楼主提供点其他东西,楼主不爽瞄一眼就好了……抱歉啊……
不过还是祝你成功找到这个打砖块!加油~~~
这个C语言打砖块的代码,砖块如何实现刷新(砖块怎么消失)
c语言游戏中实现动画靠的是1秒钟多于25次的刷新。大一用easyx做过类似的,现在有点忘了,核心思想大概是
while(判断游戏未结束)//时间没停,未触发游戏终止标志
{
for(int i=0;iobjectNum;i++)
{
//根据时间更新每个砖块的状态
//如果某砖块的flag设为被打到,清除该物品,如果是链表删节点
//未被打到,砖块.y更新
}
//画背景图
for(int i=0;iobjectNum;i++)
{
//画每个砖块
}
//获取用户命令
//一旦有命令,DispatchCommand()
//调用那个函数,检测鼠标位置停留的时候是不是按键了,检测有没有操作砖块
//sleep(100ms),延时造成视觉停留
}