回路シミュレーターLogisimの回路自動生成機能

Logisimは、真理値表(Truth Table)と入力ピン、出力ピン、数式(Expresson)、カルノー図を入力することで、回路を自動生成したり、またはすでに作った回路を上記の情報でも見ることのできる「Combinational Analysis」という機能があります。

新規に真理値表から回路を作成

メニューから[Project]->[Analyze Circuit]

入力ピンと出力ピンの追加

Inputsタブで、下側の入力フィールドに入力ピンの名前を書いて、[Add]ボタンで追加です。追加されると中央の一覧表示に加わります。以下の例は、既にAピンを追加して、これからBピンを追加しようとしているところです。

同様に[Output]タブを選択して、出力ピンも設定します。以下画像では、とりあえずQ1ピン、Q2ピンを作成しました。

真理値表の修正

入力ピン、出力ピンが追加されたら、自動で真理値表が作成されています。この時点では、出力ピンが何を出力するかが未定のままなので修正します。真理値表の出力ピンの項目をクリックすると修正できます。入力ピンはできません。

ここまで行うと、自動で数式(Expresson)とカルノー図も作成してくれます。もちろん数式をA+Bなどのように修正することで、真理値表にも同期して反映してくれます。エンコーダーなどの場合は、真理値表を書くよりも数式を書いたほうが簡単だと思います。

数式
カルノー図

回路の生成

ダイアログ下の[BUild Circuit]ボタンを押すと、回路名を付けるダイアログが表示されるので回路名を入力して[OK]で回路が生成されます。

回路が作成されると、以下のようにHello回路のように回路が生成され一覧に追加されますがダイアログは終了しません。自分で×ボタンで閉じます。

 

既存の回路を解析する

Analysisなので、既に作ってある回路から真理値表、式、カルノー図の生成も可能です。適当な回路を作って[Project]->[Analysis Circuit]をクリック。

真理値表、式などを見れてここから修正も可能。

 

複雑な回路を自動生成するのは難しいと思いますが、ちょっとしたエンコーダーやデコーダーを作成する際は、同じ作業をひたすら繰り返すので、真理値表から作成したほうが良いかもしれません。

注意点

http://home.a00.itscom.net/hatada/dc2/chap15/decoder.html

実際に作ればすぐわかりますが、上記サイトにあるような、8入力3出力エンコーダーなど、入門レベルのエンコーダーなどを作る場合、Logisimは、ピンすべてを満たす真理値表を自動生成します。そんため上記サイトの真理値表とLogisimの真理値表にづれが出ている感じがしますが、Logisimは式に書かれている回路を生成します。デジタル回路の入門者だと同じ真理値表が作れなくて戸惑うかもしれませんが問題ありません。

まとめ

Logisimで、マウスでデジタル回路を作成する方法ではなく、入出力ピンと真理値表から回路を生成する方法を学びました。

 

 

Unity Create a Game Series (E14. game over)をやってみました。

Unity Create a Game Series (E14. game over)をやってみました。

今回はゲームオーバー画面をuGUIで作成し、”Play again”ボタンで、シーンをリロードする仕組みを作りました。これは今までミニゲームを作ったりした際に経験していたので簡単でした。

ゲームオーバーシーンを表示
ゲームオーバーシーンを表示

この回で、基本的なゲームの仕組みは揃いました。これから先の目次を見ると、それぞれの機能を磨き上げる工程になるので、おそらくそこまで難しいものではないと思われるので頑張って進んでいきます。

  • パーティクル追加
  • 敵ウェーブの修正
  • リコイル・リロード
  • 武器の追加
  • UI改良、
  • オーディオ追加
  • メニュー

あとは、ライフバー、アイテム、インベントリーあたりを学べばさらに良くなりそうです。

このプロジェクトの配布

https://hajimete-program.com/games/Unity Create a Game Series (E14. game over).zip

 

 

Unity Create a Game Series (E12. finishing the map generator)をやってみました。

引き続き、「Unity Create a Game Series」をやりマップの自動生成の作業が完了し、第7回までに作ったトップダウンシューティングゲームに組み込みました。

マップ自動生成をゲームに組み込んだところ
マップ自動生成をゲームに組み込んだところ

