Sha256: 60bc4726d35bba1c9be6dadebfabd988504e68aaac2c16aa4b826703e5c81571

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

# frozen-string-literal: true

module Bioshogi
  class TurnInfo
    attr_accessor :turn_base    # 何手の局面か? 通常は0
    attr_accessor :turn_offset  # 何手から始まっているか関係なく moves のオフセット
    attr_accessor :handicap     # 駒落ちの場合 true にすると先後を調整する

    def initialize(handicap: false, turn_base: nil, turn_offset: nil)
      @handicap = handicap
      @turn_offset = turn_offset || 0
      @turn_base = turn_base || 0
    end

    def inspect
      "#<#{handicap? ? '駒落ち' : '平手'}:#{turn_base}+#{turn_offset}:#{current_location.name}#{location_call_name}番>"
    end

    # 戦法判定や表示するときに用いる手数
    def display_turn
      turn_base + turn_offset
    end

    # turn_offset が 0 と仮定したときの手番
    def turn_offset_zero_location
      Location[location_consider_handicap.code + turn_base]
    end

    # 現在の手番
    def current_location(diff = 0)
      Location[location_consider_handicap.code + turn_base + turn_offset + diff]
    end

    def location_call_name
      current_location.call_name(handicap?)
    end

    def handicap?
      @handicap
    end

    def order_info
      OrderInfo.fetch(order_key)
    end

    # for Analyzer
    def order_key
      if display_turn.even?
        :order_first
      else
        :order_second
      end
    end

    private

    # 駒落ちを考慮した最初の location
    def location_consider_handicap
      if handicap?
        key = :white
      else
        key = :black
      end
      Location[key]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bioshogi-0.0.15 lib/bioshogi/turn_info.rb