实现一个小球碰到方框边界反弹的效果。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ROW 15
#define COL 40
//初始化盒子
void init_box(char bg[][COL], char ch)
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1)
{
bg[i][j] = ch;
}
else
{
bg[i][j] = ' ';
}
}
}
}
void show_box(char bg[][COL], int color)
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (bg[i][j] == 'o')
{
printf("\033[%dmo\033[0m", color);
}
else
putchar(bg[i][j]);
}
putchar(10);
}
}
int main(int argc, char **argv)
{
int x = 3, y = 3, x_inc = 1, y_inc = -1, color = 31;
char bg[ROW][COL];
system("clear");
while(1)
{
printf("\033[1;1H");
init_box(bg, '#');
//判断是否碰到上界(x < 1)或者下界(x > ROW - 2)
if (x < 1 || x > ROW - 2)
{
x_inc = -x_inc;
color = rand() % 7 + 31;
}
if (y < 1 || y > COL - 2)
{
y_inc = -y_inc;
color = rand() % 7 + 31;
}
bg[x][y] = 'o';
x += x_inc;
y += y_inc;
show_box(bg, color);
usleep(100000);
}
return 0;
}
运行结果: