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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1165fb5a5325aec701bfc64aa3c56464e8b3980913a0e4be7cdc8a201056635
4
- data.tar.gz: 9a7e80031936b5cc4abf158f35160da748d9975421a2fa9c18a13bf181be5b81
3
+ metadata.gz: 8b8ed7ccf359d859e76d82a85d503b11d880c19c89538fee379a9e644d9d76ec
4
+ data.tar.gz: 2d44e9af5affecc43e86112d77579dcb6cfe22c003fe55d20b6958741bdbd9cf
5
5
  SHA512:
6
- metadata.gz: 674b5174bab15f4ef8bc98f4d4a8004745f1a4dc189e474f480c6bc4021fe1c78fea021a749ffefc11fe8306e034b229f9acd58a0176920878b8144d1a7658ab
7
- data.tar.gz: b48ffa7ec0f184d47ac6ea3192594a358e44eaa52ac599a05ec114c7d1a7c63edb8eb1756078d487773d1bdea71e2a19eb84ec4d345425c041aec5a556ae9853
6
+ metadata.gz: 0bfdf4f32ce07dd8495f50ef4cb758df907dc082864681199079a3262e70ef3ee017f113f390d0895f5d1ac0ca0dfe71fa38ec21373791a3b40353ee37396f2f
7
+ data.tar.gz: 40b7a14cee93938b9f7fc1ce1b0496ca5aa6ea7b3e91cd9fadcea1af26ed4955425ebaaa9d562c05883d12e5d410b4e8a76a5c44cc69250074934f26ae816980
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- game_package (0.1.1)
4
+ game_package (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "game_package/sanmoku_narabe"
5
+
6
+ result = GamePackage::SanmokuNarabe.start
7
+
8
+ return puts 'あなたの勝ちです' if result == 'win'
9
+ return puts 'あなたの負けです' if result == 'lose'
10
+
11
+ puts '引き分けです'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module GamePackage
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
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.1.1
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-15 00:00:00.000000000 Z
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: