just_xiangqi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/LICENSE.txt +21 -0
- data/README.md +71 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/just_xiangqi.gemspec +29 -0
- data/lib/just_xiangqi/errors/error.rb +21 -0
- data/lib/just_xiangqi/errors/invalid_move_error.rb +23 -0
- data/lib/just_xiangqi/errors/moved_into_check_error.rb +23 -0
- data/lib/just_xiangqi/errors/no_legal_moves_error.rb +23 -0
- data/lib/just_xiangqi/errors/no_piece_error.rb +23 -0
- data/lib/just_xiangqi/errors/not_players_turn_error.rb +23 -0
- data/lib/just_xiangqi/errors/off_board_error.rb +23 -0
- data/lib/just_xiangqi/errors/piece_not_found_error.rb +23 -0
- data/lib/just_xiangqi/errors/square_occupied_error.rb +23 -0
- data/lib/just_xiangqi/game_state.rb +286 -0
- data/lib/just_xiangqi/piece_factory.rb +71 -0
- data/lib/just_xiangqi/pieces/jiang.rb +31 -0
- data/lib/just_xiangqi/pieces/ju.rb +19 -0
- data/lib/just_xiangqi/pieces/ma.rb +60 -0
- data/lib/just_xiangqi/pieces/pao.rb +58 -0
- data/lib/just_xiangqi/pieces/piece.rb +14 -0
- data/lib/just_xiangqi/pieces/shi.rb +31 -0
- data/lib/just_xiangqi/pieces/xiang.rb +29 -0
- data/lib/just_xiangqi/pieces/zu.rb +43 -0
- data/lib/just_xiangqi/square.rb +41 -0
- data/lib/just_xiangqi/square_set.rb +69 -0
- data/lib/just_xiangqi/version.rb +3 -0
- data/lib/just_xiangqi.rb +9 -0
- metadata +133 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'just_xiangqi/square'
|
2
|
+
require 'board_game_grid'
|
3
|
+
|
4
|
+
module JustXiangqi
|
5
|
+
|
6
|
+
# = Square Set
|
7
|
+
#
|
8
|
+
# A collection of Squares with useful filtering functions
|
9
|
+
class SquareSet < BoardGameGrid::SquareSet
|
10
|
+
|
11
|
+
# New objects can be instantiated by passing in a hash with squares.
|
12
|
+
# They can be square objects or hashes.
|
13
|
+
#
|
14
|
+
# @param [Array<Square,Hash>] squares
|
15
|
+
# An array of squares, each with an x and y co-oordinates an a piece.
|
16
|
+
#
|
17
|
+
# ==== Example:
|
18
|
+
# # Instantiates a new Square Sete
|
19
|
+
# JustXiangqi::SquareSet.new({
|
20
|
+
# squares: [
|
21
|
+
# { id: '1', x: 0, y: 0, piece: { id: 1, player_number: 1, type: 'zu' } }
|
22
|
+
# ]
|
23
|
+
# })
|
24
|
+
def initialize(squares: )
|
25
|
+
@squares = if squares.instance_of?(Array)
|
26
|
+
if squares.all? { |s| s.instance_of?(Hash) }
|
27
|
+
squares.map { |s| Square.new(**s) }
|
28
|
+
elsif squares.all? { |s| s.instance_of?(Square) }
|
29
|
+
squares
|
30
|
+
else
|
31
|
+
raise ArgumentError, "all squares must have the same class"
|
32
|
+
end
|
33
|
+
else
|
34
|
+
raise ArgumentError, "squares must be an array"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Find the square occupied by the player's king
|
39
|
+
#
|
40
|
+
# @param [Fixnum] player_number
|
41
|
+
# the number of the player
|
42
|
+
#
|
43
|
+
# @return [Square]
|
44
|
+
# ==== Example:
|
45
|
+
# # Find the square occupied by player 2's jiang
|
46
|
+
# square_est.find_jiang_for_player(2)
|
47
|
+
def find_jiang_for_player(player_number)
|
48
|
+
find { |s| s.piece && s.piece.is_a?(JustXiangqi::Jiang) && s.occupied_by_player?(player_number) }
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns all squares threatened by the specified player
|
52
|
+
#
|
53
|
+
# @param [Fixnum] player_number
|
54
|
+
# the player's number.
|
55
|
+
#
|
56
|
+
# @param [GameState] game_state
|
57
|
+
# the current game state.
|
58
|
+
#
|
59
|
+
# @return [SquareSet]
|
60
|
+
def threatened_by(player_number, game_state)
|
61
|
+
_squares = occupied_by_player(player_number).map do |s|
|
62
|
+
s.piece.potential_capture_squares(s, game_state).squares
|
63
|
+
end.flatten.uniq
|
64
|
+
|
65
|
+
self.class.new(squares: _squares)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
data/lib/just_xiangqi.rb
ADDED
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: just_xiangqi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Humphreys
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.1.4
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.1.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 13.0.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 13.0.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 5.14.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 5.14.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: board_game_grid
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.9
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.1.9
|
69
|
+
description: Provides a representation of a xiangqi game complete with rules enforcement
|
70
|
+
and serialisation.
|
71
|
+
email:
|
72
|
+
- mark@mrlhumphreys.com
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- CODE_OF_CONDUCT.md
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- LICENSE.txt
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
84
|
+
- bin/console
|
85
|
+
- bin/setup
|
86
|
+
- just_xiangqi.gemspec
|
87
|
+
- lib/just_xiangqi.rb
|
88
|
+
- lib/just_xiangqi/errors/error.rb
|
89
|
+
- lib/just_xiangqi/errors/invalid_move_error.rb
|
90
|
+
- lib/just_xiangqi/errors/moved_into_check_error.rb
|
91
|
+
- lib/just_xiangqi/errors/no_legal_moves_error.rb
|
92
|
+
- lib/just_xiangqi/errors/no_piece_error.rb
|
93
|
+
- lib/just_xiangqi/errors/not_players_turn_error.rb
|
94
|
+
- lib/just_xiangqi/errors/off_board_error.rb
|
95
|
+
- lib/just_xiangqi/errors/piece_not_found_error.rb
|
96
|
+
- lib/just_xiangqi/errors/square_occupied_error.rb
|
97
|
+
- lib/just_xiangqi/game_state.rb
|
98
|
+
- lib/just_xiangqi/piece_factory.rb
|
99
|
+
- lib/just_xiangqi/pieces/jiang.rb
|
100
|
+
- lib/just_xiangqi/pieces/ju.rb
|
101
|
+
- lib/just_xiangqi/pieces/ma.rb
|
102
|
+
- lib/just_xiangqi/pieces/pao.rb
|
103
|
+
- lib/just_xiangqi/pieces/piece.rb
|
104
|
+
- lib/just_xiangqi/pieces/shi.rb
|
105
|
+
- lib/just_xiangqi/pieces/xiang.rb
|
106
|
+
- lib/just_xiangqi/pieces/zu.rb
|
107
|
+
- lib/just_xiangqi/square.rb
|
108
|
+
- lib/just_xiangqi/square_set.rb
|
109
|
+
- lib/just_xiangqi/version.rb
|
110
|
+
homepage: https://github.com/mrlhumphreys/just_xiangqi
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 2.7.0
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubygems_version: 3.1.2
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: A Xiangqi engine written in ruby
|
133
|
+
test_files: []
|