我做了一个使用图形的游戏。我使用while循环来创建屏幕输出,因此下面示例中的x1值一直减少5。这意味着我一直在创建游戏的所有屏幕,除了while循环继续,玩家只显示他所在屏幕的一部分。这显然是非常低效的,所以我想知道是否有人有更有效的方法来做这件事。我还有一个更具体的问题。。。outtextxy不允许负x值,这意味着

outtextxy(-10,400,"text that is long enough that should be shown on screen even though it starts before screen beginning");

不会出现在屏幕上,所以我的代码是:
outtextxy(x1+301,400,"Use 'd' to duck");

它会在游戏中的屏幕被传递之前停止打印到屏幕,当x值变为负值时,而不是像我希望的那样,当结束字母的x值被传递时。

最佳答案

你需要clip输出。像这样包装outtextxy(您可能需要调整参数和返回值以匹配outtextxy)。我假设你用的是固定宽度的字体。
在x坐标系中剪切文本类似于:

int clippedouttext(int x, int y, char *text) {
  const int CHAR_WIDTH = 8;  /* Replace 8 by actual character width */
  if (text == NULL || *text = '\0') { return 0; }  /* No text was submitted */
  while (x < 0) {
    x += CHAR_WIDTH;
    ++text;
    if (*text == `\0`) { return 0; }  /* The text is outside the viewport. */
  }
  return outtextxy(x, y, text);
}

10-08 09:16