作者:吴力强尹泽楠1991 | 来源:互联网 | 2023-09-18 15:22
本文项目为大家分享了C语言用数组实现反弹球消砖块的具体代码,供大家参考,具体内容如下
一、效果展示:
二、代码如下:
#include
#include
#include
#include
#include
#define High 24 //游戏画面尺寸
#define Width 36
//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int canvas[High][Width]={0};
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右大小
int score=0;//分数
//二维数组存储游戏画布中对应的元素
//0为空格,1为小球 2为挡板 3为砖块(1分) 4为砖块(2分) 5为砖块(3分)
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() //数据的初始化
{
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=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;
//更新小球的坐标
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()//与用户输入有关的更新
{
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。