#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include <time.h>
#include <dos.h>
#define VX 1 //纵向速度
#define VY 1 //横向速度
#define Bang 10 //挡板长度
#define Speed 3 //小球运动速度 //鸡数
#define Kuai 25 //砖块数
int high,width;
int ball_x,ball_y;
int ball_vx,ball_vy; //小球的速度
int tnum,bnum,fnum;
int kuai_x[Kuai],kuai_y[Kuai]; //方块
int isdead;
int bang_y;
int speed;
void gotoxy(int x, int y) //光标移动到x,y位置
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos); //两个参数分别是指定哪个窗体,具体位置
}
void HideCursor() // 用于隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//函数和结构体都在windows.h中定义。
}
void startup()
{
HideCursor();
srand(time(NULL));
high=24 ;
width=40;
bang_y=width/2;
ball_x=1;
ball_y=width/2;
ball_vx=VX;
ball_vy=VY;
for(int i=0;i<Kuai;i++)
{
kuai_x[i]=rand()%high/2;
kuai_y[i]=rand()%width-1;
}
tnum=0;
bnum=0;
fnum=0;
isdead=0;
speed=0;
}
void show()
{
gotoxy(0,0);
for(int i=0;i<high;i++)
{
for(int x=0;x<width+1;x++)
{
for(int y=0;y<Kuai;y++)
{
if(i==kuai_x[y]&&x==kuai_y[y])
{
printf("#");
x++;
}
}
if(i==ball_x&&x==ball_y)
printf("O");
else printf(" ");
}
printf("|\n");
}
for(int i=0;i<width+1;i++)
{
// printf("%d %d\n",bang_y,Bang);
if(i<bang_y+Bang/2&&
i>bang_y-Bang/2) printf("*");
else if(high==ball_x&&i==ball_y)
printf("O");
else printf(" ");
}
printf("|\n");
for(int x=0;x<width+1;x++)
{
printf("-");
}
printf("-\n");
printf("小球反弹数:%d\n",tnum/Speed);
printf("挡板反弹数:%d\n",bnum/Speed);
printf("小球得分:%d\n",fnum);
if(isdead==1)
{
printf("呜呜,失败了\n");
system("pause");
exit(0);
}
}
void updatewithoutinput()
{
if(speed<Speed) speed++;
if(speed>=Speed)
{
ball_x=ball_x+ball_vx;
ball_y=ball_y+ball_vy;
speed=0;
}
//实现反弹
if(ball_x<=0)
{
ball_vx*=-1;
tnum++;
}
if(ball_x==high-1&&ball_y<=bang_y+Bang
/2&&ball_y>=bang_y-Bang/2)
{
ball_vx*=-1;
tnum++;
bnum++;
}
for(int i=0;i<Kuai;i++)
{
if(ball_x==kuai_x[i]&&ball_y==kuai_y[i])
{
ball_vx*=-1;
ball_vy*=-1;
tnum++;
fnum++;
kuai_x[i]=rand()%high/2;
kuai_y[i]=rand()%width-1;
ball_vx=rand()%1+1;
ball_vy=rand()%1+1;
}
}
if(ball_x>=high)
{
isdead=1;
// ball_vx*=-1;
}
if(ball_y>=width-1||
ball_y<=0)
{
//ball_
ball_vy*=-1;
tnum++;
}
// Sleep(100);
}
void updatewithinput()
{
char input;
if(kbhit())
{
input=getch();
if(input=='a') bang_y--;
if(input=='d') bang_y++;
if(bang_y+Bang/2>width+1)
bang_y=width-Bang/2+1;
if(bang_y-Bang/2<-1)
bang_y=Bang/2-1;
}
}
int main()
{
startup();
while(1)
{
show();
updatewithoutinput();
updatewithinput();
}
return 0;
}