この記事はAsakusa Framework Advent Calendar 2015の23日目です。
入門記事はひしだまさんが大量に書いているので、たまには全く関係ない記事を書いてみようと思います。
YASL(Yet Another sl command) の一大ムーブメント
まずはこちらをご覧頂きたい。
「本物の golang を... 本物の Gopher を、お見せしますよ。」
http://qiita.com/mattn/items/b7889e3c036b408ae8bd
素晴らしい!!
D言語くんといいGopherといい、なんだか愛嬌があっていい。マスコットキャラクターはこうあるべき!!
ここまでリッチなものでなくとも、自分のよく使う言語・フレームワークのマスコットを動かしたくなるというのは人情というものですね。はい、ここから本編です。
そしてAsakusaですよ
なぜ屋形船...浅草なら雷門じゃないのかな...
これを動かしたら愛着湧くんだろうか。半ば義務感にかられる形で作業にとりかかることにします。
AsakusaなのでJavaで作りたかったのですが、調べるの面倒だったのでRubyで作ります。
完成
コマンドは、ほとんどすべての人が日常的に使うであろう(?)as
コマンドに似せて、asa
としました。
こちらが、実際に動作させたスクリーンショットです。
ソースコード
Cursesを使っているので、 gem install curses
してから動かしてください。
#!/usr/bin/env ruby
require 'curses'
include Curses
ASAKUSA = [
'
------------------------------------
// \\ \ \ \ \ \ \ \ \ \ \
// \\ \ \ \ \ \ \ \ \ \ \
//-+---+-\\------------------------------\
|--|---|--| ◉ ◉ ◉ ◉ ◉ ◉ ◉ ◉ ◉ |
|--|---|--|-----------------------------|
|--|---|--|▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤ |
\\--+--+---+--+-----------------------------+\
\\ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ )
\\==========================================)
\\ /
\\~~~~ ~~~~ ~~~~~ ~~~~ ~~~~ ~~~~ ~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
'
------------------------------------
// \\ \ \ \ \ \ \ \ \ \ \
// \\ \ \ \ \ \ \ \ \ \ \
//-+---+-\\------------------------------\
|--|---|--| ◌ ◌ ◌ ◌ ◌ ◌ ◌ ◌ ◌ |
|--|---|--|-----------------------------|
|--|---|--|▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤ |
\\--+--+---+--+-----------------------------+\
\\ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ )
\\==========================================)
\\ /
~~~ ~~~~ ~~~~ ~~~~~ ~~~~ ~~~~ ~~~~/ ~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~']
def print_ship(n,scr,x,y)
lines = ASAKUSA[n].split("\n")
for i in 0...lines.size
scr.setpos(y+i,x)
scr.addstr(lines[i])
end
scr.refresh
end
init_screen
noecho
curs_set(0)
scr = stdscr
maxx = scr.maxx
maxy = scr.maxy
begin
for x in 30..(maxx / 2) do
print_ship(x % 2,scr,maxx - x*2,maxy / 2)
sleep(0.1)
scr.clear
end
scr.setpos(scr.maxy - 5, 0)
scr.addstr("Push Any Key...")
getch
ensure
close_screen
end
ちなみにAsakusa FrameworkはYAESSでキックするので、asaを間違って叩くことはないのですが、ターミナル起動時に動かしたりとか、gradleでビルドをしている間に流したりとか、いろいろな楽しみ方があります! ぜひ、ご活用ください。
あとなんか愛着湧きましたw