Posted at

asを打ち間違えると屋形船が走るコマンドを作ってみた

More than 3 years have passed since last update.

この記事はAsakusa Framework Advent Calendar 2015の23日目です。

入門記事はひしだまさんが大量に書いているので、たまには全く関係ない記事を書いてみようと思います。


YASL(Yet Another sl command) の一大ムーブメント

まずはこちらをご覧頂きたい。

「本物の golang を... 本物の Gopher を、お見せしますよ。」

http://qiita.com/mattn/items/b7889e3c036b408ae8bd

素晴らしい!!

D言語くんといいGopherといい、なんだか愛嬌があっていい。マスコットキャラクターはこうあるべき!!

ここまでリッチなものでなくとも、自分のよく使う言語・フレームワークのマスコットを動かしたくなるというのは人情というものですね。はい、ここから本編です。


そしてAsakusaですよ

asakusaframework

なぜ屋形船...浅草なら雷門じゃないのかな...

これを動かしたら愛着湧くんだろうか。半ば義務感にかられる形で作業にとりかかることにします。

AsakusaなのでJavaで作りたかったのですが、調べるの面倒だったのでRubyで作ります。


完成

コマンドは、ほとんどすべての人が日常的に使うであろう(?)asコマンドに似せて、asaとしました。

こちらが、実際に動作させたスクリーンショットです。

tty.gif


ソースコード

Cursesを使っているので、 gem install curses してから動かしてください。


asa.rb

#!/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


使ったツールなど



  • monodraw 超高機能AA作成アプリケーション。屋形船はこれなくして作れなかったでしょう。


  • ttygif ターミナル操作からgifアニメーションを作ってくれる神コマンド。