C语言实现使用字符模拟跑马灯效果

/******************************************
 * 文件名:circleChar.c
 * 功能描述:使用字符模拟跑马灯效果-Linux平台下
 * 编辑人:王廷云
 * 编辑日期:2017-10-10
 * 修改日期:2018-1-12
*******************************************/
#include 
#include 

#define  NR  5   // 数组的维数

/* 功能函数声明 */
void showArray(char ar[NR][NR]); // 显示数组结果
void moveArray(char ar[NR][NR]); // 旋转数组

/* 程序从主函数开始
 * 思路:
 * 显示数组->延时一段时间->顺时针移动数组->显示数组(如此反复)
*/
int main(int argc, char **argv)
{
    /* 待显示数组 */
    char ar[NR][NR] = {
    "01234",
	"f   5",
	"e   6",
	"d   7",
	"cba98",
    };

	/* 初始化屏幕 */
    fprintf(stdout, "\033[2J\n");	// 清屏

    /* 进入循环跑马灯效果 */
    while (1)
    {
        showArray(ar); // 显示数组

    	usleep(500000);// 等待一段时间

	    moveArray(ar); // 旋转数组
    }

    return 0;          // 由于是死循环所以无法到达这里,只能强制结束程序
}

/*
 * 函数名:showArray
 * 函数功能:显示移动后的数组
 * 参数:待显示的数组
 * 返回值:无
*/
void showArray(char ar[NR][NR])
{
    int x, y;

	/* 设置显示效果 */
    fprintf(stdout, "\033[1;1H");	// 定位到第一行第一列
    fflush(stdout);					// 刷新

	/* 循环打印数组所有元素 */
    for (y = 0; y < NR; y++)
    {
        for (x = 0; x < NR; x++)
		{
	    	fprintf(stdout, "\033[1;32m%c", ar[y][x]);
		}
		fputc('\n', stdout);
    }
}

/*
 * 函数名:moveArray
 * 函数功能:对数组元素进行顺时针旋转移动
 * 参数:待移动的数组
 * 返回值:无
*/
void moveArray(char ar[NR][NR])
{
    char temp;
    int i;

    /* 提取第一个元素 */
    temp = ar[0][0];

    /* 移动第一列 */
    for (i = 1; i < NR; i++)
    {
        ar[i-1][0] = ar[i][0];  	 // 第一列所有元素往上移动
    }

    /* 移动最后一行 */
    for (i = 1; i < NR; i++)
    {
        ar[NR-1][i-1] = ar[NR-1][i]; // 最后一行所有元素往左移动
    }

    /* 移动最后一列 */
    for (i = NR-2; i >= 0; i--)
    {
        ar[i+1][NR-1] = ar[i][NR-1]; // 最后一列所有元素往下移动
    }

    /* 移动第一行 */
    for (i = NR-2; i >= 1; i--)
    {
        ar[0][i+1] = ar[0][i];		 // 第一行所有元素往右移动
    }
	
	/* 放好最开始提取的元素 */
    ar[0][1] = temp;				 
}

你可能感兴趣的:(C语言)