欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c语言实现弹跳的小球,弹跳打中砖块消失

程序员文章站 2022-04-16 07:50:43
目录一、项目描述和最终的成果展示二、封装后的弹跳小球一、项目描述和最终的成果展示这是在上一次弹跳小项目上进行了一系列的优化和封装。项目: 弹跳的小球上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。...



一、项目描述和最终的成果展示

这是在上一次弹跳小项目上进行了一系列的优化和封装。项目: 弹跳的小球
上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。
最终效果图如下:
c语言实现弹跳的小球,弹跳打中砖块消失

二、封装后的弹跳小球

代码如下:

#include<stdio.h> #include<string.h> #include<conio.h> #include<windows.h> //全局变量 int high,width; //游戏画面大小 int ball_x,ball_y;//小球的坐标 int ball_vx,ball_vy;//小球的速度 void gotoxy(int x,int y)//将光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } void startup()//数据的初始化 { high = 15; width = 20; ball_x = 0; ball_y = width/2; ball_vx = 1; ball_vy = 1; } void show()//显示画面 { gotoxy(0,0);//光标移动到原点位置,以下重画清屏 int i,j; for(i=0;i<=high;i++) { for(j=0;j<=width;j++) { if( ( i == ball_x) && ( j == ball_y ) ) printf("O");//输出小球 else if( j == width) printf("+");//输出右边框 else if( i == high) printf("-");//输出下边框 else printf(" ");//输出空格 } printf("\n"); } } void updateWithoutInput()//与用户输入无关的更新 { ball_x = ball_x + ball_vx; ball_y = ball_y + ball_vy; if( (ball_x == 0 ) || (ball_x == high-1 )) ball_vx = -ball_vx; if( (ball_y == 0 ) || (ball_y == width-1 )) ball_vy = -ball_vy; Sleep(50); } void updateWithInput()//与用户输入有关的更新 { } int main(void) { startup();//数据的初始化 while(1) { show();//显示画面 updateWithoutInput();//与用户输入无关的更新 updateWithInput();//与用户输入有关的更新 } return 0; } 

效果图如下:
c语言实现弹跳的小球,弹跳打中砖块消失

三、显示移动挡板

代码如下:

#include<stdio.h> #include<string.h> #include<conio.h> #include<windows.h> //全局变量 int high,width; //游戏画面大小 int ball_x,ball_y;//小球的坐标 int ball_vx,ball_vy;//小球的速度 int position_x,position_y;//挡板的中心坐标 int ridus;//挡板的半径大小 int left,right;//挡板的左右位置 void gotoxy(int x,int y)//将光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } void startup()//数据的初始化 { high = 15; width = 20; ball_x = 0; ball_y = width/2; ball_vx = 1; ball_vy = 1; ridus = 5; position_x = high; position_y = width/2; left = position_y -ridus; right = position_y + ridus; } void show()//显示画面 { gotoxy(0,0);//光标移动到原点位置,以下重画清屏 int i,j; for(i=0;i<=high+1;i++) { for(j=0;j<=width;j++) { if( ( i == ball_x) && ( j == ball_y ) ) printf("O");//输出小球 else if( j == width) printf("+");//输出右边框 else if( i == high+1) printf("-");//输出下边框 else if ( (i==high)&&(j>=left)&&(j<=right)) printf("*"); else printf(" ");//输出空格 } printf("\n"); } } void updateWithoutInput()//与用户输入无关的更新 { ball_x = ball_x + ball_vx; ball_y = ball_y + ball_vy; if( (ball_x == 0 ) || (ball_x == high-1 )) ball_vx = -ball_vx; if( (ball_y == 0 ) || (ball_y == width-1 )) ball_vy = -ball_vy; Sleep(50); } void updateWithInput()//与用户输入有关的更新 { char input; if(kbhit()) { input = getch(); if( input == 'a' || input == 'A' ) { position_y--;//位置左移 left = position_y-ridus; right = position_y+ridus; } if( input == 'd' || input == 'D' ) { position_y++; left = position_y - ridus; right = position_y + ridus; } } } int main(void) { startup();//数据的初始化 while(1) { show();//显示画面 updateWithoutInput();//与用户输入无关的更新 updateWithInput();//与用户输入有关的更新 } return 0; } 

效果图如下:
c语言实现弹跳的小球,弹跳打中砖块消失

四、反弹小球

代码如下:

