#include
#include
#include
#include
//定义
#define WIDTH 40
#define HEIGHT 20
#define SPACE 0
#define VEDGE 1
#define HEDGE 2
#define BALL 3
#define BAFFLE 4
#define BRICK 5
#define RIGHT 1
#define DOWN 1
#define UP -1
#define LEFT -1
int area_height;//游戏区域 0-n-1
int area_width;
int ball_col, ball_row;//小球位置
int ball_vv, ball_vh;//小球速度
int baffle_col, baffle_row;//挡板位置
int baffle_size;//挡板尺寸
int brick_col, brick_row;//
int canvas[HEIGHT+1][WIDTH+1] = { 0 };//画布,游戏区域
bool pause;
int score;//积分
bool isLose;//是否已经失败
void gotoxy(int x, int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void HideCursor()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
SetConsoleCursorInfo(handle, &cursor_info);
}
//初始化
void startup()
{
area_height = HEIGHT;
area_width = WIDTH;
ball_row = area_height / 2;
ball_col = area_width / 2;
ball_vv = DOWN;
ball_vh = RIGHT;
baffle_col = area_width / 2;
baffle_row = area_height - 1;
baffle_size = 5;
brick_col = rand() % area_width;
brick_row = 0;
score = 0;
isLose = false;
pause = true;
//数据进行处理,canvas数组
//...
int i, j;
for (i = 0; i <= HEIGHT; i++)
for (j = 0; j <= WIDTH; j++)
{
canvas[i][j] = SPACE;
// if (i < 3)
// canvas[i][j] = BRICK;
if (j == WIDTH)
canvas[i][j] = VEDGE;
if (i == HEIGHT)
canvas[i][j] = HEDGE;
}
canvas[brick_row][brick_col] = BRICK;
canvas[ball_row][ball_col] = BALL;
for (i = baffle_col; i < baffle_col + baffle_size; i++)
canvas[baffle_row][i] = BAFFLE;
}
//显示
void show()
{
int i, j;
gotoxy(0, 0);
for (i = 0; i <= HEIGHT; i++)//
{
for (j = 0; j <= WIDTH; j++)//
{
if //(ball_row == i && ball_col == j)
(canvas[i][j]==BALL)
printf("O");//小球
else if (canvas[i][j]==HEDGE)
printf("-");//边界
else if (canvas[i][j]==VEDGE)
printf("|");//边界
else if (canvas[i][j]==BAFFLE)
printf("=");//挡板
else if (canvas[i][j] == BRICK)
printf("#");//砖块
//SPACE
else printf(" ");
}
printf("n");
}
printf("score:%dn", score);
}
//等待用户的输入,交互
void updateWithInput()
{
int i;
for (i = baffle_col; i < baffle_col + baffle_size; i++)
canvas[baffle_row][i] = SPACE;
char input;
if (kbhit()) {
input = getch();
switch (input)
{
case 'a': if (baffle_col>0)
baffle_col--;
break;
case 'w': if (baffle_row>0)
baffle_row--;
break;
case 'd': if (baffle_col= baffle_col &&
ball_col < baffle_col + baffle_size)
ball_vv =UP;
if (ball_row == brick_row + 1 && ball_col == brick_col)
{//击中砖块
canvas[brick_row][brick_col] = SPACE;
//ball_vv *= -1;
ball_vv = DOWN;
brick_col = rand() % area_width;
brick_row = 0;
canvas[brick_row][brick_col] = BRICK;
score++;
}
static int count = 0;
count++;
if (count == 3)
{//小球的更新
canvas[ball_row][ball_col] = SPACE;
ball_col += ball_vh;
ball_row += ball_vv;
canvas[ball_row][ball_col] = BALL;
count = 0;
//从下方掉出游戏区域
if (ball_row >= area_height)
isLose = true;
}
}
int main()
{
HideCursor();
startup();
while (1)
{
show();
updateWithInput();
if (!pause)
{
updateWithoutInput();
}
if (score == 10)
{
printf("过关了,恭喜n");
break;
}
if (isLose == true)
{
printf("你被击败了,重新来过n");
break;
}
}
system("pause");
return 0;
}