綜合知識

當前位置 /首頁/綜合知識 > /列表

c怎麼寫遊戲

1. 求C寫的最簡單的遊戲

猜數字遊戲,希望對你有幫助# include# include# includeint main(){ int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf("I have a number between 1 and 1000.nCan you guess my number?nPlease type your first guess.n"); scanf("%d",&b); while(b!=-1) { if(b==a) { printf("Excellent! You guessed the number!nWould you like to play again(y or n)?"); scanf("%c",&c); scanf("%c",&c); switch(c){ case 'y': printf("I have a number between 1 and 1000.nCan you guess my number?nPlease type your first guess.n"); scanf("%d",&b); break; case 'n': goto END; break; } } while(ba) { printf("Too high.Try again."); scanf("%d",&b); } }END: return 0;}。

c怎麼寫遊戲
2. 如何用c語言寫一個遊戲

請編譯前在主目錄下建立一個文本文件(xia.txt)內容為:0 0 0 0 0 哈哈 #include #include #include #include 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,"tcBGI"); 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); } 參考資料:。

3. 怎樣用C語言編寫一個小遊戲

“貪吃蛇”C代碼:#include #include #include #include #include #define W 78 //遊戲框的寬,x軸#define H 26 //遊戲框的高,y軸 int dir=3; //方向變量,初值3表示向“左” int Flag=0; //吃了食物的標誌(1是0否) int score=0; //玩家得分 struct food{ int x; //食物的x座標 int y; //食物的y座標 }fod; //結構體fod有2個成員 struct snake{ int len; //身長 int speed; //速度 int x[100]; int y[100]; }snk; //結構體snk有4個成員 void gtxy( int x,int y) //控制光標移動的函數 { COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } void gtxy( int x,int y); //以下聲明要用到的幾個自編函數 void csh( ); //初始化界面 void keymove( ); //按鍵操作移動蛇 void putFod( ); //投放食物 int Over( ); //遊戲結束(1是0否) void setColor(unsigned short p, unsigned short q); //設定顯示顏色 int main( ) //主函數 { csh( ); while(1) { Sleep(snk.speed); keymove( ); putFod( ); if(Over( )) {system(“cls”); gtxy(W/2+1,H/2); printf(“遊戲結束!T__T”); gtxy(W/2+1,H/2+2); printf(“玩家總分:%d分”,score); getch( ); break; } } return 0; } void csh( ) //初始化界面 { int i; gtxy(0,0); CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏光標的設置 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); for(i=0;i<=W;i=i+2) //橫座標要為偶數,因為這個要打印的字符佔2個位置 { setColor(2, 0); //設定打印顏色為綠字黑底 gtxy(i,0); printf("■"); //打印上邊框 gtxy(i,H); printf("■"); //打印下邊框 } for(i=1;i 0; i--) //從蛇尾起每節存儲前一節座標值(蛇頭除外) { snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; } switch (dir) //判斷蛇頭該往哪個方向移動,並獲取最新座標值 { case 1: snk.y[0]--; break; //dir=1要向上移動 case 2: snk.y[0]++; break; //dir=2要向下移動 case 3: snk.x[0]-=2; break; //dir=3要向左移動 case 4: snk.x[0]+=2; break; //dir=4要向右移動 } setColor(9, 0); gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇頭 if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物則執行以下操作 { printf("