#include<stdio.h> #include<string.h> #include<conio.h> #include<windows.h> //全局变量 int high,width; //游戏画面大小 int ball_x,ball_y;//小球的坐标 int ball_vx,ball_vy;//小球的速度 int position_x,position_y;//挡板的中心坐标 int ridus;//挡板的半径大小 int left,right;//挡板的左右位置 int ball_number;//反弹小球的次数 void gotoxy(int x,int y)//将光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } void startup()//数据的初始化 { high = 15; width = 20; ball_x = 0; ball_y = width/2; ball_vx = 1; ball_vy = 1; ridus = 5; position_x = high; position_y = width/2; left = position_y -ridus; right = position_y + ridus; ball_number=0; } void show()//显示画面 { gotoxy(0,0);//光标移动到原点位置,以下重画清屏 int i,j; for(i=0;i<=high+1;i++) { for(j=0;j<=width;j++) { if( ( i == ball_x) && ( j == ball_y ) ) printf("O");//输出小球 else if( j == width) printf("+");//输出右边框 else if( i == high+1) printf("-");//输出下边框 else if ( (i==high)&&(j>=left)&&(j<=right)) printf("*"); else printf(" ");//输出空格 } printf("\n"); } printf("反弹小球数:%d\n",ball_number); } void updateWithoutInput()//与用户输入无关的更新 { if( ball_x == high -1) { if( (ball_y>=left) && (ball_y<=right) ) { ball_number++; printf("\a");//响铃 } else { printf("游戏失败\n"); system("pause"); exit(0); } } ball_x = ball_x + ball_vx; ball_y = ball_y + ball_vy; if( (ball_x == 0 ) || (ball_x == high-1 )) ball_vx = -ball_vx; if( (ball_y == 0 ) || (ball_y == width-1 )) ball_vy = -ball_vy; Sleep(50); } void updateWithInput()//与用户输入有关的更新 { char input; if(kbhit()) { input = getch(); if( input == 'a' || input == 'A' ) { position_y--;//位置左移 left = position_y-ridus; right = position_y+ridus; } if( input == 'd' || input == 'D' ) { position_y++; left = position_y - ridus; right = position_y + ridus; } } } int main(void) { startup();//数据的初始化 while(1) { show();//显示画面 updateWithoutInput();//与用户输入无关的更新 updateWithInput();//与用户输入有关的更新 } return 0; } 

效果图如下:
c语言实现弹跳的小球,弹跳打中砖块消失

五、添加砖块并实现打砖块操作

代码如下:

#include<stdio.h> #include<string.h> #include<conio.h> #include<windows.h> //全局变量 int high,width; //游戏画面大小 int ball_x,ball_y;//小球的坐标 int ball_vx,ball_vy;//小球的速度 int position_x,position_y;//挡板的中心坐标 int ridus;//挡板的半径大小 int left,right;//挡板的左右位置 int ball_number;//反弹小球的次数 int block_x1,block_y1;//砖块1的位置 int block_x2,block_y2;//砖块2的位置 int block_x3,block_y3;//砖块3的位置 int score;//消掉砖块的个数 void gotoxy(int x,int y)//将光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } void startup()//数据的初始化 { high = 15; width = 20; ball_x = 0; ball_y = width/2; ball_vx = 1; ball_vy = 1; ridus = 5; position_x = high; position_y = width/2; left = position_y -ridus; right = position_y + ridus; ball_number=0; block_x1 = 0; block_y1 = 1; block_x2 = 0; block_y2 = 2; block_x3 = 0; block_y3 = 3; score=0; } void show()//显示画面 { gotoxy(0,0);//光标移动到原点位置,以下重画清屏 int i,j; for(i=0;i<=high+1;i++) { for(j=0;j<=width;j++) { if( ( i == ball_x) && ( j == ball_y ) ) printf("O");//输出小球 else if( j == width) printf("+");//输出右边框 else if( i == high+1) printf("-");//输出下边框 else if ( (i==high)&&(j>=left)&&(j<=right)) printf("*"); else if( (i==block_x1) && (j==block_y1) ) printf("A");//输出砖块1 else if( (i==block_x2) && (j==block_y2) ) printf("B");//输出砖块2 else if( (i==block_x3) && (j==block_y3) ) printf("C");//输出砖块3 else printf(" ");//输出空格 } printf("\n"); } printf("反弹小球数:%d\n",ball_number); printf("消掉的砖块数: %d\n",score); } void updateWithoutInput()//与用户输入无关的更新 { if( ball_x == high -1) { if( (ball_y>=left) && (ball_y<=right) )//被挡板挡住了 { ball_number++; printf("\a");//响铃 } else { printf("游戏失败\n"); system("pause"); exit(0); } } if( (ball_x == block_x1) && (ball_y ==block_y1) )//小球击中砖块1 { score++;//分数加1 block_y1=rand()%width;//产生新的砖块 while((block_y1==block_y2) || ( block_y1==block_y3)) //当新产生的砖块和其他砖块重合时 { block_y1=rand()%width;//产生新的砖块 } } if( (ball_x == block_x2) && (ball_y ==block_y2) )//小球击中砖块2 { score++;//分数加1 block_y2=rand()%width;//产生新的砖块 while((block_y2==block_y1) || ( block_y2==block_y3)) //当新产生的砖块和其他砖块重合时 { block_y2=rand()%width;//产生新的砖块 } } if( (ball_x == block_x3) && (ball_y ==block_y3) )//小球击中砖块3 { score++;//分数加1 block_y3=rand()%width;//产生新的砖块 while((block_y3==block_y1) || ( block_y3==block_y2)) //当新产生的砖块和其他砖块重合时 { block_y3=rand()%width;//产生新的砖块 } } ball_x = ball_x + ball_vx; ball_y = ball_y + ball_vy; if( (ball_x == 0 ) || (ball_x == high-1 )) ball_vx = -ball_vx; if( (ball_y == 0 ) || (ball_y == width-1 )) ball_vy = -ball_vy; Sleep(66); } void updateWithInput()//与用户输入有关的更新 { char input; if(kbhit()) { input = getch(); if( input == 'a' || input == 'A' ) { position_y--;//位置左移 left = position_y-ridus; right = position_y+ridus; } if( input == 'd' || input == 'D' ) { position_y++; left = position_y - ridus; right = position_y + ridus; } } } int main(void) { startup();//数据的初始化 while(1) { show();//显示画面 updateWithoutInput();//与用户输入无关的更新 updateWithInput();//与用户输入有关的更新 } return 0; } 

效果图如下:
c语言实现弹跳的小球,弹跳打中砖块消失

本文地址:https://blog.csdn.net/qq_46527915/article/details/107570443