ライフゲーム その3

最小限のセル編集機能つきのライフゲームの作成。

方針は、以下の2つ。

  • 今までと同じモデルクラスを使う
  • 表示編集はフレームワーク既存のクラスを組み合わせてでっち上げる。

GUIの見た目はこんな感じになります。

../../../_images/lifeGameGUI.png

GUIパーツの配置と接続

XIBファイルの追加はこんな感じで画面を作ります。

../../../_images/lifeGameIB.png

中央のNSSCrollViewの中身は、NSButtonCellを含んだNSMatrixです。

Nibのoutletの接続は、以下のようになります。

../../../_images/lifeGameObj_outlet.png

Nibのactionの接続は以下のようになります。

../../../_images/lifeGameObj_action.png

ViewControllerだけの図にした方がわかりやすかったかもしれませんが、面倒なので修正はしません。

ViewControllerでモデルクラスと対話させる

各種ボタンが呼び出している、機能は単純にモデルクラスの機能を呼び出しているだけです。

runメソッドを呼び出すと行われる、自動で次の世代へ行くのはNSTimerを使っています。

分かりにくい物は、NSMatrix周りのメソッドです。

nibの読み込み時に、NSMatrix中のCellのprototypeをNSOnOffButtonに変更しています。 これは、見た目はラジオボタンだけと、昨日はOnOffボタンに変更するためです。

- (void)viewDidLoad
{
   [super viewDidLoad];

   NSButtonCell* theCell = self.matrix.prototype;
   [theCell setButtonType:NSOnOffButton];

NSMatrixがクリックされると以下のメソッドが呼ばれます。 マトリクス中のどのNSButtonCellがクリックされたか区別できなかったので(詳しく調べればわかるはず)強引にNSMatrixの値をモデルの値に同期させています。

- (IBAction) toggleCell:(id)sender;

これ以外のメソッドは単純で解説の必要はないと思われます。

ソースコードはここ。( LifeGameOnMac_02.zip )

こんな感じでだいたい終わり。