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

関連記事

PAK86_codeing20140517500-thumb-500xauto-4601

【C++/CLI】フォームアプリケーションでコンソール画面を出現させる

プロジェクトのプロパティを開いて「構成プロパティ」→「リンカ」→「システム」の「サブシステム」を「コ

記事を読む

PAK15_notepenhikkiyougu20140312500-thumb-500xauto-4327

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

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

記事を読む

PAK86_codeing20140517500-thumb-500xauto-4601

【C言語/C++】配列のまとめ

C/C++を使っていると必ず配列を使う場面が出てくると思いますが、その配列についてまとめました。C言

記事を読む

Window Command Line

コンソールアプリケーションでC++/CLIの関数を使う

今時(?)なかなか使っている人がいるかどうかわかりませんが、VisualStudio(2008)で「

記事を読む

eigen_homepage_img

【C++】行列演算ライブラリEigen

デフォルトのCやC++には行列やベクトルなどの演算ライブラリはありません。なので行列計算などをしよう

記事を読む

LIG_h_dartssurudansei500-thumb-500xauto-3336

OpenCVで矢印を描画する

OpenCVで矢印を描画するという関数が無いみたいだったので作りました。書いていることは参考リンク先

記事を読む

PAK23_husentomemo20140313500-thumb-500xauto-4376

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

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

記事を読む

childish_File

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

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

記事を読む

フォルダ画像

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

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

記事を読む

childish_File

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

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

記事を読む

encodingtype
【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

_rtm0919_tp_v
スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

rssimage
【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

rssimage
フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

computer_server
格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

school_toshokan_hondana
kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

TAKEBE055122558_TP_V
寝る前にスマホを見ると斜視になる可能性とその対策

はじめに  寝る前などスマホを横になりながら見続けると斜視になる可能

→もっと見る

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