2020-02-01から1ヶ月間の記事一覧

kairo-gokko (13) 通電 3

目次ページに戻る / 前 / 次 スイッチが複数ある場合に対応します。 これは全然大した修正じゃないので記事分ける必要なかったですね……。 --- a/circuit.rb +++ b/circuit.rb @@ -264,7 +264,7 @@ class Circuit end def update_edges - is_tuden = Tuden.tu…

kairo-gokko (12-2) 通電 2

目次ページに戻る / 前 / 次 次はもうちょっと複雑なパターンを……と思いましたが、 その前にエッジ 1本の通電判定処理だけ作ってみることにします。 動くものができるとモチベーションも上がるでしょう。 クリックでスイッチだけ状態を更新 スイッチの状態に…

kairo-gokko (12-1) 通電 1

目次ページに戻る / 前 / 次 見た目ばかり整えていても動きません。いいかげん本丸である通電に取り組みましょう。 いきなり難しいところから考えるといきなり手詰まりになってしまうので、 まずは簡単なところから始めます。 電気(回路)の知識に乏しいの…

kairo-gokko (11) スイッチを追加

目次ページに戻る / 前 / 次 導線と電池のプラス極・マイナス極だけでは寂しいですね。とりあえずスイッチを追加しましょうか。 まだ電気を流して回路を動かすことはできないので描画するだけです。 LibreOffice Draw で元データを作ります。 data_01.fodg …

kairo-gokko (10-2) dxopal_sdl.rb を使う

目次ページに戻る / 前 / 次 前の記事に書いた dxopal_sdl.rb を使う形に書き換えます。 ここは上記の記事に書いた通り。 --- a/main.rb +++ b/main.rb @@ -1,4 +1,13 @@ -require 'dxopal' +def browser? + Kernel.const_defined?(:Native) +end + +if brow…

kairo-gokko (10-1) Ruby/SDLを使ってDXOpalをエミュレートする(自分が必要な部分だけ適当に)

目次ページに戻る / 前 / 次 DXOpal はブラウザで実行できるため、SDL などのネイティブなライブラリが不要で、他の人に見てもらいやすいところが魅力的です。 しかし、実際開発してみるとブラウザで開いてから動き出すまでにそこそこ時間がかかったり、 デ…

kairo-gokko (9) マウスと効果音

目次ページに戻る / 前 / 次 「マウス操作も効果音もまだ必要にはなってない」と前回書きましたが、 せっかく DXOpal にしたのでちょっとだけやっておきます。 マウス とりあえずマウスカーソルの位置(x, y 座標)を取得して、表示に反映させてみます。 ---…

kairo-gokko (8) 描画部分をDXOpalに交換

目次ページに戻る / 前 / 次 手っ取り早く可視化したかったので Plumo を使ってきましたが、 Plumo はしょぼいのでマウスで操作したり効果音を出したりできません。 そこで、DXOpal を使って書き直します。 最近 DX 流行ってますしね(それは違うやつ)。 gi…

kairo-gokko (7) 前処理と実行に分ける

目次ページに戻る / 前 / 次 分けます。 今の段階でいえば、元データを整形して Unit::Edge や Unit::PlusPole に変換する部分が前処理、 描画部分が実行処理に当たります。 前処理(データの整形)の部分は LibreOffice Draw で編集して元データが変更され…

kairo-gokko (6) Circuit, View

目次ページに戻る / 前 / 次 PlusPole, MinusPole 放置していた電池のプラス極・マイナス極をいい感じのオブジェクトにしておきます。 Unit::PlusPole Unit::MinusPole これまでは LiboDraw::Rectangle のオブジェクトをそのまま使って矩形を描画していまし…

kairo-gokko (5) データの整形 4

目次ページに戻る / 前 / 次 今回は十字の部分について考えます。 <before> <after> つながってる十字とつながっていない十字の両方を使いたい場合、すぐに思いつく方法が2つあります。 (1) つなげたくない場合にブリッジを使う (2) 点で指定 (1) ブリッ…

kairo-gokko (4-2) データの整形 3

目次ページに戻る / 前 / 次 はい、では WireFragment(以下 WF) の集合をエッジの集合に変換する to_edges メソッドを作っていきます。 LibreOffice Draw で描いた大元のデータはこう。 要素が多いとデバッグが面倒なので少なめにしました。 目標イメージ…

kairo-gokko (4-1) データの整形 2

目次ページに戻る / 前 / 次 電気、流したいですね。 流したいので、ここらへんから「電気を流して動かすにはどうすればいいか?」を考えながら進めていきます。 実際に電気を流して回路を動かしたときの動作を想像すると、こんな感じなんじゃないでしょうか…

kairo-gokko (3) データの整形(重複した線の処理)

目次ページに戻る / 前 / 次 適当に描いた直線の部分の重複をなくして整えます。 [before] [after] 上図の [after] のように、隣接するセル間をつなぐ線をひとつの単位として、 (1) 長い線をこの単位になるようにバラす (2) バラした短い線同士を比較して、…

kairo-gokko (2) 読み込んだデータを描画

目次ページに戻る / 前 / 次 図形の情報が抽出できたので、抽出結果の確認も兼ねて、もうここで可視化してしまいます。 (Bundler を使って) Plumo をインストールして、 次のように viewer.rb を書いて、 require "plumo" require "./libo_draw" # pixels …

kairo-gokko (1) 回路データの読み込み

目次ページに戻る / 次 (1) 上の画像のような回路図(回路図のつもり)を LibreOffice Draw で描いて (2) fodg ファイルから矩形と直線の情報を抽出する ところまで。 (1) については、上の画像の通りですね。 グリッド幅は1センチです。 Flat XML ODF Drawi…

LibreOffice Drawのファイルから図形の情報を抜き出す(直線)

「LibreOffice Drawのodgファイルから図形の情報を抜き出して使う」では矩形とコネクタだけ扱いましたが、直線も使いたくなったのでメモ。 サンプルを用意。 fodg で保存して draw:page 要素を見てみると、こんな感じ。 <draw:page draw:name="page1" draw:style-name="dp2" draw:master-page-name="標準"> </draw:page>

「現場で役立つシステム設計の原則」の「1行につきドットは1つまで」の説明について

『ThoughtWorks アンソロジー』という参考書の第5章で、「オブジェクト指向エクササイズ」として紹介されている次の9つのルールです。 (『現場で役立つシステム設計の原則』 p301) ● 1行につきドットは1つまで 「else 句を使わない」と同じく、複文構造を…