- 外枠のセルの値は1で固定
- 枠内のセルの値は残存時間を表し,Snakeの移動(画面更新)に伴い以下のルールに従い更新される
- 卵を取得できなかった場合,残存時間を1減らす.ただし最小は0
- 移動先の残存時間にSnakeの長さを加える
let obstacles =
if ate then
state.cells.obstacles + snake.length * head
else
torch.max (state.cells.obstacles - (1 - state.cells.border), 0) + snake.length * head
![]() |
![]() |
---|---|
外枠に衝突 | Snake自身に衝突 |
- 「Snakeの先頭より残存時間が長いセルが存在するかどうか」で終了判定する
let isOver =
(torch.greater (obstacles, snake.length)).sum().ToScalar().ToInt32() > 0
- MailboxProcessorによりアクターモデルとしてゲームの状態管理を実装する
let processor =
MailboxProcessor<Message>.Start(fun inbox ->
let rec loop state =
async {
let! command = inbox.Receive()
let state =
match command with
| Action command -> update command state