end
@player.sente = nil
else
- if (@my_sente_str == "*")
+ if (@my_sente_str == "*") && !Login.handicapped_game_name?(@game_name)
rival = $league.get_player("game_waiting", @game_name, nil, @player) # no preference
elsif (@my_sente_str == "+")
rival = $league.get_player("game_waiting", @game_name, false, @player) # rival must be gote
elsif (@my_sente_str == "-")
rival = $league.get_player("game_waiting", @game_name, true, @player) # rival must be sente
else
- ## never reached
@player.write_safe(sprintf("##[ERROR] bad game option\n"))
return :continue
end
Game::new(@player.game_name, @player, rival, board)
end
else
- board = Board.new
+ klass = Login.handicapped_game_name?(@game_name) || Board
+ board = klass.new
board.initial
Game::new(@player.game_name, @player, rival, board)
end
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+require 'shogi_server/handicapped_boards'
+
module ShogiServer # for a namespace
######################################################
end
end
+ # Check if a game name str is a handicapped game.
+ # @return a subclass of Board coresponding to the handicapped game; false,
+ # otherwise.
+ #
+ def Login.handicapped_game_name?(str)
+ return false unless good_game_name?(str)
+ ret = nil
+
+ case str
+ when %r!^hclance_!
+ ret = HCKYBoard
+ when %r!^hcbishop_!
+ ret = HCKABoard
+ when %r!^hcrook_!
+ ret = HCHIBoard
+ when %r!^hcrooklance_!
+ ret = HCHIKYBoard
+ when %r!^hc2p_!
+ ret = HC2PBoard
+ when %r!^hc4p_!
+ ret = HC4PBoard
+ when %r!^hc6p_!
+ ret = HC6PBoard
+ when %r!^hc8p_!
+ ret = HC8PBoard
+ when %r!^hc10p_!
+ ret = HC10PBoard
+ else
+ ret = false
+ end
+ return ret
+ end
+
def Login.good_identifier?(str)
if str =~ /\A[\w\d_@\-\.]{1,#{Max_Identifier_Length}}\z/
return true
--- /dev/null
+$:.unshift File.join(File.dirname(__FILE__), "..")
+
+require 'test/unit'
+require 'shogi_server'
+require 'shogi_server/handicapped_boards'
+
+class TestHandicappedGameName < Test::Unit::TestCase
+
+ def test_hclance
+ klass = ShogiServer::Login.handicapped_game_name?("hclance_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * +KA * * * * * +HI *
+P9 * +KE+GI+KI+OU+KI+GI+KE+KY
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hcbishop
+ klass = ShogiServer::Login.handicapped_game_name?("hcbishop_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * +HI *
+P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hcrook
+ klass = ShogiServer::Login.handicapped_game_name?("hcrook_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * +KA * * * * * * *
+P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hcrooklance
+ klass = ShogiServer::Login.handicapped_game_name?("hcrooklance_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * +KA * * * * * * *
+P9 * +KE+GI+KI+OU+KI+GI+KE+KY
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hc2p
+ klass = ShogiServer::Login.handicapped_game_name?("hc2p_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * * *
+P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hc4p
+ klass = ShogiServer::Login.handicapped_game_name?("hc4p_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * * *
+P9 * +KE+GI+KI+OU+KI+GI+KE *
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hc6p
+ klass = ShogiServer::Login.handicapped_game_name?("hc6p_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * * *
+P9 * * +GI+KI+OU+KI+GI * *
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hc8p
+ klass = ShogiServer::Login.handicapped_game_name?("hc8p_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * * *
+P9 * * * +KI+OU+KI * * *
++
+EOF
+ assert_equal(answer, str)
+ end
+
+ def test_hc10p
+ klass = ShogiServer::Login.handicapped_game_name?("hc10p_hoge-900-0")
+ board = klass.new
+ board.initial
+ str = board.to_s
+ answer = <<EOF
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI * * * * * -KA *
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 * * * * * * * * *
+P5 * * * * * * * * *
+P6 * * * * * * * * *
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * * * * * * * * *
+P9 * * * * +OU * * * *
++
+EOF
+ assert_equal(answer, str)
+ end
+
+end
+