ライフゲーム その2
先日のコードより後退して、最小限のコードを書いた。
- 初期状態はコード上で決め打ち。
- 出力はLog出力の最小限アプリ。
以上の2点しかないのに、テンプレートから作成したので無駄なWindowが出る。
モデルクラスの使い方
モデルクラスは、LGOMModelです。インスタンス化する時に、格子のサイズを指定して作成します。
{
LGOMSize theSize = {32, 32};
self.model = [LGOMModel modelWithSize:theSize];
.
.
.
上記は、32x32の格子サイズを持つライフゲームのモデルを作成します。
初期状態の設定
初期状態の設定用に3つのメソッドを用意しています。
// すべてのセルを非生存状態にします。
- (void) clearAll;
// すべてのセルの生存状態/非生存状態を乱数で設定します
- (void) randomizeAll;
// 文字列でセルの状態を指定します。
- (void) gameBoardSetup:( NSString* _Nonnull )inNewLifeGameBoard;
clearAllとrandomizeAllはコメントの通りです。 gameBoardSetupメソッドに引き渡す文字列は、以下のような形式になります。
// 8x8の格子でLGOMModelを作成した場合
[model gameBoardSetup:
@"........\r"
@"...OOO..\r"
@"........\r"
@"........\r"
@"........\r"
@"...OOO..\r"
@"........\r"
@"........\r"
それぞれの文字の意味を以下の表に示します。
文字 | 意味 |
---|---|
“O” | セルが生存状態 |
“.” | セルが非生存状態 |
“r” | 次の行、または終了マーカー |
世代の進行
メソッド”next”を呼び出すと、モデルの内容を次の世代に書き換えます。
各セルの値の確認と変更
それぞれのセルの状態を確認変更するメソッドは以下の2つです。
// inPointで示す位置のセルの状態をBOOLで返します。YES:生存 NO:非生存
- (BOOL) aliveAtPoint:(LGOMPoint)inPoint;
// inPointで示す位置のセルの状態をinAliveで指定した値に変更します。
- (void) setAlive:(BOOL)inAlive atPoint:(LGOMPoint)inPoint;
すべてのセルの状態確認
descriptionメソッドで出力するようにしています。
- (NSString*) description
サンプルコードでの使用方法
NSApplicationのdelegateに設定している、LGOMApplicationDelegateの中のawakeFromNibメソッドで使用しています。
- (void) awakeFromNib
{
LGOMSize theSize = {32, 32};
self.model = [LGOMModel modelWithSize:theSize];
[self.model gameBoardSetup:
@"................................\r"
@"...OOO..............O...........\r" // ブリンカー
@"....................OO..........\r" // ブロック
@"...........OOOO.................\r" // 蜂の巣
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@".............OOO................\r" // Tテトロミノ
@"..............O.................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"...O............................\r"// グライダー
@"....O...........................\r"
@"..OOO...........................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"
@"................................\r"];
NSLog(@"\r%@\r", self.model );
[self.model next];
NSLog(@"\r%@\r", self.model );
[self.model next];
NSLog(@"\r%@\r", self.model );
[self.model next];
NSLog(@"\r%@\r", self.model );
[self.model next];
NSLog(@"\r%@\r", self.model );
[self.model next];
NSLog(@"\r%@\r", self.model );
[self.model next];
}
出力結果は以下の通り。
2016-09-04 23:21:11.141 LifeGameOnMac[38776:1497000]
................................
...OOO..............O...........
....................OO..........
...........OOOO.................
................................
................................
................................
................................
................................
.............OOO................
..............O.................
................................
................................
................................
................................
...O............................
....O...........................
..OOO...........................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
2016-09-04 23:21:11.144 LifeGameOnMac[38776:1497000]
....O...........................
....O...............OO..........
....O.......OO......OO..........
............OO..................
............OO..................
................................
................................
................................
..............O.................
.............OOO................
.............OOO................
................................
................................
................................
................................
................................
..O.O...........................
...OO...........................
...O............................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
................................
以下省略
多分、最も原始的なCocoaアプリでのライフゲイムだと思う。
ソースコードはここ。( LifeGameOnMac_01.zip )
次は、GUIで編集できるコードの解説をします。じゃあね。