メイン部分の実装

ゲームのメイン部分を実装していきます

完了したら三目並べで遊べるようになります

ゲームの進行部分の実装を考えよう

今まで実装してきたメソッド群を使って、ゲームの進行部分を実装してみましょう

課題コーナー

ゲームの進行部分を実装する

初期値の定義

plyaer変数, board変数の初期値を定義します

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

ゲームループの実装

loop構文を使いゲームのループを表現します

以前に実装したcontinue?メソッドを使います

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]


loop do
  break if !continue?(player, board)
end

入力部分の実装

プレイヤーがコマを配置できるようにします

以前に実装したgets_positionメソッドを使います

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

loop do
  row, col = gets_piece_location()

  break if !continue?(player, board)
end

ゲーム板の更新

入力できるようになったのでゲーム板にコマを置けるようにします

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

loop do
  row, col = gets_piece_location()

  place_piece(board, player, row, col)

  break if !continue?(player, board)
end

プレイヤーの入れ替え

プレイヤーの入れ替え部分を実装します。

相手のプレイヤーを取得するメソッドがあれば便利そうです。

# 説明: 対戦中の相手プレイヤーを返却する
# 引数: player: プレイヤーを表す。1 or 2の数値
# 戻り値: 1の時 => 2
#        2の時 => 1
def get_opponent_player player
  return player == 1 ? 2 : 1
end

このget_opponent_playerメソッドを適用します。

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

loop do
  row, col = gets_piece_location()

  place_piece(board, player, row, col)

  break if !continue?(player, board)

  player = get_opponent_player(player)
end

ゲーム画面の出力

今のままでは、何が起こっているのか分からないのでゲーム画面を出力しましょう。

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

loop do
  row, col = gets_piece_location()

  place_piece(board, player, row, col)

  print_board(board)
   
  break if !continue?(player, board)

  player = get_opponent_player(player)
end

試合結果の出力

試合結果の出力メソッドを実装しましょう。

# 説明: ゲームの結果をコンソールに出力する
# 引数: board: ゲーム板, 3 x 3の二次元配列
# 戻り値: なし
def print_result board
  if win?(1, board)
    puts "Player1が勝利しました!"
  elsif win?(2, board)
    puts "Player2が勝利しました!" 
  else
    puts "引き分けです!"
  end
end

上記で実装したメソッドをメイン部分に適用させて完了です。

player = 1
board = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

loop do
  row, col = gets_piece_location()

  place_piece(board, player, row, col)

  print_board(board)

  break if over?(player, board)

  player = get_opponent_player(player)
end

print_result(board)

基本ロジックの実装はこれで完了です!

以下にプログラムを動作させた例をのせておきます。

行を入力してください:0
列を入力してください:0

 o  N  N 
 N  N  N 
 N  N  N 

行を入力してください:1
列を入力してください:1

 o  N  N 
 N  x  N 
 N  N  N 

行を入力してください:0 
列を入力してください:1

 o  o  N 
 N  x  N 
 N  N  N 

行を入力してください:1
列を入力してください:0

 o  o  N 
 x  x  N 
 N  N  N 

行を入力してください:0
列を入力してください:2

 o  o  o 
 x  x  N 
 N  N  N 

Player1が勝利しました!

この章で実装した内容のフルセットは以下のリポジトリに乗せておきました。

なにかトラブルが発生した場合は、参照してみてください。

このプログラムの問題点

お気づきの方もいると思いますが、このプログラムは入力部分に欠点があり不完全です。

相手が置いた場所にも上書きして置けるし、ゲーム板の外にも置くことができます(エラーになりますが)。

ここら辺の問題を四章のリファクタリングで修正していきたいと思います。

最終更新