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;
}
結果:
(※ 実際にプログラムを実行すると、グルグルと回転する顔文字が表示されて面白いです^^;)
アニメーション表示コードの解説
以下は、説明用に行番号を振ったものです。
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()は、キー入力があると、ループから抜け出してプログラムが終了する為のコードです。