當前位置:首頁 » 編程語言 » c語言打磚塊游戲

c語言打磚塊游戲

發布時間: 2022-09-04 01:54:38

Ⅰ 這個c語言打磚塊的代碼,磚塊如何實現刷新(磚塊怎麼消失)

c語言游戲中實現動畫靠的是1秒鍾多於25次的刷新。大一用easyx做過類似的,現在有點忘了,核心思想大概是

while(判斷游戲未結束)//時間沒停,未觸發游戲終止標志
{
for(inti=0;i<objectNum;i++)
{
//根據時間更新每個磚塊的狀態
//如果某磚塊的flag設為被打到,清除該物品,如果是鏈表刪節點
//未被打到,磚塊.y更新
}

//畫背景圖

for(inti=0;i<objectNum;i++)
{
//畫每個磚塊
}
//獲取用戶命令
//一旦有命令,DispatchCommand()
//調用那個函數,檢測滑鼠位置停留的時候是不是按鍵了,檢測有沒有操作磚塊
//sleep(100ms),延時造成視覺停留

}

Ⅱ 用C語言怎樣做一個五子棋的程序

打磚的游戲:
/*===========================Program Description==========================*/
/*程序名稱:game.c */
/*程序目的:打磚塊游戲演示 */
/*written by :董大鈿 */
/*========================================================================*/

#include "graphics.h"
#include "stdio.h"
#include "conio.h" /*所需的頭文件*/

int on; /*聲明具有開關作用的全局變數*/
static int score; /*聲明靜態的記分器變數*/

/* 定義開始界面函數*/

int open()
{
setviewport(100,100,500,380,1); /*設置圖形窗口區域*/
setcolor(4); /*設置作圖色*/
rectangle(0,0,399,279); /*以矩形填充所設的圖形窗口區域*/
setfillstyle(SOLID_FILL,7); /*設置填充方式*/
floodfill(50,50,4); /*設置填充范圍*/
setcolor(8);
settextstyle(0,0,9); /*文本字體設置*/
outtextxy(90,80,"BALL"); /*輸出文本內容*/
settextstyle(0,0,1);
outtextxy(110,180,"version 1.0");
outtextxy(110,190,"made by ddt");
setcolor(128);
settextstyle(0,0,1);
outtextxy(120,240,"Press any key to continue......");
}

/*定義退出界面函數*/
int quitwindow()
{
char s[100]; /*聲明用於存放字元串的數組*/
setviewport(100,150,540,420,1);
setcolor(YELLOW);
rectangle(0,0,439,279);
setfillstyle(SOLID_FILL,7);
floodfill(50,50,14);
setcolor(12);
settextstyle(0,0,8);
outtextxy(120,80,"End");
settextstyle(0,0,2);
outtextxy(120,200,"quit? Y/N");
sprintf(s,"Your score is:%d",score);/*格式化輸出記分器的值*/
outtextxy(120,180,s);
on=1; /*初始化開關變數*/
}

/*主函數*/
main()
{
int gdriver,gmode;
gdriver=DETECT; /*設置圖形適配器*/
gmode=VGA; /*設置圖形模式*/
registerbgidriver(EGAVGA_driver); /*建立獨立圖形運行程序*/
initgraph(&gdriver,&gmode,""); /*圖形系統初試化*/
setbkcolor(14);
open(); /*調用開始界面函數*/
getch(); /*暫停*/

while(1) /*此大循環體控制游戲的反復重新進行*/
{
int driver,mode,l=320,t=400,r,a,b,dl=5,n,x=200,y=400,r1=10,dx=-2,dy=-2;/*初始化小球相關參數*/
int left[100],top[100],right[100],bottom[100],i,j,k,off=1,m,num[100][100];/*方磚陣列相關參數*/
static int pp;
static int phrase; /*一系列起開關作用的變數*/
int oop=15;
pp=1;
score=0;
driver=DETECT;
mode=VGA;
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,"");
setbkcolor(10);
cleardevice(); /*圖形狀態下清屏*/
clearviewport(); /*清除現行圖形窗口內容*/
b=t+6;
r=l+60;
setcolor(1);
rectangle(0,0,639,479);
setcolor(4);
rectangle(l,t,r,b);
setfillstyle(SOLID_FILL,1);
floodfill(l+2,t+2,4);

for(i=0,k=0;i<=6;i++) /*此循環繪制方磚陣列*/
{
top[i]=k;
bottom[i]=top[i]+20;
k=k+21;
oop--;
for(j=0,m=0;j<=7;j++)
{
left[j]=m;
right[j]=left[j]+80;
m=m+81;
setcolor(4);
rectangle(left[j],top[i],right[j],bottom[i]);
setfillstyle(SOLID_FILL,j+oop);
floodfill(left[j]+1,top[i]+1,4);
num[i][j]=pp++;
}
}

while(1) /*此循環控制整個動畫*/
{
while(!kbhit())
{
x=x+dx; /*小球運動的圓心變數控制*/
y=y+dy;
if(x+r1>r||x+r1<r)
{ phrase=0;}
if((x-r1<=r||x+r1<=r)&&x+r1>=l)
{
if(y<t)
phrase=1;
if(y+r1>=t&&phrase==1)
{dy=-dy;y=t-1-r1;}
}

if(off==0)
continue;

for(i=0;i<=6;i++) /*此循環用於判斷、控制方磚陣列的撞擊、擦除*/

for(j=0;j<=7;j++)
{
if((x+r1<=right[j]&&x+r1>=left[j])||(x-r1<=right[j]&&x-r1>=left[j]))
{
if(( y-r1>top[i]&&y-r1<=bottom[i])||(y+r1>=top[i]&&y+r1<=bottom[i] ))
{
if(num[i][j]==0)
{continue; }
setcolor(10);
rectangle(left[j],top[i],right[j],bottom[i]);
setfillstyle(SOLID_FILL,10);
floodfill(left[j]+1,top[i]+1,10);
dy=-dy;
num[i][j]=0;
score=score+10;
printf("%d\b\b\b",score);
}
}
if((y+r1>=top[i]&&y+r1<=bottom[i])||(y-r1>=top[i]&&y-r1<=bottom[i]))
{
if((x+r1>=left[j]&&x+r1<right[j])||(x-r1<=right[j]&&x-r1>left[j]))
{
if(num[i][j]==0)
{ continue;}
setcolor(10);
rectangle(left[j],top[i],right[j],bottom[i]);
setfillstyle(SOLID_FILL,10);
floodfill(left[j]+1,top[i]+1,10);
dx=-dx;
num[i][j]=0;
score=score+10;
printf("%d\b\b\b",score);
}
}
}

if(x+r1>639) /*控制小球的彈射范圍*/
{dx=-dx;x=638-r1;}
if(x<=r1)
{dx=-dx;x=r1+1;}
if(y+r1>=479)
{off=0;quitwindow();break;}
if(y<=r1)
{dy=-dy;y=r1+1;}
if(score==560)
{off=0;quitwindow();break;}
setcolor(6);
circle(x,y,r1);
setfillstyle(SOLID_FILL,14);
floodfill(x,y,6);
delay(1000);
setcolor(10);
circle(x,y,r1);
setfillstyle(SOLID_FILL,10);
floodfill(x,y,10);
}

a=getch();
setcolor(10);
rectangle(l,t,r,b);
setfillstyle(SOLID_FILL,10);
floodfill(l+2,t+2,10);
if(a==77&&l<=565) /*鍵盤控制設定*/
{dl=20;l=l+dl;}
if(a==75&&l>=15)
{dl=-20;l=l+dl;}
if(a=='y'&&on==1)
break;
if(a=='n'&&on==1)
break;
if(a==27)
{quitwindow();off=0;}
r=l+60;
setcolor(4);
rectangle(l,t,r,b);
setfillstyle(SOLID_FILL,1);
floodfill(l+5,t+5,4);
delay(100);
}
if(a=='y'&&on==1) /*是否退出遊戲*/
{break;}
if(a=='n'&&on==1)
{ continue;}
}
closegraph();

}

