module GamePackage::SanmokuNarabe
Constants
- BLACK
- WHITE
Public Class Methods
computer_select(bord_info)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 91 def computer_select(bord_info) unspecified_space = bord_info.map.with_index { |space, i| i if space.nil? } unspecified_space.compact.sample end
start()
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 11 def start bord_info = [nil]*9 puts "三目並べをはじめます\n" puts "先攻か後攻かランダムか決めてください\n" puts "先攻:0\n後攻:1\nランダム: 2" player_order = gets.to_i player_order = [0, 1].sample if player_order == 2 puts "あなたは#{convert_player_order(player_order)}です。" if player_order == 0 loop do bord_info = player_turn(bord_info, player_order) break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu' bord_info = computer_turn(bord_info, player_order) break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu' end else loop do bord_info = computer_turn(bord_info, player_order) break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu' bord_info = player_turn(bord_info, player_order) break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu' end end end
Private Class Methods
bord_columns(bord_lines)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 112 def bord_columns(bord_lines) bord_columns = [] bord_columns[0] = bord_lines.map { |line| line[0] } bord_columns[1] = bord_lines.map { |line| line[1] } bord_columns[2] = bord_lines.map { |line| line[2] } bord_columns end
bord_oblique(bord_lines)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 120 def bord_oblique(bord_lines) bord_oblique = [] bord_oblique[0] = bord_lines.map.with_index { |line, i| line[i] } bord_oblique[1] = bord_lines.reverse.map.with_index { |line, i| line[i] } bord_oblique end
check_bord(bord_info)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 96 def check_bord(bord_info) bord_lines = bord_info.each_slice(3).to_a bord_columns = bord_columns(bord_lines) bord_oblique = bord_oblique(bord_lines) bord_lines.concat(bord_columns).concat(bord_oblique) judgement = { align: false, color: nil } bord_lines.each do |line| if line.all?('w') || line.all?('b') judgement[:align] = true judgement[:color] = line.all?('w') ? 'w' : 'b' end end judgement end
computer_turn(bord_info, player_order)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 82 def computer_turn(bord_info, player_order) puts 'コンピューターの番です' 3.times { |i| puts '.'; sleep(1) } select_number = computer_select(bord_info) bord_info[select_number] = player_order.zero? ? 'b' : 'w' puts "コンピューターは#{select_number}を選択しました" bord_info end
conversion_bord_info(bord_info)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 55 def conversion_bord_info(bord_info) bord_info.map.with_index do |stone, i| if stone == 'w' WHITE elsif stone == 'b' BLACK else i end end end
convert_player_order(player_order)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 37 def convert_player_order(player_order) return '先攻' if player_order.zero? '後攻' end
current_bord(bord_info)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 43 def current_bord(bord_info) conversion_bord = conversion_bord_info(bord_info) <<-EOS | #{conversion_bord[0]} | #{conversion_bord[1]} | #{conversion_bord[2]} | |-----------| | #{conversion_bord[3]} | #{conversion_bord[4]} | #{conversion_bord[5]} | |-----------| | #{conversion_bord[6]} | #{conversion_bord[7]} | #{conversion_bord[8]} | EOS end
judgement(bord_info, player_order)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 127 def judgement(bord_info, player_order) return 'draw' unless bord_info.include?(nil) judgement = check_bord(bord_info) return 'win' if judgement[:align] && player_order == 0 && judgement[:color] == 'w' || judgement[:align] && player_order == 1 && judgement[:color] == 'b' return 'lose' if judgement[:align] && player_order == 0 && judgement[:color] == 'b' || judgement[:align] && player_order == 1 && judgement[:color] == 'w' 'continu' end
player_turn(bord_info, player_order)
click to toggle source
# File lib/game_package/sanmoku_narabe.rb, line 67 def player_turn(bord_info, player_order) puts 'あなたの番です' select_number = loop do puts current_bord(bord_info) puts 'どこを選択しますか?' select_number = gets.to_i break select_number if (0..8).to_a.include?(select_number) && bord_info[select_number].nil? puts "選択した場所はすでに選択されているか存在しません\nもう一度選択してください" end bord_info[select_number] = player_order.zero? ? 'w' : 'b' bord_info end