アイコン作り

家でこつこつとアイコンを作っています。

例のアンドロイド用アイコン。

色合いが特徴的なのでアイコンはシンプルな白一色なのが望ましいのですが、主なアプリのアイコン以外はカラーのアイコンを使わざるを得ません。

たとえばこんなの。

Logo

EVER NOTEというアプリのアイコンは

Evernote_2

・・・?なんかちがう ?まあいいでしょう。自作のアイコンはそれだけで味があるモノです。

Icons

とりあえず使うアプリだけ。真ん中はIllustratorの練習のために作っただけで使う予定はありませんけど。

**********
8/9
朝:モーニング
昼:カロリーメイト
夜:カロリーメイト
体重:93.4kg
ジム:×
**********

プログラムの本の再読

Dscn8618

こういう本はたいていの場合は1度読めば事足ります。コンピューター関係の詳細はネット上にいくらでも転がっているので、「そういうものがある」ということをわかっていれば、いくらでも探せます。

では、なぜ1冊数千円もする本を買うのかといえば、その「そういうものがある」ということを知るためであります。何かのテーマを元に体系的に解説してくれるのは本の利点でもあります。

1度読んでから時を経てもう一度読み直すと、当時は必要としなかったことが載っていたり、別のやり方で無理矢理解決していたことをすっきりと解決出来る方法を発見できます。

せっかく買った物ですから捨てる前にもう一度読んでみようかなと思いました。

**********
10/20
朝:モーニング
昼:フランスパンのサンドなど
夜:おでん、ビール2本
体重:90.0g
**********

Dscn8615

コンビニで買える食べ物はたいていおいしく食べられますが、手前のスープはいまいちでした。珍しい。

迷路 for Excel

Mazea1前にやっていた迷路ですが、Excelでやってみました。考えてみると、Excelだと最初からマス目があるし、いろいろビジュアル面でやりやすいかなと思いました。

使い慣れたVBAでしたがやってみると、いろいろと発見があり勉強になりました。しかし、やはり.NETと比べるといろいろとやりにくいところがあり苦労しました。

なんとか完成させたのがこれです。

Mazea3

穴掘り法でつくりました。素直に基本に従って作ったのでちゃんとした迷路に見えます。もちろん解答作成機能も作ってあります。

Mazea4

前に作ったものよりちゃんと迷路になってると思いませんか?2つほど問題がありますがそれは次のバージョンで改善しましょう。

さて、せっかく作ったので大きな迷路も造ってみたいと思いました。一応数字を変えれば自由に大きさを変えられるようにしてあるので、大きくしてみるとエラーがでました。なぜかというと、このExcelは過去の形式(97-2003形式)で作成していたために、列の数が256までしか作成出来なかったのです。普通はそんなに使わないですしね・・・。

急遽、2007形式にしてさらに列を増やす設定をしていざチャレンジ。レベルという機能をつけて、簡単に増やせるようにしたのですが、このノートではレベル3(約445x315)のサイズが精一杯でした。迷路はともかく解答を作るのが非常につらい。まるでベンチマークのようです。

ためしにそのレベル3をPDFにしてみました。A4印刷対応版w

「maze.pdf」をダウンロード

一応、解答も載せておきます。

「maze_Answer.pdf」をダウンロード

やってみるとわかりますが、見た目に反して意外と簡単だと思います。前にも少し書きましたが、この作成方法では一本道になりやすいという問題があります。また、行・列の数によって、一番端に外壁の他にもう一つ壁が出来てしまって少し見栄えが悪いです。

とはいえ、とりあえず完成したので次は、自分で絵を描いてそれが迷路になる(迷路を解くと絵になる)プログラムにチャレンジしてみようと思います。

**********
3/4
朝:モーニング
昼:カロリーメイト
夜:カロリーメイト
体重:86.4kg
**********

迷路 穴掘り法・・・らしきもの

またまた迷路です。今度は穴掘り法という方法を使ってみました。これはオリジナルではなく、検索すると結構出てくる有名な方法です。それを斜め読みしてあとは適当に実装してみました。

簡単に書くと、迷路を全て壁に変換しルールに従って道路を造っていきます。ここで使ったルールは

