项目: 用数组实现反弹球消砖块
生活随笔
收集整理的這篇文章主要介紹了
项目: 用数组实现反弹球消砖块
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
項(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)移動(dòng)到(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)移動(dòng)到原點(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("#、+、$ 一個(gè)分別為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)//起到延時(shí)的效果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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目: flappy bird
- 下一篇: 项目: 空战游戏