1

graphics.hを利用したゲームを作りました。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値が負になった瞬間に、画面への印刷が停止します。

4

1 に答える 1

1

出力をクリップする必要があります。このようにラップ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);
}
于 2013-03-25T12:02:29.483 に答える