game_package 0.1.1 → 1.0.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/Gemfile.lock +1 -1
- data/exe/sanmoku_narabe +11 -0
- data/lib/game_package.rb +2 -1
- data/lib/game_package/sanmoku_narabe.rb +143 -0
- data/lib/game_package/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8b8ed7ccf359d859e76d82a85d503b11d880c19c89538fee379a9e644d9d76ec
|
|
4
|
+
data.tar.gz: 2d44e9af5affecc43e86112d77579dcb6cfe22c003fe55d20b6958741bdbd9cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0bfdf4f32ce07dd8495f50ef4cb758df907dc082864681199079a3262e70ef3ee017f113f390d0895f5d1ac0ca0dfe71fa38ec21373791a3b40353ee37396f2f
|
|
7
|
+
data.tar.gz: 40b7a14cee93938b9f7fc1ce1b0496ca5aa6ea7b3e91cd9fadcea1af26ed4955425ebaaa9d562c05883d12e5d410b4e8a76a5c44cc69250074934f26ae816980
|
data/Gemfile.lock
CHANGED
data/exe/sanmoku_narabe
ADDED
data/lib/game_package.rb
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
require 'game_package/janken'
|
|
1
|
+
require 'game_package/janken'
|
|
2
|
+
require 'game_package/sanmoku_narabe'
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require "game_package/version"
|
|
2
|
+
|
|
3
|
+
module GamePackage
|
|
4
|
+
module SanmokuNarabe
|
|
5
|
+
|
|
6
|
+
WHITE = '○'
|
|
7
|
+
BLACK = '●'
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
|
|
11
|
+
def start
|
|
12
|
+
bord_info = [nil]*9
|
|
13
|
+
puts "三目並べをはじめます\n"
|
|
14
|
+
puts "先攻か後攻かランダムか決めてください\n"
|
|
15
|
+
puts "先攻:0\n後攻:1\nランダム: 2"
|
|
16
|
+
player_order = gets.to_i
|
|
17
|
+
player_order = [0, 1].sample if player_order == 2
|
|
18
|
+
puts "あなたは#{convert_player_order(player_order)}です。"
|
|
19
|
+
|
|
20
|
+
if player_order == 0
|
|
21
|
+
loop do
|
|
22
|
+
bord_info = player_turn(bord_info, player_order)
|
|
23
|
+
break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu'
|
|
24
|
+
bord_info = computer_turn(bord_info, player_order)
|
|
25
|
+
break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu'
|
|
26
|
+
end
|
|
27
|
+
else
|
|
28
|
+
loop do
|
|
29
|
+
bord_info = computer_turn(bord_info, player_order)
|
|
30
|
+
break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu'
|
|
31
|
+
bord_info = player_turn(bord_info, player_order)
|
|
32
|
+
break judgement(bord_info, player_order) unless judgement(bord_info, player_order) == 'continu'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def convert_player_order(player_order)
|
|
38
|
+
return '先攻' if player_order.zero?
|
|
39
|
+
|
|
40
|
+
'後攻'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def current_bord(bord_info)
|
|
44
|
+
conversion_bord = conversion_bord_info(bord_info)
|
|
45
|
+
|
|
46
|
+
<<-EOS
|
|
47
|
+
| #{conversion_bord[0]} | #{conversion_bord[1]} | #{conversion_bord[2]} |
|
|
48
|
+
|-----------|
|
|
49
|
+
| #{conversion_bord[3]} | #{conversion_bord[4]} | #{conversion_bord[5]} |
|
|
50
|
+
|-----------|
|
|
51
|
+
| #{conversion_bord[6]} | #{conversion_bord[7]} | #{conversion_bord[8]} |
|
|
52
|
+
EOS
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def conversion_bord_info(bord_info)
|
|
56
|
+
bord_info.map.with_index do |stone, i|
|
|
57
|
+
if stone == 'w'
|
|
58
|
+
WHITE
|
|
59
|
+
elsif stone == 'b'
|
|
60
|
+
BLACK
|
|
61
|
+
else
|
|
62
|
+
i
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def player_turn(bord_info, player_order)
|
|
68
|
+
puts 'あなたの番です'
|
|
69
|
+
|
|
70
|
+
select_number = loop do
|
|
71
|
+
puts current_bord(bord_info)
|
|
72
|
+
puts 'どこを選択しますか?'
|
|
73
|
+
select_number = gets.to_i
|
|
74
|
+
break select_number if (0..8).to_a.include?(select_number) && bord_info[select_number].nil?
|
|
75
|
+
|
|
76
|
+
puts "選択した場所はすでに選択されているか存在しません\nもう一度選択してください"
|
|
77
|
+
end
|
|
78
|
+
bord_info[select_number] = player_order.zero? ? 'w' : 'b'
|
|
79
|
+
bord_info
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def computer_turn(bord_info, player_order)
|
|
83
|
+
puts 'コンピューターの番です'
|
|
84
|
+
3.times { |i| puts '.'; sleep(1) }
|
|
85
|
+
select_number = computer_select(bord_info)
|
|
86
|
+
bord_info[select_number] = player_order.zero? ? 'b' : 'w'
|
|
87
|
+
puts "コンピューターは#{select_number}を選択しました"
|
|
88
|
+
bord_info
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def computer_select(bord_info)
|
|
92
|
+
unspecified_space = bord_info.map.with_index { |space, i| i if space.nil? }
|
|
93
|
+
unspecified_space.compact.sample
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def check_bord(bord_info)
|
|
97
|
+
bord_lines = bord_info.each_slice(3).to_a
|
|
98
|
+
bord_columns = bord_columns(bord_lines)
|
|
99
|
+
bord_oblique = bord_oblique(bord_lines)
|
|
100
|
+
bord_lines.concat(bord_columns).concat(bord_oblique)
|
|
101
|
+
|
|
102
|
+
judgement = { align: false, color: nil }
|
|
103
|
+
bord_lines.each do |line|
|
|
104
|
+
if line.all?('w') || line.all?('b')
|
|
105
|
+
judgement[:align] = true
|
|
106
|
+
judgement[:color] = line.all?('w') ? 'w' : 'b'
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
judgement
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def bord_columns(bord_lines)
|
|
113
|
+
bord_columns = []
|
|
114
|
+
bord_columns[0] = bord_lines.map { |line| line[0] }
|
|
115
|
+
bord_columns[1] = bord_lines.map { |line| line[1] }
|
|
116
|
+
bord_columns[2] = bord_lines.map { |line| line[2] }
|
|
117
|
+
bord_columns
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def bord_oblique(bord_lines)
|
|
121
|
+
bord_oblique = []
|
|
122
|
+
bord_oblique[0] = bord_lines.map.with_index { |line, i| line[i] }
|
|
123
|
+
bord_oblique[1] = bord_lines.reverse.map.with_index { |line, i| line[i] }
|
|
124
|
+
bord_oblique
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def judgement(bord_info, player_order)
|
|
128
|
+
return 'draw' unless bord_info.include?(nil)
|
|
129
|
+
|
|
130
|
+
judgement = check_bord(bord_info)
|
|
131
|
+
return 'win' if judgement[:align] && player_order == 0 && judgement[:color] == 'w' ||
|
|
132
|
+
judgement[:align] && player_order == 1 && judgement[:color] == 'b'
|
|
133
|
+
return 'lose' if judgement[:align] && player_order == 0 && judgement[:color] == 'b' ||
|
|
134
|
+
judgement[:align] && player_order == 1 && judgement[:color] == 'w'
|
|
135
|
+
|
|
136
|
+
'continu'
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
private_class_method :convert_player_order, :current_bord, :conversion_bord_info, :player_turn,
|
|
141
|
+
:computer_turn, :check_bord, :bord_columns, :bord_oblique, :judgement
|
|
142
|
+
end
|
|
143
|
+
end
|
data/lib/game_package/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: game_package
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- YukihiroTakayama
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-06-
|
|
11
|
+
date: 2020-06-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Game package
|
|
14
14
|
email:
|
|
15
15
|
- ''
|
|
16
16
|
executables:
|
|
17
17
|
- janken
|
|
18
|
+
- sanmoku_narabe
|
|
18
19
|
extensions: []
|
|
19
20
|
extra_rdoc_files: []
|
|
20
21
|
files:
|
|
@@ -30,9 +31,11 @@ files:
|
|
|
30
31
|
- bin/console
|
|
31
32
|
- bin/setup
|
|
32
33
|
- exe/janken
|
|
34
|
+
- exe/sanmoku_narabe
|
|
33
35
|
- game_package.gemspec
|
|
34
36
|
- lib/game_package.rb
|
|
35
37
|
- lib/game_package/janken.rb
|
|
38
|
+
- lib/game_package/sanmoku_narabe.rb
|
|
36
39
|
- lib/game_package/version.rb
|
|
37
40
|
homepage: https://github.com/YukihiroTakayama
|
|
38
41
|
licenses:
|