# PlayerClassの修正

### playersフォルダの作成

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

### BasePlayerClassの作成

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

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

```ruby
# 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を実装しましょう。

{% hint style="info" %}
**課題コーナー**

BasePlayerClassを継承したUserPlayerClassを作成してみましょう
{% endhint %}

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

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

```ruby
# 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
```

### テストの修正

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

{% hint style="info" %}
**課題コーナー**

testフォルダにplayersフォルダを作成し既存のplayer\_test.rbの内容を移行してみてください
{% endhint %}

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

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

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

{% embed url="<https://github.com/Kashiwara0205/ruby-tic-tac-toe/blob/master/ch5/code/test/players/user_player_test.rb>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kashiwara.gitbook.io/rubydesurufurusukuratchibe/zui-zhong-zhang-ji-neng-zhui-jia/playerclassno.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
