PlayerClassの修正

playersフォルダの作成

com_playerやuser_playerなどのファイルを格納するplayersフォルダを作成してください。

BasePlayerClassの作成

先ほど作成したplayersフォルダにbase_player.rbを作成します。

ComPlayerにて既存のPlayerクラスのパーツを再利用させるためにBasePlayerClassを実装したいと思います。

# frozen_string_literal: true

# Playerの打ち手を管理をする
class BasePlayer
  attr_reader :piece

  def initialize(piece:)
    @piece = piece
  end

  def gets_piece_location(_board_state)
    raise "gets_piece_locationを実装してください"
  end
end

UserPlayerClassの作成

user_player.rbを作成しUserPlayerClassを実装しましょう。

課題コーナー

BasePlayerClassを継承したUserPlayerClassを作成してみましょう

BasePlayerClassを継承させたUserPlayerClassを実装しました。

board_state引数を持っているのは、comの追加時に使用するからです。

# frozen_string_literal: true

require_relative "base_player"
require_relative "../tic_tac_toe_validator"

# ユーザからの入力値を取得するクラス
class UserPlayer < BasePlayer

  # 概要: コマを配置する行と列の値をコンソールから受け取り返却する
  # 引数: _board_state: ゲーム板の状態
  # 戻り値: 入力された行と列の情報を配列に格納して返却する => ["1", "1"]
  def gets_piece_location(_board_state)
    print "行を入力してください:"
    user_input_row = gets

    print "列を入力してください:"
    user_input_col = gets

    TicTacToeValidator.validate_input_value!(user_input_row, user_input_col)

    [user_input_row.to_i, user_input_col.to_i]
  end
end

テストの修正

最後にテストを修正して完了となります。

課題コーナー

testフォルダにplayersフォルダを作成し既存のplayer_test.rbの内容を移行してみてください

testフォルダにplayersフォルダを作成し既存のplayer_test.rbの内容を移行してみてください。

完了次第、player.rbやplayer_test.rbは消しちゃってOKです。

参考コードは以下のURLから参照してください。

最終更新