1)ある起点でランダムで1方向選ぶ
2)その方向が壁で
3)その方向の2マス先が通路か外壁でなければ
4)その2マスを道路にして2マス先に進む
5)道路に出来ても出来なくても再び1に戻る

というものです。1でどの方向も道を延ばせない場合は別の起点を探します。全ての場所で道路を延ばせなくなったら終了です。

で、どうなったかというと

Maze09122701

前の迷路と違って、一本道ではなくちゃんといろんな方向に進んでいますね。ちょっと単純な道だけで構成されているように見えますが、

Maze09122700q

こんな風に答えが見えなければ結構難しいです。(答えは最後に)

とはいえ、斜めのラインが多いのも事実であるので今後はその改良をしていきたいと思います。

なお、この迷路を造るのは頭の体操のつもりで始めました。そして本来は迷路を造る方はおまけで、迷路を解くプログラムを作るというのが主題だったのですが、そっちの方は最初に作った方法が汎用的に使えるようなので、迷路を造る方が主題になってしまいました。将来的には、もっと複雑な迷路や迷路を解くと絵になるとか、このようなマス目以外の迷路なんかも作ってみたいと思います。

**********
12/27
朝:カロリーメイト
昼:カロリーメイト
夜:カロリーメイト
体重:86.4kg
**********

Maze09122700a

オリジナル迷路?

こつこつと迷路を考えていましたが、一つ作ってみました。

1)まだ確定していないマス(未定義)に隣接している通路の中から1つ選ぶ。
2)選んだ通路に隣接している未定義の中からランダムで一つ選びそこに進む。
3)進んだマスの上下左右のマスで壁を作れるかどうかチェックする。
4)再び1から繰り返す。

というものです。わかりにくいですね。ポイントは3番で壁を作れるかどうかチェックするというものです。今回考えたのはここで、通路を造りつつ壁も作っていこうというものです。具体的には、「通路2カ所以上で囲まれたマスは壁にする」というものです。

■:壁
□:通路

とすると、

□□□
■□?←

こういう場面で?のところは何になるかと言えば、壁になります。基本的に2マス分の幅の太い通路は認めないので、このような場合には?は壁になるしかありません。

□□?←
□■□
□□□

この場合、?のところが通路になると通路が2通り出来てしまいます。下から回るルートと直接右に行くルートです。迷路のルールは定めていませんでしたが、一応複数ルートは認めない方向なのでここでも?は壁になるしかありません。

このようなルールで通路を造っていくと・・・

Ori1

こんな感じになります。一応迷路は出来たようです。自分で考えたルールで迷路が完成するというのも楽しいものですね。

しかし、この迷路にはいくつか問題があります。たとえば、ゴール付近が丸くつながっています。ゴール付近の処理がうまくいってないのでしょう。

さらに迷路をよくみると?のマスがいくつかあります。

□■
■?■
□■

このように壁で囲まれたところは判定のしようがないので?のままです。最終的に?を壁に変換してもよいのですが、それだと負けな気がします・・・。

さらに何回か迷路を作成していると、ゴールまでたどり着けないことがあります。これは致命的ですね。

しかしながら、最大の問題は・・・棒倒し法と同じでゴールまでのルートが単純になってしまうということです。これは痛い。また作り直しです。

しかしながら、自分で迷路を造る方法を考えたのはなんとなくうれしいですね。次はきれいな迷路が出来るようにがんばります。

**********
12/22
朝:マックでホットドッグセット
昼:ファミレスでハンバーグ
夜:とんかつ弁当とビール
体重:85.0kg
**********

迷路2

昨日の続きです。

今度は迷路を解く方法を考えました。本に載っていた方法は2種類。片手を壁にさわる方法と戻って×をつける方法です、

片手を壁にさわる方法は、スタート地点から左手を壁につきながら道なりに進む方法です。有名なので知ってる人も多いと思いますが、片手を壁につけながら歩くとゴールに到達できます。もう一つは、交差点でランダムに進んで、もし行き止まりなら交差点に戻ってその道に×をつける方法です。これはある意味正統派で進んでみてだめなら戻って別の道ということで、無難な方法です。

さて、私が考えた方法というのはさらに別な方法で、行き止まりに×をつける方法です。

■■■■■■■■■■■
□□■■■□□□■□■
■□□□□□■■■□■
■■■□■□□□□□■
■□□□■■■□■■■
■□■□□□■□□□□
■■■■■■■■■■■