Ⅲ c語言編的打磚塊游戲

這是一個c語言編的打磚塊游戲的雛形

編譯前在主目錄下建立一個文本文件(xia.txt)內容為:0 0 0 0 0

#include<dos.h>
#include<stdio.h>
#include<graphics.h>
#include<math.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);}
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;i<5;i++)
fscanf(p,"%x ",&zhuan[i]);
/*畫磚塊*/
for(i=0;i<5;i++)
{l=1;<br/> for(j=0;j<16;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/> }
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;gi<5;gi++)
{l=1;<br/> for(gj=0;gj<16;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;}
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;}
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/>}

Ⅳ 做一個打磚塊的游戲 用C語言

請編譯前在主目錄下建立一個文本文件(xia.txt)內容為:0 0 0 0 0
哈哈
#include<dos.h>
#include<stdio.h>
#include<graphics.h>
#include<math.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;i<5;i++)
fscanf(p,"%x ",&zhuan[i]);
/*畫磚塊*/
for(i=0;i<5;i++)
{l=1;
for(j=0;j<16;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;gi<5;gi++)
{l=1;
for(gj=0;gj<16;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);
}

Ⅳ 打磚塊 VC++

Windows編程精粹
剛開始的一個例子就是打磚塊,你可以參考一下,一共沒多少行代碼,而且解釋的比較清楚。不過是用C語言寫的,沒用到MFC,純win32
api。希望能幫到你。

Ⅵ 如何製作打磚塊游戲啊

網上有用FLASH製作打磚塊游戲的教程,我當時也只是一時興起,後來沒多大耐心做了。網路上搜索「製作FLASH打磚塊」有很多圖解或視頻教程的。FLASH是款很好用的製作FLASH影片的的軟體!

Ⅶ 用C語言做打磚塊

??不懂

Ⅷ 用C語言製作小游戲打磚塊 急~

看你的樣子c學的不錯啊!

Ⅸ C語言-打磚塊游戲是如何判斷球的反射方向的

一般一個變數表示朝向,兩個變數表示坐標
比對坐標和邊界判斷是否撞到牆和撞到了哪個牆,然後計算出入射角和反射後的坐標

Ⅹ 求一個C語言編寫的小游戲程序,要能直接在VC6.0上運行有效 果的,俄羅斯方塊打磚塊等都可以要雙人小游戲

在csdn下載頻道搜一下vc俄羅斯方塊源碼

熱點內容
ea編程入門 發布:2025-01-15 13:30:11 瀏覽:411
應繳費檔次配置異常怎麼回事 發布:2025-01-15 13:20:34 瀏覽:617
成都php招聘 發布:2025-01-15 13:12:16 瀏覽:380
怎麼調用伺服器資料庫 發布:2025-01-15 13:06:25 瀏覽:656
人人網設置訪問許可權 發布:2025-01-15 13:02:06 瀏覽:563
崩壞學園2腳本 發布:2025-01-15 12:58:43 瀏覽:459
我的世界伺服器等級如何升 發布:2025-01-15 12:45:55 瀏覽:689
c語言程序填空題 發布:2025-01-15 12:45:53 瀏覽:545
怎麼配置氯化鈉濃度 發布:2025-01-15 12:34:06 瀏覽:206
4000除以125簡便演算法 發布:2025-01-15 12:27:41 瀏覽:464