7

更简单的生活

我将返回 C 来帮助重振我的编程领域。我上一次学习编程是在大学里,我在 MSDOS 上使用 Turbo C。一旦我发现 Borland 的友好动画包含了,简单的 ASCII 动画就变成了一种痴迷<conio.h>gotoxy和函数带来了很多乐趣,textcolor不久之后我开始编写像蛇和乒乓球这样的游戏。这是学习语言的一种非常有益的方式,随着我的野心越来越大,每场比赛都让我更进一步。

诅咒

我想从类似的游戏类型项目开始。不过,今天,我在一台 Mac 上,角落里有一台满是灰尘的 linux 机器。我可以在 dosbox(一个无处不在的平台)中启动我心爱的 Turbo C,但我想学习 C,以便我可以开发可以在任何 BSD 或 unix 平台上自然编译的东西。有人告诉我 ncurses 是前进的方向,但 GNU 站点在很大程度上超出了我的想象。回到那天我有我的友好textmode功能,我是一个print远离乒乓球的表达方式。ncurses 似乎更强大。

嗖嗖

应该有很多人遇到过这种情况。我正在寻找相关的教程或资源,以帮助我了解 ncurses 是什么以及如何使用它。任何提示或类似的故事也会很有趣!

4

4 回答 4

5

是的,ncurses就是你要找的图书馆。例如,下面是 (n)curses 的等价物gotoxy

姓名

move, wmove - 移动诅咒窗口光标

概要

   #include <curses.h>

   int move(int y, int x);
   int wmove(WINDOW *win, int y, int x);

描述

这些例程将与窗口关联的光标移动到第 y 行和第 x 列。在调用刷新之前,该例程不会移动终端的物理光标。指定的位置相对于窗口的左上角,即 (0,0)。

附录:

在您的评论中,您询问了 curses windows - 我认为我无法真正改进 ncurses 手册页对此的内容,所以我将引用它:

ncurses 库允许对称为窗口的数据结构进行操作,可以将其视为代表 CRT 屏幕的全部或部分的二维字符数组。提供了一个名为 stdscr 的默认窗口,它是终端屏幕的大小。其他的可以用 newwin 创建。

请注意,curses 不处理重叠窗口,这是由 panel(3CURSES) 库完成的。这意味着您可以使用 stdscr 或将屏幕划分为平铺窗口,而根本不使用 stdscr。将两者混合会导致不可预测和不希望的效果。

Windows 由声明为 WINDOW * 的变量引用。这些数据结构使用此处和 ncurses 手册页中其他地方描述的例程进行操作。其中,最基本的例程是move和addch。这些例程的更通用版本包含以 w 开头的名称,允许用户指定一个窗口。不以 w 开头的例程会影响 stdscr。

在使用例程操作窗口后,调用 refresh,告诉 curses 使用户的 CRT 屏幕看起来像 stdscr。窗口中的字符实际上是 chtype 类型(字符和属性数据),因此有关字符的其他信息也可以与每个字符一起存储。

因此,总而言之,您可以放心地忽略整个窗口,而只使用 stdscr 窗口。

于 2009-10-27T23:17:51.257 回答
2

好吧,在 BSD 和 Linux 等类 UNIX 系统上,ncurses如果您不这样做,您肯定希望将其用作终端仿真器,这会让您的生活变得非常痛苦。

您可能应该为自己编写一个简单的包装器,其中包含您需要的功能并针对不同的操作系统以不同的方式实现它。在 Windows 上,您可以使用一些控制台功能,这样这部分就不会太难了。

于 2009-10-27T16:41:00.017 回答
1

这里有一个小程序可以帮助您入门。

#include <curses.h>

int main(void) {
  int ch;

  /* The whole program needs error-checking */
  initscr();
  noecho();
  cbreak();
  printw("Hit Ctrl+C to exit ...\n\n");
  for (;;) {
    ch = getch();
    printw("Value of char: %d (%02x)\n", ch, ch);
  }
  endwin();
  return 0;
}

记得告诉链接器添加 libcurses 库。

gcc ... -lcurses
于 2009-10-30T21:09:45.443 回答
1

有一个库为 Linux 提供类似控制台 IO 的 Turbo C : TurboC 也相关:CONIO for DevC++

于 2009-11-16T12:00:47.147 回答