昨日、話になったので、ちょっとメモメモ。
例えば、野球のように、いろいろなルールがあり、
順番に1回から作っていくと、大変なとき
(13回で引き分けとすると、13回分作らないといけない)
どうやってプログラミングするかという話。
こういうときは、状態遷移図を描いて考えると思います。
つまり、状態遷移図をかいて、プログラミングとしては
初期状態
終了状態になるまで、以下の処理を実行する
|
| 現在ステータスにおける処理
|
*-状態のチェック&次の状態セット
終了状態処理
という具合になると思います。具体的にプログラム例を出して・・
■御題
野球のルールを以下のように表しました。
表か、裏か。
で、それぞれ、終了条件があると・・
抜けていたり、おかしかったりするかもしれないけど、
とにかくこれを基に考えましょう(野球のシミュレーターを作りたいわけではないので)。
■プログラミング-ルールベースの一般系
mainの部分は、こんなかんじ
Gameというクラスにしている。これは、野球に限らず、基本的に変わらない部分、
init_setで初期化をして、
終了条件まで
game()をして(業務だと、ステータスに応じた処理をして)
hyoka()で、評価、次の状態をセットし
owari()で終了処理
■プログラミング-野球特化部分
で、野球に特化したクラスを書く。
こんなかんじ
BaseBallで
init_setは初期化。これは別にいい
owariも、結果表示。これは、別にいいと思う
game()のところで、処理を書いている。
今回のイベントは、アウトになるか、点が入るかしか
関係ないので、どっちかがおきるように書いた。
もうちょっとまじめにシミュレートするのであれば、
ここをいっぱい書く。
そしてhyoka()
hyokaの書き方は、以下のとおり
1.状態遷移図の状態ごとに、switch文でわける。
今回は、表と裏なので、ステータスが、STS_OMOTEとSTS_URAのケースに
わかれている
2.その状態から、「外に出て行く線」の条件をif文で並べる
3.if文の中は、ステータスに遷移するステータスをセットして、
遷移時の初期化をする。
今回3を明示していないけど、これを明示すると、
ほぼ自動的に、状態遷移図から、プログラムが起こせる
ということは、業務ルールを状態遷移図で表現すれば、
プログラムが起こせるということになる。
例えば、野球のように、いろいろなルールがあり、
順番に1回から作っていくと、大変なとき
(13回で引き分けとすると、13回分作らないといけない)
どうやってプログラミングするかという話。
こういうときは、状態遷移図を描いて考えると思います。
つまり、状態遷移図をかいて、プログラミングとしては
初期状態
終了状態になるまで、以下の処理を実行する
|
| 現在ステータスにおける処理
|
*-状態のチェック&次の状態セット
終了状態処理
という具合になると思います。具体的にプログラム例を出して・・
■御題
野球のルールを以下のように表しました。
表か、裏か。
で、それぞれ、終了条件があると・・
抜けていたり、おかしかったりするかもしれないけど、
とにかくこれを基に考えましょう(野球のシミュレーターを作りたいわけではないので)。
■プログラミング-ルールベースの一般系
mainの部分は、こんなかんじ
public class Game { public static void main(String[] args) { // 初期処理 BaseBall b = new BaseBall(); b.init_set(); // 試合中 while(b.sts != BaseBall.STS_END) { // ゲーム実行 b.game(); // 次の状態評価・値セット b.hyoka(); } // 試合終了処理 b.owari(); } } |
Gameというクラスにしている。これは、野球に限らず、基本的に変わらない部分、
init_setで初期化をして、
終了条件まで
game()をして(業務だと、ステータスに応じた処理をして)
hyoka()で、評価、次の状態をセットし
owari()で終了処理
■プログラミング-野球特化部分
で、野球に特化したクラスを書く。
こんなかんじ
|
BaseBallで
init_setは初期化。これは別にいい
owariも、結果表示。これは、別にいいと思う
game()のところで、処理を書いている。
今回のイベントは、アウトになるか、点が入るかしか
関係ないので、どっちかがおきるように書いた。
もうちょっとまじめにシミュレートするのであれば、
ここをいっぱい書く。
そしてhyoka()
hyokaの書き方は、以下のとおり
1.状態遷移図の状態ごとに、switch文でわける。
今回は、表と裏なので、ステータスが、STS_OMOTEとSTS_URAのケースに
わかれている
2.その状態から、「外に出て行く線」の条件をif文で並べる
3.if文の中は、ステータスに遷移するステータスをセットして、
遷移時の初期化をする。
今回3を明示していないけど、これを明示すると、
ほぼ自動的に、状態遷移図から、プログラムが起こせる
ということは、業務ルールを状態遷移図で表現すれば、
プログラムが起こせるということになる。