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

公開日: : 最終更新日:2014/08/14 AA, C/C++

スポンサーリンク

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
  • このエントリーをはてなブックマークに追加

関連記事

【C言語】printfのような関数を作る

C言語でよくつかわれるprintfでは例えば int a,b,c; … printf(

記事を読む

【C言語/C++】フォルダ作成を行う

C言語、C++でフォルダを作成するには『direct.h』にある『_mkdir』関数を使うことで実現

記事を読む

AAアニメーション

javascriptでAAアニメーションしました。AAは以下のところから参照しました。(AAアニメー

記事を読む

【C言語/C++】余りを求める剰余演算子(%)を使う

基本的なことかもしれませんが、C言語やC++などであまりを出すには剰余演算子である『%』を使います。

記事を読む

【C言語/C++】fgetsを使ってファイルを読み込む

fgetsで単純にファイルを読み取る C言語、C++でfgetsを使ってファイルを読み込む方法です

記事を読む

【C++】ファイルの読み込みまとめ

C++におけるファイル読み込みのまとめ ファイルの開き方 値の取得方法 >>演算子

記事を読む

【C言語】fopenが失敗するエラー

ファイル操作に使うfopenがどうしても失敗してしまい困っていました。既に開かれているファイルを開く

記事を読む

【C言語/C++】ファイルをCSV形式でfprintfを使って保存・書き込みする

数値計算などをC言語でプログラミングするとき、その演算結果をファイルとして保存する必要性がでてくるこ

記事を読む

【ImgToAA】画像をAA化するツール

指定の画像を読み込ませてAA化するツールです。サンプルはこちら。 (使い方) 画像ファイ

記事を読む

【C言語/C++】int整数などの数値をchar配列の文字列に変換する

C++であればstringが使えて非常に便利ですが、C言語で文字列というと基本的にはcharの配列を

記事を読む

【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったので

テレビの録画をPCやNASで共有する

今までテレビはテレビ用のモニターで見ればいいやと思っていたのですが、さ

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