TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【C言語】Windowsコンソールでのアニメーション表示

C言語のコンソールウィンドウでアニメーション(もどき)を表示する方法です。
(※ Windows環境専用)

#include <stdio.h> #include <conio.h> // for _kbhit() #include <windows.h> // for sleep(); int main(void) { unsigned int i; char * szAnimeText[] = { "(゚Д゚;) ", "( ゚Д) ***** ", "(  ゚) ********** ", "(   ) ***************", "(゚;  ) ********** ", "(Д゚; ) ***** ", }; for (i=0; ; i++) { printf("%s\r", szAnimeText[i%6]); Sleep(100); if (_kbhit()) { break; } } return 0; }
結果: C言語でアニメーション(windowsコンソール) (※ 実際にプログラムを実行すると、グルグルと回転する顔文字が表示されて面白いです^^;)

アニメーション表示コードの解説

以下は、説明用に行番号を振ったものです。
1 : #include <stdio.h> 2 : #include <conio.h> // for _kbhit() 3 : #include <windows.h> // for sleep(); 4 : 5 : int main(void) 6 : { 7 : unsigned int i; 8 : 9 : char * szAnimeText[] = { 10 : "(゚Д゚;) ", 11 : "( ゚Д) ***** ", 12 : "(  ゚) ********** ", 13 : "(   ) ***************", 14 : "(゚;  ) ********** ", 15 : "(Д゚; ) ***** ", 16 : }; 17 : 18 : for (i=0; ; i++) { 19 : printf("%s\r", szAnimeText[i%6]); 20 : Sleep(100); 21 : 22 : if (_kbhit()) { 23 : break; 24 : } 25 : } 26 : 27 : return 0; 28 : }
「アニメーションの原理は、ノートの端に描いたパラパラ漫画と同じ」という事は、周知の事実^^;) というわけで、まずはアニメーション表示の元となるテキストを、配列のポインタという形で宣言します。(9~16行目) そして、ループ(18~25行目)内で表示します。 このプログラミングの肝は、 19行目の \r (キャリッジリターン)と、i%6 (ループカウンタ % (配列のMax要素数 + 1))、 そして、アニメーションテキスト配列の文字列長が、全て同じという点です。 まず \rは、\n (ラインフィード:改行)とは異なり、カーソル位置を現在行の先頭に移動させます。 そして、ループカウンタ % (配列のMax要素数 + 1) を指定する事で、      0, 1, 2, ... 配列のMax要素数, 0, 1, 2, ... が 周期的に繰り返されます。 よって、「アニメーションテキスト配列の内容が、繰り返し同じ場所に、次々と表示され、アニメーションが表示される」というわけです。 また、20行目のSleep(100)で、100ミリ秒間隔で表示が切り替わるようにしており、 22~24行目の_kbhit()は、キー入力があると、ループから抜け出してプログラムが終了する為のコードです。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