C++旧版课程库
C++第 2 期查看课程总览

046 实践 - 移动动画

主要内容

1. 坐标

1.1 生活中的坐标

在生活中,我们是怎么确定自己的位置呢? 其实我们无形中,使用了一个概念,叫做“坐标”。 为了方便说明,我们用象棋的棋盘,来做一个简单说明。 假设,每个格子的长宽都是1。横轴用X表示,纵轴用Y表示, 则每个棋子的位置,可以用坐标(x,y)表示。 请试着说出,“红炮”和“黑卒”的坐标。

/*





*/
参考答案:

红炮  (3, 3)
黑卒  (-1, 2)

1.2 屏幕中的坐标

习惯上,我们依然将横轴用X表示,纵轴用Y表示, 则每个字符的显示位置,也可以用坐标(x,y)表示。 有了这样的基本约定,我们就可以尝试着,在屏幕上移动字符,做一个动画。

2. 在指定位置显示星号

请编程,在窗口坐标(10,5)的位置,显示一个星号(*)。

/*
请编程完成后,查看示例程序。





*/
示例程序:

#include < iostream > 
int main()
{
    int x(10), y(5);
    for(int j=0; j <= y; j++)    // 移动到第 5 行
        std::cout << std::endl;
    
    for(int i=0; i <= y; i++)    // 移动到第 10 列
        std::cout << " " ;
        
    std::cout << "*";
    
    return 0;
}

3. 移动字符

结合上节课学到的知识,尝试实现:星号逐渐向上移动的效果。 提示:可以使用 system("cls") 和 Sleep();

/*
请编程完成后,查看示例程序。





*/
示例程序:

#include < iostream > 
#include < Windows.h >
int main()
{
    // 定义点的初始位置 
    int x(10), y(5);
    for(int k=0; k <= 5; k++)
    {
        // 1. 清除屏幕		
        system("cls");
        
        // 2. 变换下一次点的位置 
        x = 10;
        y = y-1;
        
        // 3. 绘制星号 
        for(int j=0; j <= y; j++)
            std::cout << std::endl;

        for(int i=0; i <= x; i++)
            std::cout << " " ;
            
        std::cout << "*";	
        
        // 4. 延时 
        Sleep(200);
    }
    return 0;
}

习题

课后练习