AA C/C++

【C言語/C++】コンソールでAAアニメーション

更新日:

スポンサードリンク

AAアニメーション


コンソール上でAA(アスキーアート)のアニメーションをさせます。

手順としてはパラパラ漫画になる文字列を複数用意します。そして、コンソールに一つのコマを表示させ、指定秒後にそれを消して、次のコマを表示させるというのをずっと繰り返します。

ここでコンソールの文字を消す方法ですが、

①printfの際に末尾に特殊文字(エスケープシーケンス)の「\r」を使う
②windows.hを使って、system("cls")とする

というものがあります。
2番目の方法は内部コマンドを呼び出しているようなので少し時間がかかってしまいおすすめできません。なので今回はなるべく行の先頭に復帰するというエスケープ文字「\r」を使ってやります。(※エスケープ文字はOSによって挙動が若干異なるようです。今回はWindowsを利用しています。)

ただし、このエスケープ文字はその行の先頭に戻るだけなので改行をまたぐと効果は無くなってしまいますので1行の文字列からなるアニメーションのみでしか使えないという所に注意が必要になります。

また、指定秒停止させる方法ですが、これはwindows.hのSleep関数に指定のミリ秒を引数とすることでその間だけ停止させることができます。

とりあえず簡単なサンプル

#include<stdio.h>
#include<windows.h>
int main(void){
	while (1) {
		printf("(_ _ )   \r");
		Sleep(500);
		printf("(_ _ )Z  \r");
		Sleep(500);
		printf("(_ _ )ZZ \r");
		Sleep(500);
		printf("(_ _ )ZZZ\r");
		Sleep(1000);
	}
}
zzzaa.gif

ここで気を付けなければならないのは画面がリフレッシュされるわけではなく、単に書き出し位置を先頭に戻しているだけなので文字の長さは同じにしておかないと前に出力された文字がそのまま表示されてしまうということです。
また、これは1行だけ戻るだけなので2行以上でなるAAアニメーションはsystem("cls")を使わなければならないです。
とりあえずそのサンプルを作成しました。

使うAAのテキストデータ(クリックでダウンロード)」をファイル読み込みをして、各コマを文字配列(2次元)に格納した後に繰り返し文で表示⇒消去⇒表示⇒…を繰り返します。

AA文字の表示ではフォントが大事になってくるのでコンソール画面の文字フォントを「MS Pゴシック」に変更します。これについてはこちらの「cmd.exe(コマンド プロンプト)のフォントを変更する」の記事が非常に参考になりました。

caaimg3.jpg
↑再起動すると追加されています

#include<stdio.h>
#include<windows.h>
int main(void){
	FILE *fp;
	char buf[2048]={0};//サイズは適当。あまり大きくしすぎると止まる
	char aa[20][2048]={0};//ここに各コマを入れる
	int count = -1;
	int i=0;
	//AAファイルの読み込み
	if((fp=fopen("aa.txt","r"))!=NULL){
		while(fgets(buf,2048,fp)!=NULL){
			//「投稿」の文字の含まれる行で区切られている
			if(strstr(buf,"投稿")!=NULL){
				count++;
			}
			if(count>=0){
				//1コマ分までくっつける
				strcat(aa[count],buf);
			}
		}
		fclose(fp);
		while(1){
			//1コマを表示
			printf("%s",aa[i++]);
			//一時停止
			Sleep(100);
			//画面をクリア
			system("cls");
			if(i>count){
				i=0;
			}
		}
	}
	return 0;
}
caa0.gif

コンソール画面の幅が狭いせいでところどころ変な改行が出現してしまっているので幅を広くします。

caaimg1.jpg
↑画面上右クリックでプロパティを選択

caaimg2.jpg
↑画面サイズを広げます

caa1.gif

結構改善されました。
ここまで見てC言語でやる必要ないと思われるかもしれないのでjavascript版も用意しました。

スポンサードリンク
Amazonリンク
参考:mementoo.info

-AA, C/C++

Copyright© めめんと , 2020 All Rights Reserved Powered by AFFINGER5.