13. 屏幕操作

在本节中,我们将研究一些函数,这些函数使我们能够有效地管理屏幕并编写一些精美的程序。这在编写游戏时尤其重要。

13.1. getyx() 函数

函数getyx()可以用来找出当前光标的坐标。它将在给它的参数中填充 x 和 y 坐标的值。由于 getyx() 是一个宏,你不需要传递变量的地址。它可以像这样调用:

    getyx(win, y, x);
    /* win: window pointer
     *   y, x: y, x co-ordinates will be put into this variables 
     */

getparyx() 函数获取子窗口相对于主窗口的起始坐标。这有时对于更新子窗口很有用。在设计花哨的东西,如编写多个菜单时,存储菜单位置、它们的第一个选项坐标等变得困难。解决这个问题的一个简单方法是在子窗口中创建菜单,然后使用 getparyx() 找到菜单的起始坐标。

getbegyx() 和 getmaxyx() 函数存储当前窗口的起始和最大坐标。这些函数在有效管理窗口和子窗口方面与上面提到的方法类似地有用。

13.2. 屏幕转储

在编写游戏时,有时需要存储屏幕的状态并将其恢复到相同的状态。scr_dump() 函数可以用来将屏幕内容转储到作为参数给出的文件中。稍后可以使用 scr_restore 函数恢复它。这两个简单的函数可以有效地用于维护具有不断变化场景的快速移动的游戏。

13.3. 窗口转储

为了存储和恢复窗口,可以使用以下函数putwin()getwin()可以使用。putwin()将当前窗口状态放入文件,稍后可以通过以下方式恢复getwin().

函数copywin()可以用来将一个窗口完整地复制到另一个窗口上。它以源窗口和目标窗口作为参数,并根据指定的矩形,将矩形区域从源窗口复制到目标窗口。它的最后一个参数指定是覆盖还是仅将内容叠加到目标窗口上。如果此参数为真,则复制是非破坏性的。