こんな迷路があったとします。

左上のマスからすべてチェックして、「3方が壁か×に囲まれている道に×をつける」ということを繰り返します。

■■■■■■■■■■■
□□■■■□□×■×■
■□□□□□■■■□■
■■■□■□□□□□■
■□□□■■■□■■■
■×■□□×■□□□□
■■■■■■■■■■■

最初はこんな感じです。で、同じ事を繰り返すのですが、×も壁に見立てて行き止まりをつぶします。

■■■■■■■■■■■
□□■■■□××■×■
■□□□□□■■■×■
■■■□■□□□□□■
■×□□■■■□■■■
■×■□××■□□□□
■■■■■■■■■■■

■■■■■■■■■■■
□□■■■×××■×■
■□□□□□■■■×■
■■■□■□□□□×■
■××□■■■□■■■
■×■×××■□□□□
■■■■■■■■■■■

これを繰り返すと、

■■■■■■■■■■■
□□■■■×××■×■
■□□□□□■■■×■
■■■×■□□□××■
■×××■■■□■■■
■×■×××■□□□□
■■■■■■■■■■■

こんな感じになり、正解の道だけが浮かび上がるという寸法です。

手でやるには大変ですけど、プログラムでやるなら、これくらい単純な方法の方が速いですね。

さて、いよいよ次は迷路作成(穴)の作成ですが、はたして出来るのでしょうか。

**********
12/16
朝:モーニング
昼:カロリーメイト
夜:ビール、つまみ
体重:86.0kg
**********

迷路

プログラムの雑誌を読んでいたら、迷路を解析するアルゴリズムを考えようという記事がありました。おもしろいので読んでみたのですが、迷路を造る方もおもしろいとおもい作ってみることにしました。

迷路の作り方というのは、かなりの種類があるようです。本来ならオリジナルの方法を考えたいのですが、とりあえずは既存のやり方を真似てみることにしました。

参考にしたのは「棒倒し法」と「穴掘り法」です。棒倒し法は迷路状に棒を立ててそれを倒していきます。

■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■

一番上の棒は4方向にランダムに倒します。他は上以外のランダムな方向に倒します。

■↑■■■■■■■↑■■■■■
■□■□→□←□■□■□→□■
■■■■■↓■■■■■■■↓■
■□→□■□→□→□■□■□→
■■■↓■■■■■↓■↓■■■
←□■□■□→□←□■□■□■
■■■↓■■■↓■■■↓■↓■

倒したところも柱にすると

※□■■■■■■■□■■■■■
■□■□□□□□■□■□□□■
■■■■■□■■■■■■■□■
■□□□■□□□□□■□■□□
■■■□■■■■■□■□■■■
□□■□■□□□□□■□■□■
■■■□■■■□■■■□■□※

迷路っぽくなりましたね。左上と右下をスタートとゴールにすればそれらしくなります。もっとも、この迷路には欠点がありまして、どうしても上の行が単純になりがちです。

とりあえずこれを元にプログラムを作成してみました。

Maze1

もちろん作る度に違う迷路が出来ます。解析の方は以外とあっさりと出来ました。こちらは一応その雑誌に書いてあった2種類のやり方ではない方法を考えてみました。それはまた後日。

Maze2
Maze2a

下にボタンを作って迷路の作成と解析を何度も行いましたが、この棒倒し法の欠点がよくわかります。迷路が必ず単純なものになります。

一番上の部分が単純になるなら、単純になる部分を短くすることでちょっとは複雑にならないかなと思い、棒を左から右へ倒す方法に変え、迷路の形も横長にしました。が、迷路を解いてみるとどうしても正解の道順が上のように戻ることのない単純なものになってしまいます。

とはいえ、こんな簡単な方法で迷路が出来るというのは驚きですし、これを発見した人は頭がいいんだなと感心しました。

次は穴掘り法にチャレンジしていよいよオリジナル(世界初の方法を探すわけではなく、自分で考えるという意味です。)の迷路作成方法を作ってみたいと思います。

**********
12/15
朝:モーニング
昼:担々麺
夜:カロリーメイト
体重:85.6kg
**********

ところで、上の画像を見てふと気がつくことがあるかもしれませんが、突っ込んだら負けです。突っ込んだら・・・。