From 19083958331eb69b1058163e59717c6671680af4 Mon Sep 17 00:00:00 2001 From: Yann Dirson Date: Thu, 9 Jul 2009 19:56:17 +0200 Subject: [PATCH] First stake at a minishogi variant. --- lib/plugins/shogi/lib/state.rb | 32 ++++++++++++++++++++++++++++++++ lib/plugins/shogi/shogi.rb | 21 ++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/lib/plugins/shogi/lib/state.rb b/lib/plugins/shogi/lib/state.rb index e5c2e1e..f1fc10e 100644 --- a/lib/plugins/shogi/lib/state.rb +++ b/lib/plugins/shogi/lib/state.rb @@ -67,6 +67,10 @@ module Shogi color == :black ? @board.size.y - 1 - i : i end + def col(i, color) + color == :black ? i : @board.size.x - 1 - i + end + def opposite_color(color) color == :black ? :white : :black end @@ -113,3 +117,31 @@ module Shogi end end end + +module MiniShogi + class State < Shogi::State + + def setup + each_color do |color| + + r = row(0, color) + set_piece = lambda do |x, type| + @board[Point.new(x, r)] = piece_factory.new(color, type) + end + set_piece[col(0,color), :king] + set_piece[col(1,color), :gold] + set_piece[col(2,color), :silver] + set_piece[col(3,color), :bishop] + set_piece[col(4,color), :rook] + + r = row(1, color) + set_piece[col(0,color), :pawn] + end + end + + def in_promotion_zone?(p, color) + (row(4, color) <=> p.y) != (color == :black ? -1 : 1) + end + + end +end diff --git a/lib/plugins/shogi/shogi.rb b/lib/plugins/shogi/shogi.rb index 09981a5..d848d7c 100644 --- a/lib/plugins/shogi/shogi.rb +++ b/lib/plugins/shogi/shogi.rb @@ -70,4 +70,23 @@ class Game end end -end \ No newline at end of file +end + +module MiniShogi + +class Game < Shogi::Game + plugin :name => 'MiniShogi', + :id => :minishogi, + :interface => :game, + :keywords => %w(shogi) + + def initialize + super + @size = Point.new(5, 5) + @state = Factory.new { State.new(board.new, pool, move, piece) } + @game_extensions = [] + end + +end + +end -- 2.11.4.GIT