日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目: 用数组实现反弹球消砖块

發(fā)布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目: 用数组实现反弹球消砖块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項(xiàng)目:用數(shù)組實(shí)現(xiàn)反彈球消磚塊

  • 一、效果展示:
  • 二、代碼如下:

一、效果展示:

二、代碼如下:

#include<stdio.h> #include<string.h> #include<conio.h> #include<Windows.h> #include<time.h> #define High 24 //游戲畫面尺寸 #define Width 36//全局變量 int ball_x,ball_y;//小球的坐標(biāo) int ball_vx,ball_vy;//小球的速度 int canvas[High][Width]={0}; int position_x,position_y;//擋板的中心坐標(biāo) int ridus;//擋板的半徑大小 int left,right;//擋板的左右大小 int score=0;//分?jǐn)?shù) //二維數(shù)組存儲游戲畫布中對應(yīng)的元素 //0為空格,1為小球 2為擋板 3為磚塊(1分) 4為磚塊(2分) 5為磚塊(3分)void gotoxy(int x,int y)//將光標(biāo)移動到(x,y)位置 {HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(handle,pos); }void startup() //數(shù)據(jù)的初始化 {int k,i;ridus=5;position_x=High-1;position_y=Width/2;left=position_y-ridus;right=position_y+ridus;ball_x=position_x-1;ball_y=position_y;ball_vx=-1;ball_vy=1;canvas[ball_x][ball_y]=1;for(k=left;k<=right;k++)//擋板canvas[position_x][k]=2;srand(time(NULL));for(k=0;k<Width;k++)//加幾排磚塊{for(i=0;i<High/4;i++){canvas[i][k]=rand()%3+3;//隨機(jī)的初始化磚塊類型}} }//定義隱藏光標(biāo)函數(shù) void HideCursor() {CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor); }void show()//顯示畫面 {gotoxy(0,0);//將光標(biāo)移動到原點(diǎn)位置,以下重畫清屏int i,j;for(i=0;i<High;i++){for(j=0;j<Width;j++){if(canvas[i][j]==0)printf(" ");//輸出空格else if(canvas[i][j]==1)printf("O");//輸出小球0else if(canvas[i][j]==2)printf("*");//輸出擋板else if(canvas[i][j]==3)printf("#");//輸出磚塊else if(canvas[i][j]==4)printf("+");else if(canvas[i][j]==5)printf("$");}printf("|\n");//顯示右邊界}for(j=0;j<Width;j++)printf("-");//顯示下邊界printf("\n");printf("#、+、$ 一個分別為1、2、3分\n");printf("分?jǐn)?shù)為:%d\n",score); }void updateWithoutInput()//與用戶輸入無關(guān)的更新 {static int speed=0;if(ball_x==High-2){if( (ball_y>=left)&&(ball_y<=right) )//被擋板擋住{printf("\a");//響鈴}else{printf("游戲失敗\n");system("pause");exit(0);}}if(speed<5)//起到延時的效果speed++;if(speed==5){speed=0;canvas[ball_x][ball_y] = 0;//更新小球的坐標(biāo)ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;canvas[ball_x][ball_y] = 1;//碰到邊界后反彈if( (ball_x==0) || (ball_x==High-2) )ball_vx = -ball_vx;if( (ball_y==0) || (ball_y==Width-1) )ball_vy = -ball_vy;//碰到磚塊后反彈if(canvas[ball_x-1][ball_y]>=3&&canvas[ball_x-1][ball_y]<=5){if(canvas[ball_x-1][ball_y]==3)//判斷磚塊的類型score++;if(canvas[ball_x-1][ball_y]==4)score=score+2;if(canvas[ball_x-1][ball_y]==5)score=score+3;ball_vx=-ball_vx;canvas[ball_x-1][ball_y]=0;printf("\a");}} }void updateWithInput()//與用戶輸入有關(guān)的更新 {char input;if(kbhit())//判斷是否有輸入{input=getch();if( ((input=='a')||(input=='A')) && (left>0) ){canvas[position_x][right]=0;position_y--;left=position_y-ridus;right=position_y+ridus;canvas[position_x][left]=2;}if( ((input=='d')||(input=='D')) && (right<Width-1) ){canvas[position_x][left]=0;position_y++;left=position_y-ridus;right=position_y+ridus;canvas[position_x][right]=2;}} }int main() {system("title 消磚塊游戲中");system("color 09");startup();//數(shù)據(jù)的初始化HideCursor();while(1){show();//顯示畫面updateWithoutInput();//與用戶輸入無關(guān)的更新updateWithInput();//與用戶輸入有關(guān)的更新}return 0; }

總結(jié)

以上是生活随笔為你收集整理的项目: 用数组实现反弹球消砖块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。