今回の第12回は、障害物に高低差を付け、グラデーションを付けれるようにしました。高低差はScaleで変更できるのが容易に想像できますが、Materialをプログラムから操作するのは少ないので、このチュートリアルで扱えてよかったです。また、今回は、Game.unityシーンに、MapGeneratorのオブジェクトをコピーペーストしてゲームに反映させました。MapGenerator.unityはシーンとして独立して保存しているのでいろいろ修正が可能です。

002
Unityエディターで、各マップを設定できるようにしている

MapGeneratorスクリプトには、Mapクラスを作り、その配列をUnityエディターから操作できるようにしたので、ちょっとしたマップの修正を検証するのが簡単になりました。

マップ自動生成の基礎プログラミングを手に入れた

様々なパラメータを修正できる
様々なパラメータを修正できる

今回まで一番の収穫は、プロシージャル・ジェネレーションの基礎を学習できたことです。ローグライク系ゲームのように、フロアを自動生成するような仕組みに作り替えたりはまだできませんが、それをするためのメッシュ生成や配列操作などは学べました。

このプロジェクトの配布

https://hajimete-program.com/games/Unity Create a Game Series (E12. finishing the map generator).zip

Unity Create a Game Series (E11. map navigation)をやってみました。

Unityのナビゲーション・探索システムでは、フィールドにBake(焼く)ことで、NavMeshAgentがそのフィールドを移動でき、NavMeshObstacle(障害物)を用意することで、その領域を移動できなくします。

ナビゲーションの設定は1つ1つのタイルに対して行うのではなく、1つ大きな100×100などのQuadを用意して、そこにBakeします。ちょうど以下のような感じです。NavMeshObstacleコンポーネントが付加されているオブジェクト移動できなくなるため、灰色になり、移動できるところは水色になります。

002
フィールドの外側に最大マップ領域を作ってNavMeshAgentが移動できるようにする

このままでもよいですが、今回は最大領域から落ちたりしないように、四方をマスキングしました。

003
NavMeshObstacleでマスキングして、移動できないようにする

まとめ

マップを自動生成して、NavMeshAgentが移動できるようになったのであとは細かい修正を残すだけとなりました。

Unity Create a Game Series (E10. map connectivity)をやってみました。

Sebastian LagueさんのUnity5チュートリアル「Create a Game (Unity 5)」の
Unity Create a Game Series (E10. map connectivity)をやってみました。

このチュートリアルは、第8回になる「E08. tile map」からは今までのプロジェクトと独立していて、第8回からでもチュートリアルとして始められるようになっています。主なテーマは、マップ生成です。

Unityエディターで様々なマップを自動生成
Unityエディターで様々なマップを自動生成

E08,E09,E10と作業して、上記のような自動生成ができるようになりました。マップ生成は複雑に感じますが、実際にはライフゲーム、倉庫番、テトリスのような二次元配列を使い、隣接するXY要素の衝突判定やフラグ判定を行うときと基本的な仕組みは同じでした。またマップの場合は、道が途切れ内容にする方法が必要ですが、これは、アルゴリズムとして確立していてFlood Fillアルゴリズムを使いました。と言ってもやっているとは簡単で、中心をまず調べ、その隣接する障害物じゃないものを調べ続けるという事再帰的に繰り返していくだけです。

マップが二次元配列になっているので、以下が成り立ちます。

マップ全体の要素数 – 壁の数 = 通れるタイルの数

実際の例に置き換えると、以下のようになります。

10×10のマップ(100要素) – 10個の障害物 = 90個の通れるタイル

よって、Flood Fillアルゴリズムで、通れる道を調べたときに、90個に達しなければどこかの道が壁でおおわれていることになります。この仕組みを、壁を作るときに応用し、壁を作ってみて、その時点で、Flood Fillで道を調べふさがってしまったら、壁をいったん取り消すということを、壁の最大個数にするまで繰り返しマップを作ります。

 

このプロジェクトの配布

https://hajimete-program.com/games/Unity Create a Game Series (E10. map connectivity).zip

まとめ

マップ自動生成の基本部分はできたので、あとはUnityのNavigation対応と、壁などの装飾を残すだけです。1回の動画時間は20分以内ですが、一時停止し細かいロジックを理解するとなると1時間を超える作業になるので、思っている以上に時間がかかり大変です。