【コラム】
今回はアスキーアートを作成するプログラムを作ってみます。アスキーアートとは、テキスト文字だけを使って絵を表現するものです。顔文字などもアスキーアートの一つと言えます。テキストが主体であるメールや掲示板におけるコミュニケーションでは、アスキーアートを使うことによって文章を優しく見せたり語句を強調させることができ、よく使われています。
しかし、こうしたアスキーアートを作るために、手作業で記号を入力するのは非常に大変です。そこで、グラフィックソフトのように操作して文字を配置できるような「アスキーアート・エディタ」を作ってみましょう。
まずは、どんな操作でアスキーアートを作るのか、画面設計を考えてみます。テキストが入力できるWindows標準のテキストエディタを利用して、そのエディタの任意の位置に記号を挿入できれば都合が良いのですが、この方法だと、Windowsが提供するエディタを高度に操作する必要が出るので、プログラムが難しくなってしまいます。
そこで、画面の上半分にグラフィックソフトのようなグリッドを作り、そこにコマを配置するようにします。さらに、グリッドに描画した結果を、画面下半分のテキストエディタに反映させるようにします。
こうすれば、ユーザーはグリッドへマウスで絵を描くように描画を行うことができ、また、Windows標準のエディタを操作することなく、結果表示だけをテキストエディタに出力するということができるというわけです。
|
|
上側のグリッドにコマを配置すると画面下部のエディタに反映されます |
画面設計に応じてプログラムを作っていきます。プログラムは大きく分けると、前半、後半の2つからなります。まず、プログラムの前半では、グリッドを描いたり、エディタを作ったりと画面を描画するようになります。そして、後半はユーザーがマウスを操作しマウスボタンを押した時にどうするのかというプログラムを作ります。では、箇条書きでまとめてみます。
アスキーアートとは、テキストデータの連続なので、テキストデータを使ってデータを操作することになります。こうした縦(列)と横(行)のあるデータを扱うとき、右からC文字目、上からR文字目の文字を知りたいと思ったら、(R×横文字数+C)文字目の文字を操作するという計算を行う必要があります。
しかし、列と行のある二次元のグリッド上のデータ操作ならば、二次元配列変数を利用することができます。「変数名【行,列】=値」の書式で二次元配列変数を操作することで、グリッドのデータを管理するのです。
また、なでしこなら、二次元配列変数をカンマ「,」で区切ったCSV形式に変換することができます。アスキーアートとして出力する場合には、CSV形式からカンマ「,」を消したものを使えばよいということです。
以下が実際のなでしこのプログラムです。(バージョン1.395で動作確認しています)
1行目から2行目では、表示するフォントの書体やサイズ、色などを指定しています。
3行目では、結果メモという名前でテキストエディタを作っています。そして、その大きさを画面の下半分になるように指定します。
4行目から6行目では、画面へグリッドを描画しています。「繰り返す」構文を入れ子状に配置し、左上から右下へと繰り返しグリッドのマスを描画しています。また、二次元配列変数変数「結果【行,列】」を「□」で初期化しています。
7行目以降ではマウスを押した時、どうするのかを定義しています。
8行目では、マウスのX座標、Y座標を、グリッドの幅であるWで割り算し、何番目のグリッドがクリックされたのかを得ます。「INT」関数は数値の小数点以下を切り捨てる命令です。
9行目では、画面と二次元配列変数「結果」を更新しています。そして、10行目で二次元配列変数「結果」をCSV形式に変換し、これのカンマを消して、画面下部にあるエディタに表示します。
今回の10行プログラムでは、■と□だけのアスキーアートしか作れません。しかし、これでは、メールマガジンのタイトルを作ることくらいしかできないでしょう。もっといろいろな文字が利用できるようにし、「アスキーアート作成エディタ」という名に恥じないものを作りたいものです。
そして、操作感に関しても、10行ではコマを置くことしかできなかったので、コマを消すことができるようにします。アイコンエディタに採用されているようなインタフェースを参考にして、以下のように操作できるようにしてみました。
以下は50行になってしまいましたが、マウス操作を改良し、ペンの種類に●や▼を置けるようにしたプログラムです。
030.nako
|
|
「アスキーアート作成エディタ改良版」を作ってみました |
これを、さらに改造するなら、アスキーアートの縦横の大きさの指定や、さらに使える文字種類を増やしてみてはどうでしょうか。また、ファイルへの読み込み・保存に対応も必要でしょう。CSV形式で読み込み、保存の処理を作れば良いので2、3行追加することで対応できますね。
それでは、今回もいろいろと改良して、自分だけのアスキーアートエディタを作ってみてください。
| 【レポート】マカフィーの世界の専門家の意識調査「サイバー防衛報告書」とセキュリティソリューション [21:15 5/25] |
| アップル、Aperture 3.2.4を公開 - バグ修正、安定性向上など [20:51 5/25] |
| 【レポート】GTC 2012 - VGXでエンタープライズ環境でのGPU需要開拓を狙うNVIDIA [20:07 5/25] |
| デル、期間限定キャンペーンに特価アイテム追加、アップグレード無料も継続 [19:41 5/25] |
| 上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
|
「ゆりてつ」サイン会は作者と都電に揺られるツアー仕立て [17:45 5/27] ホビー |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |