C言語ケーススタディ 文字表示で作ったゲームの基礎(画面の好きな位置に文字を表示)




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



キー入力に続き、画面上の自由な位置に文字を表示させます。

通常文字表示にはprintf()関数を使っていたと思いますが、文字はカーソルの位置から表示され画面は上へ流れてしまいます。 これでは簡単なゲームも作ることができません。しかし、Study C、Windowsのコマンド プロンプト、UNIXの端末など多くの環境で手軽に表示位置を制御する方法があります。 表示自体はprintf関数を使います。次のプログラムを実行してみてください。

※コマンド プロンプトでこの機能が使えるかどうかはANSI.SYSドライバが組み込まれているかによります。
Windows 7移行では何かフリーソフトなどを用意する必要があるようです。 無料で使えるStudy Cをインストールして試してみてください。

main()
{
        printf("\033[10;20HABCDEFG");
        getch();
}

画面の左上から下に10、右に20の位置にABCDEFGという文字が表示されます。 "\033[10;20H"という部分が表示位置を指定しています。最初の10で縦方向の何行目かを指定し次の20で横方向の何文字目かを指定しています(通常の座標の表記とは順番が逆なので注意してください)。 "\033"というのは、8進数形式で表現した特殊な文字でこれから通常の表示とは違う制御データを送ることを知らせるために使用しています。

変数にセットしてある座標を使用して位置を指定することもできます。

main()
{
        int     x, y;

        x = 40;
        y = 10;
        printf("\033[%d;%dHABCDEFG", y, x);
        getch();
}

ゲームでキャラクターを移動させるためには、次に描く前に、前に描いたものを消しておく必要があります。 カーソルの右を消すなどいろいろな制御方法がありますが、もっとも簡単な方法を使用します。 同じ位置にカーソルを移動して同じ文字数分空白を描いてしまえば、画面中から文字は消えてくれます。

main()
{
        printf("\033[%d;%dHABCDEFG", 10, 20);
        getch();
        printf("\033[%d;%dH       ", 10, 20);
        getch();
        printf("\033[%d;%dHabcdefg", 10, 40);
        getch();
        printf("\033[%d;%dH       ", 10, 40);
        getch();
}