console-reversi 0.3.0 → 0.4.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 +4 -4
- data/README.md +10 -0
- data/bin/console-reversi +6 -1
- data/console-reversi.gemspec +1 -0
- data/lib/console_reversi.rb +28 -18
- data/lib/console_reversi/board.rb +8 -0
- data/lib/console_reversi/player.rb +13 -2
- data/lib/console_reversi/version.rb +1 -1
- metadata +15 -2
- data/lib/console_reversi/square.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad490db6ee92e754a57d3ce9cddc7fdd8b595e96
|
4
|
+
data.tar.gz: cfab7ab8f235b14d98a5497942929ae96d0e931a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9870ef7398fecbc8deadff6cbb2e663d31f0e5eb450b130bee6fe1e41c3c55ec4c6f7d6a2ebbf89ad269d7b8cd275a68e5970616e4f8d854cd9b32b76e0609f1
|
7
|
+
data.tar.gz: 5d3cf1e7db40adf99603640e05602b57b4bbf9d875a633f2e93afb6f8760e05fe812340d197667bcf8ac2f05abb20f2ca5b797d2b966970eae3c19f5b92445aa
|
data/README.md
CHANGED
@@ -24,6 +24,16 @@ Or install it yourself as:
|
|
24
24
|
$ console-reversi
|
25
25
|
```
|
26
26
|
|
27
|
+
You can select a human player or computer player
|
28
|
+
|
29
|
+
```
|
30
|
+
Choose black player's type (Use arrow keys, press Enter to select)
|
31
|
+
‣ human
|
32
|
+
computer
|
33
|
+
```
|
34
|
+
|
35
|
+
please select by using arrow keys
|
36
|
+
|
27
37
|
## Commands
|
28
38
|
|
29
39
|
* move a cursor : `direction keys`
|
data/bin/console-reversi
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'bundler/setup'
|
4
4
|
require 'console_reversi'
|
5
|
+
require 'tty'
|
5
6
|
require 'pry'
|
6
7
|
|
7
|
-
|
8
|
+
prompt = TTY::Prompt.new
|
9
|
+
black = prompt.select("Choose black player's type", ConsoleReversi::Player::TYPES)
|
10
|
+
white = prompt.select("Choose white player's type", ConsoleReversi::Player::TYPES)
|
11
|
+
|
12
|
+
ConsoleReversi.new(black, white).game_start
|
data/console-reversi.gemspec
CHANGED
data/lib/console_reversi.rb
CHANGED
@@ -9,10 +9,10 @@ require 'console_reversi/cursor_operatable'
|
|
9
9
|
class ConsoleReversi
|
10
10
|
include CursorOperatable
|
11
11
|
|
12
|
-
def initialize
|
12
|
+
def initialize(black_player_type, white_player_type)
|
13
13
|
@board = Board.new
|
14
|
-
@
|
15
|
-
@
|
14
|
+
@player1 = Player.new(piece_color: :black, type: black_player_type)
|
15
|
+
@player2 = Player.new(piece_color: :white, type: white_player_type)
|
16
16
|
end
|
17
17
|
|
18
18
|
def game_start
|
@@ -30,24 +30,34 @@ class ConsoleReversi
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
if now_player(turn_number).type == :computer
|
34
|
+
@board.plot_putable_point!(now_player(turn_number))
|
35
|
+
sleep 0.5
|
36
|
+
now_player(turn_number).put_piece_randomly!(@board)
|
37
37
|
|
38
|
-
|
38
|
+
@board.refresh_putable_point!
|
39
|
+
@board.plot_putable_point!(next_player(turn_number))
|
40
|
+
@board.pretty_print
|
41
|
+
else
|
42
|
+
move_cursor do |key|
|
43
|
+
if type_enter?(key)
|
44
|
+
position = cursor_position
|
45
|
+
board_position = {x: position[:x] / 2, y: position[:y] - 1}
|
39
46
|
|
40
|
-
|
41
|
-
now_player(turn_number).turn_pieces!(@board, x: board_position[:x], y: board_position[:y])
|
47
|
+
next if Searcher::DIRECTIONS.none? {|d| @board.putable_piece?(direction: d, piece_color: now_player(turn_number).piece_color, x: board_position[:x], y: board_position[:y]) }
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
@board.pretty_print
|
49
|
+
now_player(turn_number).put_piece_on!(@board, x: board_position[:x], y: board_position[:y])
|
50
|
+
now_player(turn_number).turn_pieces!(@board, x: board_position[:x], y: board_position[:y])
|
46
51
|
|
47
|
-
|
48
|
-
|
52
|
+
@board.refresh_putable_point!
|
53
|
+
@board.plot_putable_point!(next_player(turn_number))
|
54
|
+
@board.pretty_print
|
49
55
|
|
50
|
-
|
56
|
+
# NOTE back a cursor
|
57
|
+
print "\e[#{position[:y]};#{position[:x]}H"
|
58
|
+
|
59
|
+
break
|
60
|
+
end
|
51
61
|
end
|
52
62
|
end
|
53
63
|
end
|
@@ -60,11 +70,11 @@ class ConsoleReversi
|
|
60
70
|
private
|
61
71
|
|
62
72
|
def now_player(turn_number)
|
63
|
-
turn_number.even? ? @
|
73
|
+
turn_number.even? ? @player1 : @player2
|
64
74
|
end
|
65
75
|
|
66
76
|
def next_player(turn_number)
|
67
|
-
now_player(turn_number) == @
|
77
|
+
now_player(turn_number) == @player1 ? @player2 : @player1
|
68
78
|
end
|
69
79
|
|
70
80
|
def print_pass
|
@@ -76,6 +76,14 @@ class ConsoleReversi
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
def putable_positions
|
80
|
+
@board.each_with_object([]).with_index {|(col, positions), i|
|
81
|
+
col.each_with_index {|s, j|
|
82
|
+
positions << [i, j] if s == 1
|
83
|
+
}
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
79
87
|
private
|
80
88
|
|
81
89
|
def initialize_board
|
@@ -1,9 +1,12 @@
|
|
1
1
|
class ConsoleReversi
|
2
2
|
class Player
|
3
|
-
attr_accessor :piece_color
|
3
|
+
attr_accessor :piece_color, :type
|
4
4
|
|
5
|
-
|
5
|
+
TYPES = %i(human computer)
|
6
|
+
|
7
|
+
def initialize(piece_color:, type:)
|
6
8
|
@piece_color = piece_color.to_sym
|
9
|
+
@type = type
|
7
10
|
end
|
8
11
|
|
9
12
|
def put_piece_on!(board, x:, y:)
|
@@ -34,5 +37,13 @@ class ConsoleReversi
|
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
40
|
+
|
41
|
+
def put_piece_randomly!(board)
|
42
|
+
random_position = board.putable_positions.sample
|
43
|
+
|
44
|
+
put_piece_on!(board, x: random_position[1], y: random_position[0])
|
45
|
+
|
46
|
+
turn_pieces!(board, x: random_position[1], y: random_position[0])
|
47
|
+
end
|
37
48
|
end
|
38
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console-reversi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pekepek
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: tty
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: You can play the reversi in terminal
|
56
70
|
email:
|
57
71
|
- ishihata@33i.co.jp
|
@@ -74,7 +88,6 @@ files:
|
|
74
88
|
- lib/console_reversi/piece.rb
|
75
89
|
- lib/console_reversi/player.rb
|
76
90
|
- lib/console_reversi/searcher.rb
|
77
|
-
- lib/console_reversi/square.rb
|
78
91
|
- lib/console_reversi/version.rb
|
79
92
|
homepage: https://github.com/pekepek/console-reversi
|
80
93
|
licenses: []
|