bioshogi 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (820) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.ruby-version +3 -0
  4. data/.travis.yml +14 -0
  5. data/Brewfile +2 -0
  6. data/Gemfile +2 -0
  7. data/Gemfile.lock +135 -0
  8. data/LICENSE +661 -0
  9. data/NEW_README.md +27 -0
  10. data/README.org +711 -0
  11. data/Rakefile +3 -0
  12. data/bin/bioshogi +3 -0
  13. data/bioshogi.gemspec +44 -0
  14. data/bioshogi.png +0 -0
  15. data/credit.org +6 -0
  16. data/lib/bioshogi/ai/brain.rb +202 -0
  17. data/lib/bioshogi/ai/diver/base.rb +114 -0
  18. data/lib/bioshogi/ai/diver/nega_alpha_diver.rb +122 -0
  19. data/lib/bioshogi/ai/diver/nega_alpha_mate_diver.rb +212 -0
  20. data/lib/bioshogi/ai/diver/nega_max_diver.rb +58 -0
  21. data/lib/bioshogi/ai/diver/nega_scout_diver.rb +120 -0
  22. data/lib/bioshogi/ai/evaluator/attack_weight_table.rb +52 -0
  23. data/lib/bioshogi/ai/evaluator/base.rb +40 -0
  24. data/lib/bioshogi/ai/evaluator/level0.rb +25 -0
  25. data/lib/bioshogi/ai/evaluator/level1.rb +26 -0
  26. data/lib/bioshogi/ai/evaluator/level2.rb +31 -0
  27. data/lib/bioshogi/ai/evaluator/level3.rb +121 -0
  28. data/lib/bioshogi/ai/evaluator/level4.rb +43 -0
  29. data/lib/bioshogi/ai/evaluator/opening_basic_table.rb +108 -0
  30. data/lib/bioshogi/ai/player_brain_mod.rb +142 -0
  31. data/lib/bioshogi/ai.rb +5 -0
  32. data/lib/bioshogi/application_memory_record.rb +28 -0
  33. data/lib/bioshogi/assertion.rb +20 -0
  34. data/lib/bioshogi/assets/audios/any.band/Alternatives/000/DisplayState.plist +0 -0
  35. data/lib/bioshogi/assets/audios/any.band/Alternatives/000/DisplayStateArchive +0 -0
  36. data/lib/bioshogi/assets/audios/any.band/Alternatives/000/MetaData.plist +0 -0
  37. data/lib/bioshogi/assets/audios/any.band/Alternatives/000/ProjectData +0 -0
  38. data/lib/bioshogi/assets/audios/any.band/Alternatives/000/WindowImage.jpg +0 -0
  39. data/lib/bioshogi/assets/audios/any.band/Media/Audio Files/Strategy.caf +0 -0
  40. data/lib/bioshogi/assets/audios/any.band/Resources/ProjectInformation.plist +0 -0
  41. data/lib/bioshogi/assets/audios/any.band/projectData +3183 -0
  42. data/lib/bioshogi/assets/audios/blank.m4a +0 -0
  43. data/lib/bioshogi/assets/audios/blank.wav +0 -0
  44. data/lib/bioshogi/assets/audios/blank1.m4a +0 -0
  45. data/lib/bioshogi/assets/audios/blank2.m4a +0 -0
  46. data/lib/bioshogi/assets/audios/blank3.m4a +0 -0
  47. data/lib/bioshogi/assets/audios/breakbeat_long.band/Alternatives/000/DisplayState.plist +0 -0
  48. data/lib/bioshogi/assets/audios/breakbeat_long.band/Alternatives/000/DisplayStateArchive +0 -0
  49. data/lib/bioshogi/assets/audios/breakbeat_long.band/Alternatives/000/MetaData.plist +0 -0
  50. data/lib/bioshogi/assets/audios/breakbeat_long.band/Alternatives/000/ProjectData +0 -0
  51. data/lib/bioshogi/assets/audios/breakbeat_long.band/Alternatives/000/WindowImage.jpg +0 -0
  52. data/lib/bioshogi/assets/audios/breakbeat_long.band/Resources/ProjectInformation.plist +0 -0
  53. data/lib/bioshogi/assets/audios/breakbeat_long.band/projectData +3183 -0
  54. data/lib/bioshogi/assets/audios/breakbeat_long.m4a +0 -0
  55. data/lib/bioshogi/assets/audios/breakbeat_long_old.m4a +0 -0
  56. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Alternatives/000/DisplayState.plist +0 -0
  57. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Alternatives/000/DisplayStateArchive +0 -0
  58. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Alternatives/000/MetaData.plist +0 -0
  59. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Alternatives/000/ProjectData +0 -0
  60. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Alternatives/000/WindowImage.jpg +0 -0
  61. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Media/Audio Files/Strategy.caf +0 -0
  62. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/Resources/ProjectInformation.plist +0 -0
  63. data/lib/bioshogi/assets/audios/breakbeat_long_strip.band/projectData +3183 -0
  64. data/lib/bioshogi/assets/audios/breakbeat_long_strip.m4a +0 -0
  65. data/lib/bioshogi/assets/audios/china_like.band/Alternatives/000/DisplayState.plist +0 -0
  66. data/lib/bioshogi/assets/audios/china_like.band/Alternatives/000/DisplayStateArchive +0 -0
  67. data/lib/bioshogi/assets/audios/china_like.band/Alternatives/000/MetaData.plist +0 -0
  68. data/lib/bioshogi/assets/audios/china_like.band/Alternatives/000/ProjectData +0 -0
  69. data/lib/bioshogi/assets/audios/china_like.band/Alternatives/000/WindowImage.jpg +0 -0
  70. data/lib/bioshogi/assets/audios/china_like.band/Resources/ProjectInformation.plist +0 -0
  71. data/lib/bioshogi/assets/audios/china_like.band/projectData +3183 -0
  72. data/lib/bioshogi/assets/audios/china_like_a.m4a +0 -0
  73. data/lib/bioshogi/assets/audios/china_like_b.m4a +0 -0
  74. data/lib/bioshogi/assets/audios/convert.sh +52 -0
  75. data/lib/bioshogi/assets/audios/diamond_shark.m4a +0 -0
  76. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Alternatives/000/DisplayState.plist +0 -0
  77. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Alternatives/000/DisplayStateArchive +0 -0
  78. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Alternatives/000/MetaData.plist +0 -0
  79. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Alternatives/000/ProjectData +0 -0
  80. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Alternatives/000/WindowImage.jpg +0 -0
  81. data/lib/bioshogi/assets/audios/digit_blast_layers.band/Resources/ProjectInformation.plist +0 -0
  82. data/lib/bioshogi/assets/audios/digit_blast_layers.band/projectData +3183 -0
  83. data/lib/bioshogi/assets/audios/ds1022.m4a +0 -0
  84. data/lib/bioshogi/assets/audios/ds1022.mp3 +0 -0
  85. data/lib/bioshogi/assets/audios/ds10827.m4a +0 -0
  86. data/lib/bioshogi/assets/audios/ds10827.mp3 +0 -0
  87. data/lib/bioshogi/assets/audios/ds11184.m4a +0 -0
  88. data/lib/bioshogi/assets/audios/ds11184.mp3 +0 -0
  89. data/lib/bioshogi/assets/audios/ds13037.m4a +0 -0
  90. data/lib/bioshogi/assets/audios/ds13037.mp3 +0 -0
  91. data/lib/bioshogi/assets/audios/ds13513.m4a +0 -0
  92. data/lib/bioshogi/assets/audios/ds13513.mp3 +0 -0
  93. data/lib/bioshogi/assets/audios/ds14640.m4a +0 -0
  94. data/lib/bioshogi/assets/audios/ds14640.mp3 +0 -0
  95. data/lib/bioshogi/assets/audios/ds1982.m4a +0 -0
  96. data/lib/bioshogi/assets/audios/ds1982.mp3 +0 -0
  97. data/lib/bioshogi/assets/audios/ds2142.m4a +0 -0
  98. data/lib/bioshogi/assets/audios/ds2142.mp3 +0 -0
  99. data/lib/bioshogi/assets/audios/ds3479.m4a +0 -0
  100. data/lib/bioshogi/assets/audios/ds3479.mp3 +0 -0
  101. data/lib/bioshogi/assets/audios/ds3480.m4a +0 -0
  102. data/lib/bioshogi/assets/audios/ds3480.mp3 +0 -0
  103. data/lib/bioshogi/assets/audios/ds3812.m4a +0 -0
  104. data/lib/bioshogi/assets/audios/ds3812.mp3 +0 -0
  105. data/lib/bioshogi/assets/audios/ds3895.m4a +0 -0
  106. data/lib/bioshogi/assets/audios/ds3895.mp3 +0 -0
  107. data/lib/bioshogi/assets/audios/ds4520.m4a +0 -0
  108. data/lib/bioshogi/assets/audios/ds4520.mp3 +0 -0
  109. data/lib/bioshogi/assets/audios/ds4616.m4a +0 -0
  110. data/lib/bioshogi/assets/audios/ds4616.mp3 +0 -0
  111. data/lib/bioshogi/assets/audios/ds5615.m4a +0 -0
  112. data/lib/bioshogi/assets/audios/ds5615.mp3 +0 -0
  113. data/lib/bioshogi/assets/audios/ds5616.m4a +0 -0
  114. data/lib/bioshogi/assets/audios/ds5616.mp3 +0 -0
  115. data/lib/bioshogi/assets/audios/ds568.m4a +0 -0
  116. data/lib/bioshogi/assets/audios/ds568.mp3 +0 -0
  117. data/lib/bioshogi/assets/audios/ds7138.m4a +0 -0
  118. data/lib/bioshogi/assets/audios/ds7138.mp3 +0 -0
  119. data/lib/bioshogi/assets/audios/ds8705.m4a +0 -0
  120. data/lib/bioshogi/assets/audios/ds8705.mp3 +0 -0
  121. data/lib/bioshogi/assets/audios/foo.band/Alternatives/000/DisplayState.plist +0 -0
  122. data/lib/bioshogi/assets/audios/foo.band/Alternatives/000/DisplayStateArchive +0 -0
  123. data/lib/bioshogi/assets/audios/foo.band/Alternatives/000/MetaData.plist +0 -0
  124. data/lib/bioshogi/assets/audios/foo.band/Alternatives/000/ProjectData +0 -0
  125. data/lib/bioshogi/assets/audios/foo.band/Alternatives/000/WindowImage.jpg +0 -0
  126. data/lib/bioshogi/assets/audios/foo.band/Media/Audio Files/Strategy.caf +0 -0
  127. data/lib/bioshogi/assets/audios/foo.band/Resources/ProjectInformation.plist +0 -0
  128. data/lib/bioshogi/assets/audios/foo.band/projectData +3183 -0
  129. data/lib/bioshogi/assets/audios/headspin_long.band/Alternatives/000/DisplayState.plist +0 -0
  130. data/lib/bioshogi/assets/audios/headspin_long.band/Alternatives/000/DisplayStateArchive +0 -0
  131. data/lib/bioshogi/assets/audios/headspin_long.band/Alternatives/000/MetaData.plist +0 -0
  132. data/lib/bioshogi/assets/audios/headspin_long.band/Alternatives/000/ProjectData +0 -0
  133. data/lib/bioshogi/assets/audios/headspin_long.band/Alternatives/000/WindowImage.jpg +0 -0
  134. data/lib/bioshogi/assets/audios/headspin_long.band/Resources/ProjectInformation.plist +0 -0
  135. data/lib/bioshogi/assets/audios/headspin_long.band/projectData +3183 -0
  136. data/lib/bioshogi/assets/audios/headspin_long.m4a +0 -0
  137. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Alternatives/000/DisplayState.plist +0 -0
  138. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Alternatives/000/DisplayStateArchive +0 -0
  139. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Alternatives/000/MetaData.plist +0 -0
  140. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Alternatives/000/ProjectData +0 -0
  141. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Alternatives/000/WindowImage.jpg +0 -0
  142. data/lib/bioshogi/assets/audios/loop_bgm_i.band/Resources/ProjectInformation.plist +0 -0
  143. data/lib/bioshogi/assets/audios/loop_bgm_i.band/projectData +3183 -0
  144. data/lib/bioshogi/assets/audios/mastermind.band/Alternatives/000/DisplayState.plist +0 -0
  145. data/lib/bioshogi/assets/audios/mastermind.band/Alternatives/000/DisplayStateArchive +0 -0
  146. data/lib/bioshogi/assets/audios/mastermind.band/Alternatives/000/MetaData.plist +0 -0
  147. data/lib/bioshogi/assets/audios/mastermind.band/Alternatives/000/ProjectData +0 -0
  148. data/lib/bioshogi/assets/audios/mastermind.band/Alternatives/000/WindowImage.jpg +0 -0
  149. data/lib/bioshogi/assets/audios/mastermind.band/Resources/ProjectInformation.plist +0 -0
  150. data/lib/bioshogi/assets/audios/mastermind.band/projectData +3183 -0
  151. data/lib/bioshogi/assets/audios/mastermind.m4a +0 -0
  152. data/lib/bioshogi/assets/audios/nc105702.m4a +0 -0
  153. data/lib/bioshogi/assets/audios/nc105702.mp3 +0 -0
  154. data/lib/bioshogi/assets/audios/nc142538.m4a +0 -0
  155. data/lib/bioshogi/assets/audios/nc142538.mp3 +0 -0
  156. data/lib/bioshogi/assets/audios/nc162705.m4a +0 -0
  157. data/lib/bioshogi/assets/audios/nc162705.mp3 +0 -0
  158. data/lib/bioshogi/assets/audios/nc799.m4a +0 -0
  159. data/lib/bioshogi/assets/audios/nc799.mp3 +0 -0
  160. data/lib/bioshogi/assets/audios/nc97718.m4a +0 -0
  161. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/Autosave/.dummy +0 -0
  162. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/Autosave/2021-08-19 05:25:23Z.displayData +0 -0
  163. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/Autosave/2021-08-19 05:25:23Z.eventData +0 -0
  164. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/Autosave/2021-08-19 05:25:23Z.songData +0 -0
  165. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/DisplayState.plist +0 -0
  166. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/DisplayStateArchive +0 -0
  167. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/MetaData.plist +0 -0
  168. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/ProjectData +0 -0
  169. data/lib/bioshogi/assets/audios/positive_think.band/Alternatives/000/WindowImage.jpg +0 -0
  170. data/lib/bioshogi/assets/audios/positive_think.band/Resources/ProjectInformation.plist +0 -0
  171. data/lib/bioshogi/assets/audios/positive_think.band/projectData +3183 -0
  172. data/lib/bioshogi/assets/audios/positive_think.m4a +0 -0
  173. data/lib/bioshogi/assets/audios/shw_akatsuki_japan.m4a +0 -0
  174. data/lib/bioshogi/assets/audios/shw_akatsuki_japan.mp3 +0 -0
  175. data/lib/bioshogi/assets/audios/stg_like_type1.band/Alternatives/000/DisplayState.plist +0 -0
  176. data/lib/bioshogi/assets/audios/stg_like_type1.band/Alternatives/000/DisplayStateArchive +0 -0
  177. data/lib/bioshogi/assets/audios/stg_like_type1.band/Alternatives/000/MetaData.plist +0 -0
  178. data/lib/bioshogi/assets/audios/stg_like_type1.band/Alternatives/000/ProjectData +0 -0
  179. data/lib/bioshogi/assets/audios/stg_like_type1.band/Alternatives/000/WindowImage.jpg +0 -0
  180. data/lib/bioshogi/assets/audios/stg_like_type1.band/Resources/ProjectInformation.plist +0 -0
  181. data/lib/bioshogi/assets/audios/stg_like_type1.band/projectData +3183 -0
  182. data/lib/bioshogi/assets/audios/stg_like_type1a.m4a +0 -0
  183. data/lib/bioshogi/assets/audios/stg_like_type1b.m4a +0 -0
  184. data/lib/bioshogi/assets/audios/strategy.band/Alternatives/000/DisplayState.plist +0 -0
  185. data/lib/bioshogi/assets/audios/strategy.band/Alternatives/000/DisplayStateArchive +0 -0
  186. data/lib/bioshogi/assets/audios/strategy.band/Alternatives/000/MetaData.plist +0 -0
  187. data/lib/bioshogi/assets/audios/strategy.band/Alternatives/000/ProjectData +0 -0
  188. data/lib/bioshogi/assets/audios/strategy.band/Alternatives/000/WindowImage.jpg +0 -0
  189. data/lib/bioshogi/assets/audios/strategy.band/Media/Audio Files/Strategy.caf +0 -0
  190. data/lib/bioshogi/assets/audios/strategy.band/Resources/ProjectInformation.plist +0 -0
  191. data/lib/bioshogi/assets/audios/strategy.band/projectData +3183 -0
  192. data/lib/bioshogi/assets/audios/strategy.m4a +0 -0
  193. data/lib/bioshogi/assets/audios/test1.band/Alternatives/000/DisplayState.plist +0 -0
  194. data/lib/bioshogi/assets/audios/test1.band/Alternatives/000/DisplayStateArchive +0 -0
  195. data/lib/bioshogi/assets/audios/test1.band/Alternatives/000/MetaData.plist +0 -0
  196. data/lib/bioshogi/assets/audios/test1.band/Alternatives/000/ProjectData +0 -0
  197. data/lib/bioshogi/assets/audios/test1.band/Alternatives/000/WindowImage.jpg +0 -0
  198. data/lib/bioshogi/assets/audios/test1.band/Resources/ProjectInformation.plist +0 -0
  199. data/lib/bioshogi/assets/audios/test1.band/projectData +3183 -0
  200. data/lib/bioshogi/assets/audios/test2.band/Alternatives/000/DisplayState.plist +0 -0
  201. data/lib/bioshogi/assets/audios/test2.band/Alternatives/000/DisplayStateArchive +0 -0
  202. data/lib/bioshogi/assets/audios/test2.band/Alternatives/000/MetaData.plist +0 -0
  203. data/lib/bioshogi/assets/audios/test2.band/Alternatives/000/ProjectData +0 -0
  204. data/lib/bioshogi/assets/audios/test2.band/Alternatives/000/WindowImage.jpg +0 -0
  205. data/lib/bioshogi/assets/audios/test2.band/Resources/ProjectInformation.plist +0 -0
  206. data/lib/bioshogi/assets/audios/test2.band/projectData +3183 -0
  207. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Black.ttf +0 -0
  208. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Bold.ttf +0 -0
  209. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-ExtraBold.ttf +0 -0
  210. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Light.ttf +0 -0
  211. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Medium.ttf +0 -0
  212. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Regular.ttf +0 -0
  213. data/lib/bioshogi/assets/fonts/MPLUSRounded1c-Thin.ttf +0 -0
  214. data/lib/bioshogi/assets/fonts/NewTegomin-Regular.ttf +0 -0
  215. data/lib/bioshogi/assets/fonts/NotoSansJP-Black.otf +0 -0
  216. data/lib/bioshogi/assets/fonts/NotoSansJP-Bold.otf +0 -0
  217. data/lib/bioshogi/assets/fonts/NotoSansJP-Light.otf +0 -0
  218. data/lib/bioshogi/assets/fonts/NotoSansJP-Medium.otf +0 -0
  219. data/lib/bioshogi/assets/fonts/NotoSansJP-Regular.otf +0 -0
  220. data/lib/bioshogi/assets/fonts/NotoSansJP-Thin.otf +0 -0
  221. data/lib/bioshogi/assets/fonts/NotoSerifJP-Black.otf +0 -0
  222. data/lib/bioshogi/assets/fonts/NotoSerifJP-Bold.otf +0 -0
  223. data/lib/bioshogi/assets/fonts/NotoSerifJP-ExtraLight.otf +0 -0
  224. data/lib/bioshogi/assets/fonts/NotoSerifJP-Light.otf +0 -0
  225. data/lib/bioshogi/assets/fonts/NotoSerifJP-Medium.otf +0 -0
  226. data/lib/bioshogi/assets/fonts/NotoSerifJP-Regular.otf +0 -0
  227. data/lib/bioshogi/assets/fonts/NotoSerifJP-SemiBold.otf +0 -0
  228. data/lib/bioshogi/assets/fonts/README.org +9 -0
  229. data/lib/bioshogi/assets/fonts/RictyDiminished-Bold.ttf +0 -0
  230. data/lib/bioshogi/assets/fonts/RictyDiminished-Regular.ttf +0 -0
  231. data/lib/bioshogi/assets/fonts/YuseiMagic-Regular.ttf +0 -0
  232. data/lib/bioshogi/assets/images/README.org +0 -0
  233. data/lib/bioshogi/assets/images/background/README.org +9 -0
  234. data/lib/bioshogi/assets/images/background/background_a.png +0 -0
  235. data/lib/bioshogi/assets/images/board/README.org +7 -0
  236. data/lib/bioshogi/assets/images/board/board_a.png +0 -0
  237. data/lib/bioshogi/assets/images/color_theme_preview/is_color_theme_club24.png +0 -0
  238. data/lib/bioshogi/assets/images/color_theme_preview/is_color_theme_paper.png +0 -0
  239. data/lib/bioshogi/assets/images/color_theme_preview/is_color_theme_piyo.png +0 -0
  240. data/lib/bioshogi/assets/images/color_theme_preview/is_color_theme_real.png +0 -0
  241. data/lib/bioshogi/assets/images/color_theme_preview/is_color_theme_shape.png +0 -0
  242. data/lib/bioshogi/assets/images/piece/Portella/BB0.png +0 -0
  243. data/lib/bioshogi/assets/images/piece/Portella/BB1.png +0 -0
  244. data/lib/bioshogi/assets/images/piece/Portella/BG0.png +0 -0
  245. data/lib/bioshogi/assets/images/piece/Portella/BK0.png +0 -0
  246. data/lib/bioshogi/assets/images/piece/Portella/BL0.png +0 -0
  247. data/lib/bioshogi/assets/images/piece/Portella/BL1.png +0 -0
  248. data/lib/bioshogi/assets/images/piece/Portella/BN0.png +0 -0
  249. data/lib/bioshogi/assets/images/piece/Portella/BN1.png +0 -0
  250. data/lib/bioshogi/assets/images/piece/Portella/BP0.png +0 -0
  251. data/lib/bioshogi/assets/images/piece/Portella/BP1.png +0 -0
  252. data/lib/bioshogi/assets/images/piece/Portella/BR0.png +0 -0
  253. data/lib/bioshogi/assets/images/piece/Portella/BR1.png +0 -0
  254. data/lib/bioshogi/assets/images/piece/Portella/BS0.png +0 -0
  255. data/lib/bioshogi/assets/images/piece/Portella/BS1.png +0 -0
  256. data/lib/bioshogi/assets/images/piece/Portella/BX0.png +0 -0
  257. data/lib/bioshogi/assets/images/piece/Portella/README.org +1 -0
  258. data/lib/bioshogi/assets/images/piece/Portella/WB0.png +0 -0
  259. data/lib/bioshogi/assets/images/piece/Portella/WB1.png +0 -0
  260. data/lib/bioshogi/assets/images/piece/Portella/WG0.png +0 -0
  261. data/lib/bioshogi/assets/images/piece/Portella/WK0.png +0 -0
  262. data/lib/bioshogi/assets/images/piece/Portella/WL0.png +0 -0
  263. data/lib/bioshogi/assets/images/piece/Portella/WL1.png +0 -0
  264. data/lib/bioshogi/assets/images/piece/Portella/WN0.png +0 -0
  265. data/lib/bioshogi/assets/images/piece/Portella/WN1.png +0 -0
  266. data/lib/bioshogi/assets/images/piece/Portella/WP0.png +0 -0
  267. data/lib/bioshogi/assets/images/piece/Portella/WP1.png +0 -0
  268. data/lib/bioshogi/assets/images/piece/Portella/WR0.png +0 -0
  269. data/lib/bioshogi/assets/images/piece/Portella/WR1.png +0 -0
  270. data/lib/bioshogi/assets/images/piece/Portella/WS0.png +0 -0
  271. data/lib/bioshogi/assets/images/piece/Portella/WS1.png +0 -0
  272. data/lib/bioshogi/assets/images/piece/Portella/WX0.png +0 -0
  273. data/lib/bioshogi/assets/images/piece/Portella/convert.sh +32 -0
  274. data/lib/bioshogi/assets/images/piece/Portella/original/0FU.png +0 -0
  275. data/lib/bioshogi/assets/images/piece/Portella/original/0GI.png +0 -0
  276. data/lib/bioshogi/assets/images/piece/Portella/original/0GY.png +0 -0
  277. data/lib/bioshogi/assets/images/piece/Portella/original/0HI.png +0 -0
  278. data/lib/bioshogi/assets/images/piece/Portella/original/0KA.png +0 -0
  279. data/lib/bioshogi/assets/images/piece/Portella/original/0KE.png +0 -0
  280. data/lib/bioshogi/assets/images/piece/Portella/original/0KI.png +0 -0
  281. data/lib/bioshogi/assets/images/piece/Portella/original/0KI.svg +1 -0
  282. data/lib/bioshogi/assets/images/piece/Portella/original/0KY.png +0 -0
  283. data/lib/bioshogi/assets/images/piece/Portella/original/0NG.png +0 -0
  284. data/lib/bioshogi/assets/images/piece/Portella/original/0NK.png +0 -0
  285. data/lib/bioshogi/assets/images/piece/Portella/original/0NY.png +0 -0
  286. data/lib/bioshogi/assets/images/piece/Portella/original/0OU.png +0 -0
  287. data/lib/bioshogi/assets/images/piece/Portella/original/0RY.png +0 -0
  288. data/lib/bioshogi/assets/images/piece/Portella/original/0TO.png +0 -0
  289. data/lib/bioshogi/assets/images/piece/Portella/original/0UM.png +0 -0
  290. data/lib/bioshogi/assets/images/piece/Portella/original/1FU.png +0 -0
  291. data/lib/bioshogi/assets/images/piece/Portella/original/1GI.png +0 -0
  292. data/lib/bioshogi/assets/images/piece/Portella/original/1GY.png +0 -0
  293. data/lib/bioshogi/assets/images/piece/Portella/original/1HI.png +0 -0
  294. data/lib/bioshogi/assets/images/piece/Portella/original/1KA.png +0 -0
  295. data/lib/bioshogi/assets/images/piece/Portella/original/1KE.png +0 -0
  296. data/lib/bioshogi/assets/images/piece/Portella/original/1KI.png +0 -0
  297. data/lib/bioshogi/assets/images/piece/Portella/original/1KY.png +0 -0
  298. data/lib/bioshogi/assets/images/piece/Portella/original/1NG.png +0 -0
  299. data/lib/bioshogi/assets/images/piece/Portella/original/1NK.png +0 -0
  300. data/lib/bioshogi/assets/images/piece/Portella/original/1NY.png +0 -0
  301. data/lib/bioshogi/assets/images/piece/Portella/original/1OU.png +0 -0
  302. data/lib/bioshogi/assets/images/piece/Portella/original/1RY.png +0 -0
  303. data/lib/bioshogi/assets/images/piece/Portella/original/1TO.png +0 -0
  304. data/lib/bioshogi/assets/images/piece/Portella/original/1UM.png +0 -0
  305. data/lib/bioshogi/board/basic.rb +24 -0
  306. data/lib/bioshogi/board/csa_formatter.rb +40 -0
  307. data/lib/bioshogi/board/kakinoki_formatter.rb +57 -0
  308. data/lib/bioshogi/board/piece_counts_methods.rb +43 -0
  309. data/lib/bioshogi/board/reader_methods.rb +91 -0
  310. data/lib/bioshogi/board/technique_matcher_methods.rb +23 -0
  311. data/lib/bioshogi/board/update_methods.rb +79 -0
  312. data/lib/bioshogi/board.rb +28 -0
  313. data/lib/bioshogi/board_parser/base.rb +43 -0
  314. data/lib/bioshogi/board_parser/compare_board_parser.rb +95 -0
  315. data/lib/bioshogi/board_parser/csa_board_parser.rb +45 -0
  316. data/lib/bioshogi/board_parser/kakinoki_board_parser.rb +95 -0
  317. data/lib/bioshogi/board_parser/sfen_board_parser.rb +29 -0
  318. data/lib/bioshogi/board_parser.rb +33 -0
  319. data/lib/bioshogi/builder.rb +9 -0
  320. data/lib/bioshogi/cli/.gitignore +1 -0
  321. data/lib/bioshogi/cli/convert.rb +34 -0
  322. data/lib/bioshogi/cli/input_parser.rb +23 -0
  323. data/lib/bioshogi/cli/piece.rb +19 -0
  324. data/lib/bioshogi/cli/versus.rb +160 -0
  325. data/lib/bioshogi/cli.rb +106 -0
  326. data/lib/bioshogi/container/basic.rb +13 -0
  327. data/lib/bioshogi/container/checkmate_yomiage.rb +87 -0
  328. data/lib/bioshogi/container/core_methods.rb +99 -0
  329. data/lib/bioshogi/container/execute_methods.rb +40 -0
  330. data/lib/bioshogi/container/fast.rb +16 -0
  331. data/lib/bioshogi/container/players_methods.rb +106 -0
  332. data/lib/bioshogi/container/serialize_methods.rb +180 -0
  333. data/lib/bioshogi/container/simple.rb +17 -0
  334. data/lib/bioshogi/container/test_methods.rb +65 -0
  335. data/lib/bioshogi/container.rb +9 -0
  336. data/lib/bioshogi/cover_image/bottom_text_methods.rb +34 -0
  337. data/lib/bioshogi/cover_image/core_methods.rb +60 -0
  338. data/lib/bioshogi/cover_image/main_text_methods.rb +36 -0
  339. data/lib/bioshogi/cover_image/renderer.rb +10 -0
  340. data/lib/bioshogi/cover_image.rb +7 -0
  341. data/lib/bioshogi/csa_header_info.rb +90 -0
  342. data/lib/bioshogi/dimension/base.rb +92 -0
  343. data/lib/bioshogi/dimension/char_info.rb +24 -0
  344. data/lib/bioshogi/dimension/dimension_info.rb +25 -0
  345. data/lib/bioshogi/dimension/module_methods.rb +42 -0
  346. data/lib/bioshogi/dimension/place_x.rb +27 -0
  347. data/lib/bioshogi/dimension/place_y.rb +57 -0
  348. data/lib/bioshogi/dimension.rb +7 -0
  349. data/lib/bioshogi/errors.rb +145 -0
  350. data/lib/bioshogi/explain/attack_info.rb +195 -0
  351. data/lib/bioshogi/explain/board_piller_methods.rb +53 -0
  352. data/lib/bioshogi/explain/chaos_info.rb +17 -0
  353. data/lib/bioshogi/explain/defense_info.rb +130 -0
  354. data/lib/bioshogi/explain/distribution_ratio.rb +1840 -0
  355. data/lib/bioshogi/explain/distribution_ratio_generator.rb +48 -0
  356. data/lib/bioshogi/explain/file_normalizer.rb +20 -0
  357. data/lib/bioshogi/explain/group_info.rb +16 -0
  358. data/lib/bioshogi/explain/monitor_mod.rb +78 -0
  359. data/lib/bioshogi/explain/note_info.rb +63 -0
  360. data/lib/bioshogi/explain/sect_info.rb +13 -0
  361. data/lib/bioshogi/explain/shape_info.rb +4582 -0
  362. data/lib/bioshogi/explain/shape_info_relation.rb +37 -0
  363. data/lib/bioshogi/explain/skill_monitor.rb +352 -0
  364. data/lib/bioshogi/explain/skill_set.rb +100 -0
  365. data/lib/bioshogi/explain/tactic_hit_turn_table.rb +316 -0
  366. data/lib/bioshogi/explain/tactic_hit_turn_table_generator.rb +61 -0
  367. data/lib/bioshogi/explain/tactic_info.rb +124 -0
  368. data/lib/bioshogi/explain/tactic_validator.rb +40 -0
  369. data/lib/bioshogi/explain/tech_accessor.rb +147 -0
  370. data/lib/bioshogi/explain/technique_info.rb +28 -0
  371. data/lib/bioshogi/explain/technique_matcher_info.rb +298 -0
  372. data/lib/bioshogi/explain//345/202/231/350/200/203//345/205/245/347/216/211.kif +24 -0
  373. data/lib/bioshogi/explain//345/202/231/350/200/203//345/244/247/351/247/222/343/202/263/343/203/263/343/203/227/343/203/252/343/203/274/343/203/210.kif +19 -0
  374. data/lib/bioshogi/explain//345/202/231/350/200/203//345/244/247/351/247/222/345/205/250/346/266/210/345/244/261.kif +19 -0
  375. data/lib/bioshogi/explain//345/202/231/350/200/203//345/257/276/346/212/227/345/236/213.kif +12 -0
  376. data/lib/bioshogi/explain//345/202/231/350/200/203//345/257/276/346/214/257/343/202/212.kif +12 -0
  377. data/lib/bioshogi/explain//345/202/231/350/200/203//345/261/205/351/243/233/350/273/212.kif +10 -0
  378. data/lib/bioshogi/explain//345/202/231/350/200/203//346/214/257/343/202/212/351/243/233/350/273/212.kif +12 -0
  379. data/lib/bioshogi/explain//345/202/231/350/200/203//347/233/270/345/205/245/347/216/211.kif +24 -0
  380. data/lib/bioshogi/explain//345/202/231/350/200/203//347/233/270/345/261/205/347/216/211.kif +26 -0
  381. data/lib/bioshogi/explain//345/202/231/350/200/203//347/233/270/345/261/205/351/243/233/350/273/212.kif +8 -0
  382. data/lib/bioshogi/explain//345/202/231/350/200/203//347/233/270/346/214/257/343/202/212.kif +16 -0
  383. data/lib/bioshogi/explain//345/202/231/350/200/203//350/203/214/346/260/264/343/201/256/351/231/243.kif +34 -0
  384. data/lib/bioshogi/explain//345/202/231/350/200/203//350/247/222/344/270/215/346/210/220.kif +16 -0
  385. data/lib/bioshogi/explain//345/202/231/350/200/203//351/243/233/350/273/212/344/270/215/346/210/220.kif +17 -0
  386. data/lib/bioshogi/explain//345/202/231/350/200/203//351/247/222/346/237/261.kif +48 -0
  387. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/202/343/201/232/343/201/276/343/202/204/345/233/262/343/201/204.kif +30 -0
  388. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/204/343/201/241/343/201/224/345/233/262/343/201/204.kif +82 -0
  389. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/213/343/202/223/343/201/264/343/202/207/343/201/206/345/233/262/343/201/204.kif +122 -0
  390. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/232/343/202/214/347/276/216/346/277/203.kif +25 -0
  391. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/241/343/202/207/343/202/223/343/201/276/343/201/222/347/276/216/346/277/203.kif +25 -0
  392. data/lib/bioshogi/explain//345/233/262/343/201/204//343/201/270/343/201/223/343/201/277/347/237/242/345/200/211.kif +41 -0
  393. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/242/343/203/222/343/203/253/345/233/262/343/201/204.kif +148 -0
  394. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/250/343/203/253/343/203/242/345/233/262/343/201/204.kif +23 -0
  395. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/252/343/203/252/343/202/270/343/203/212/343/203/253/351/233/201/346/234/250.kif +40 -0
  396. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/252/343/203/274/343/203/253/343/203/211/351/233/201/346/234/250.kif +92 -0
  397. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/202/256/345/233/262/343/201/204.kif +40 -0
  398. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/202/277/345/233/262/343/201/204.kif +144 -0
  399. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/203/213/345/233/262/343/201/204.kif +69 -0
  400. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/203/213/347/274/266/345/233/262/343/201/204.kif +23 -0
  401. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/203/226/343/203/210/345/233/262/343/201/204.kif +29 -0
  402. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/253/343/203/226/343/203/210/347/276/216/346/277/203.kif +49 -0
  403. data/lib/bioshogi/explain//345/233/262/343/201/204//343/202/273/343/203/241/343/203/263/343/203/210/345/233/262/343/201/204.kif +124 -0
  404. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/200/343/202/244/343/203/244/343/203/242/343/203/263/343/203/211/347/276/216/346/277/203.kif +89 -0
  405. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/201/343/203/247/343/202/263/343/203/254/343/203/274/343/203/210/345/233/262/343/201/204.kif +59 -0
  406. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/204/343/203/216/351/212/200/345/236/213/345/217/263/347/216/211.kif +45 -0
  407. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/204/343/203/216/351/212/200/351/233/201/346/234/250.kif +113 -0
  408. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/223/343/203/203/343/202/2604.kif +104 -0
  409. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/234/343/203/212/343/203/263/343/202/266/345/233/262/343/201/204.kif +89 -0
  410. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/237/343/203/254/343/203/213/343/202/242/343/203/240/345/233/262/343/201/204.kif +96 -0
  411. data/lib/bioshogi/explain//345/233/262/343/201/204//343/203/242/343/203/216/343/203/254/343/203/274/343/203/253/345/233/262/343/201/204.kif +47 -0
  412. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/200/346/226/207/345/255/227/347/237/242/345/200/211.kif +48 -0
  413. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/211/346/211/213/345/233/262/343/201/204.kif +23 -0
  414. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/211/346/256/265/345/217/263/347/216/211.kif +50 -0
  415. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/255/344/275/217/343/201/276/343/201/204.kif +71 -0
  416. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/255/345/216/237/345/233/262/343/201/204.kif +69 -0
  417. data/lib/bioshogi/explain//345/233/262/343/201/204//344/270/262/343/202/253/343/203/204/345/233/262/343/201/204.kif +75 -0
  418. data/lib/bioshogi/explain//345/233/262/343/201/204//345/215/207/347/224/260/347/276/216/346/277/203.kif +43 -0
  419. data/lib/bioshogi/explain//345/233/262/343/201/204//345/217/263/347/216/211.kif +82 -0
  420. data/lib/bioshogi/explain//345/233/262/343/201/204//345/217/263/347/237/242/345/200/211.kif +92 -0
  421. data/lib/bioshogi/explain//345/233/262/343/201/204//345/233/233/346/236/232/347/276/216/346/277/203.kif +82 -0
  422. data/lib/bioshogi/explain//345/233/262/343/201/204//345/233/233/346/236/232/351/212/200/345/206/240.kif +150 -0
  423. data/lib/bioshogi/explain//345/233/262/343/201/204//345/233/233/346/256/265/347/253/257/347/216/211.kif +213 -0
  424. data/lib/bioshogi/explain//345/233/262/343/201/204//345/233/233/346/256/265/347/253/257/347/216/2112.kif +91 -0
  425. data/lib/bioshogi/explain//345/233/262/343/201/204//345/233/233/350/247/222/347/237/242/345/200/211.kif +57 -0
  426. data/lib/bioshogi/explain//345/233/262/343/201/204//345/234/237/345/261/205/347/237/242/345/200/211.kif +39 -0
  427. data/lib/bioshogi/explain//345/233/262/343/201/204//345/235/212/344/270/273/347/276/216/346/277/203.kif +79 -0
  428. data/lib/bioshogi/explain//345/233/262/343/201/204//345/244/247/345/261/261/347/276/216/346/277/203.kif +44 -0
  429. data/lib/bioshogi/explain//345/233/262/343/201/204//345/244/247/347/233/276/345/233/262/343/201/204.kif +33 -0
  430. data/lib/bioshogi/explain//345/233/262/343/201/204//345/244/251/345/256/210/351/226/243/345/233/262/343/201/204.kif +29 -0
  431. data/lib/bioshogi/explain//345/233/262/343/201/204//345/244/251/345/256/210/351/226/243/347/276/216/346/277/203.kif +75 -0
  432. data/lib/bioshogi/explain//345/233/262/343/201/204//345/244/251/351/207/216/347/237/242/345/200/211.kif +76 -0
  433. data/lib/bioshogi/explain//345/233/262/343/201/204//345/257/214/345/243/253/350/246/213/347/237/242/345/200/211.kif +45 -0
  434. data/lib/bioshogi/explain//345/233/262/343/201/204//345/261/205/347/216/211.kif +57 -0
  435. data/lib/bioshogi/explain//345/233/262/343/201/204//345/261/205/351/243/233/347/251/264/351/237/263/347/204/241/343/201/227/343/201/256/346/247/213/343/201/210.kif +60 -0
  436. data/lib/bioshogi/explain//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/347/251/264/347/206/212.kif +76 -0
  437. data/lib/bioshogi/explain//345/233/262/343/201/204//345/261/205/351/243/233/350/273/212/351/207/221/347/276/216/346/277/203.kif +42 -0
  438. data/lib/bioshogi/explain//345/233/262/343/201/204//345/267/246/345/261/261/345/233/262/343/201/204.kif +26 -0
  439. data/lib/bioshogi/explain//345/233/262/343/201/204//345/267/246/347/276/216/346/277/203.kif +72 -0
  440. data/lib/bioshogi/explain//345/233/262/343/201/204//346/202/252/345/275/242/347/237/242/345/200/211.kif +31 -0
  441. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/202/250/343/203/253/343/203/242.kif +31 -0
  442. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/203/223/343/203/203/343/202/2604.kif +151 -0
  443. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +130 -0
  444. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/344/270/262/343/202/253/343/203/204/345/233/262/343/201/204.kif +39 -0
  445. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/345/233/233/346/236/232/347/276/216/346/277/203.kif +57 -0
  446. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/345/244/251/345/256/210/351/226/243/347/276/216/346/277/203.kif +50 -0
  447. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/347/251/264/347/206/212.kif +40 -0
  448. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/347/253/257/347/216/211/351/212/200/345/206/240.kif +39 -0
  449. data/lib/bioshogi/explain//345/233/262/343/201/204//346/214/257/343/202/212/351/243/233/350/273/212/351/212/200/345/206/240/347/251/264/347/206/212.kif +57 -0
  450. data/lib/bioshogi/explain//345/233/262/343/201/204//346/226/207/351/216/256/345/233/262/343/201/204.kif +40 -0
  451. data/lib/bioshogi/explain//345/233/262/343/201/204//346/226/260/345/236/213/351/233/201/346/234/250.kif +53 -0
  452. data/lib/bioshogi/explain//345/233/262/343/201/204//346/227/251/345/233/262/343/201/204.kif +22 -0
  453. data/lib/bioshogi/explain//345/233/262/343/201/204//346/234/250/346/235/221/347/276/216/346/277/203.kif +88 -0
  454. data/lib/bioshogi/explain//345/233/262/343/201/204//346/235/276/345/260/276/346/265/201/347/251/264/347/206/212.kif +84 -0
  455. data/lib/bioshogi/explain//345/233/262/343/201/204//346/241/220/345/261/261/346/265/201/344/270/255/345/216/237/345/233/262/343/201/204.kif +37 -0
  456. data/lib/bioshogi/explain//345/233/262/343/201/204//346/265/201/343/202/214/347/237/242/345/200/211.kif +43 -0
  457. data/lib/bioshogi/explain//345/233/262/343/201/204//347/204/241/346/225/265/345/233/262/343/201/204.kif +136 -0
  458. data/lib/bioshogi/explain//345/233/262/343/201/204//347/204/241/350/262/254/344/273/273/347/237/242/345/200/211.kif +44 -0
  459. data/lib/bioshogi/explain//345/233/262/343/201/204//347/211/207/347/276/216/346/277/203/345/233/262/343/201/204.kif +68 -0
  460. data/lib/bioshogi/explain//345/233/262/343/201/204//347/211/207/351/212/200/345/206/240.kif +50 -0
  461. data/lib/bioshogi/explain//345/233/262/343/201/204//347/237/242/345/200/211/345/217/263/347/216/211.kif +40 -0
  462. data/lib/bioshogi/explain//345/233/262/343/201/204//347/237/242/345/200/211/346/227/251/345/233/262/343/201/204.kif +31 -0
  463. data/lib/bioshogi/explain//345/233/262/343/201/204//347/237/242/345/200/211/347/251/264/347/206/212.kif +86 -0
  464. data/lib/bioshogi/explain//345/233/262/343/201/204//347/245/236/345/220/211/346/265/201/347/251/264/347/206/212.kif +50 -0
  465. data/lib/bioshogi/explain//345/233/262/343/201/204//347/251/272/344/270/255/346/245/274/351/226/243.kif +126 -0
  466. data/lib/bioshogi/explain//345/233/262/343/201/204//347/253/257/347/216/211/351/212/200/345/206/240.kif +88 -0
  467. data/lib/bioshogi/explain//345/233/262/343/201/204//347/256/261/345/205/245/343/202/212/345/250/230.kif +72 -0
  468. data/lib/bioshogi/explain//345/233/262/343/201/204//347/263/270/350/260/267/346/265/201/345/217/263/347/216/211.kif +151 -0
  469. data/lib/bioshogi/explain//345/233/262/343/201/204//347/264/231/347/251/264/347/206/212.kif +194 -0
  470. data/lib/bioshogi/explain//345/233/262/343/201/204//347/267/217/347/237/242/345/200/211.kif +78 -0
  471. data/lib/bioshogi/explain//345/233/262/343/201/204//347/276/216/346/277/203/345/233/262/343/201/204.kif +52 -0
  472. data/lib/bioshogi/explain//345/233/262/343/201/204//347/276/216/346/277/203/347/206/212/345/233/262/343/201/204.kif +50 -0
  473. data/lib/bioshogi/explain//345/233/262/343/201/204//347/276/275/347/224/237/346/265/201/345/217/263/347/216/211.kif +43 -0
  474. data/lib/bioshogi/explain//345/233/262/343/201/204//350/210/237/345/233/262/343/201/204.kif +67 -0
  475. data/lib/bioshogi/explain//345/233/262/343/201/204//350/210/237/345/233/262/343/201/204DX.kif +32 -0
  476. data/lib/bioshogi/explain//345/233/262/343/201/204//350/217/212/346/260/264/347/237/242/345/200/211.kif +93 -0
  477. data/lib/bioshogi/explain//345/233/262/343/201/204//350/217/261/347/237/242/345/200/211.kif +89 -0
  478. data/lib/bioshogi/explain//345/233/262/343/201/204//350/243/217/343/202/242/343/203/222/343/203/253/345/233/262/343/201/204.kif +29 -0
  479. data/lib/bioshogi/explain//345/233/262/343/201/204//350/243/276/345/233/272/343/202/201.kif +36 -0
  480. data/lib/bioshogi/explain//345/233/262/343/201/204//350/247/222/346/217/233/343/202/217/343/202/212/345/217/263/347/216/211.kif +45 -0
  481. data/lib/bioshogi/explain//345/233/262/343/201/204//350/247/222/347/237/242/345/200/211.kif +43 -0
  482. data/lib/bioshogi/explain//345/233/262/343/201/204//350/247/222/351/201/223/344/270/215/347/252/201/343/201/215/345/267/246/347/276/216/346/277/203.kif +25 -0
  483. data/lib/bioshogi/explain//345/233/262/343/201/204//350/261/206/350/205/220/347/237/242/345/200/211.kif +38 -0
  484. data/lib/bioshogi/explain//345/233/262/343/201/204//351/200/243/347/233/237/347/276/216/346/277/203.kif +31 -0
  485. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/345/244/232/344/274/235.kif +41 -0
  486. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/347/204/241/345/217/214.kif +88 -0
  487. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/347/233/276/345/233/262/343/201/204.kif +43 -0
  488. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/347/237/242/345/200/211.kif +78 -0
  489. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/347/276/216/346/277/203.kif +74 -0
  490. data/lib/bioshogi/explain//345/233/262/343/201/204//351/207/221/351/226/200/347/237/242/345/200/211.kif +54 -0
  491. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/345/206/240.kif +76 -0
  492. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/345/206/240/347/251/264/347/206/212.kif +89 -0
  493. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/345/244/232/344/274/235.kif +141 -0
  494. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/347/237/242/345/200/211.kif +72 -0
  495. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/347/253/213/343/201/241/347/237/242/345/200/211.kif +90 -0
  496. data/lib/bioshogi/explain//345/233/262/343/201/204//351/212/200/347/276/216/346/277/203.kif +77 -0
  497. data/lib/bioshogi/explain//345/233/262/343/201/204//351/232/205/347/237/242/345/200/211.kif +61 -0
  498. data/lib/bioshogi/explain//345/233/262/343/201/204//351/233/201/346/234/250/345/217/263/347/216/211.kif +154 -0
  499. data/lib/bioshogi/explain//345/233/262/343/201/204//351/233/242/343/202/214/351/207/221/347/204/241/345/217/214.kif +56 -0
  500. data/lib/bioshogi/explain//345/233/262/343/201/204//351/253/230/347/237/242/345/200/211.kif +56 -0
  501. data/lib/bioshogi/explain//345/233/262/343/201/204//351/253/230/347/276/216/346/277/203/345/233/262/343/201/204.kif +74 -0
  502. data/lib/bioshogi/explain//346/210/246/345/236/213/2/346/211/213/347/233/256/342/226/26374/346/255/251/346/210/246/346/263/225.kif +10 -0
  503. data/lib/bioshogi/explain//346/210/246/345/236/213/2/346/211/213/347/233/256/342/226/263/357/274/223/343/203/213/351/243/233/346/210/246/346/263/225.kif +127 -0
  504. data/lib/bioshogi/explain//346/210/246/345/236/213/33/351/207/221/345/236/213/346/227/251/347/271/260/343/202/212/351/212/200.kif +34 -0
  505. data/lib/bioshogi/explain//346/210/246/345/236/213/4/346/211/213/347/233/256/342/226/263/357/274/223/344/270/211/350/247/222/346/210/246/346/263/225.kif +13 -0
  506. data/lib/bioshogi/explain//346/210/246/345/236/213/5/347/255/213/344/275/215/345/217/226/343/202/212/344/270/255/351/243/233/350/273/212.kif +16 -0
  507. data/lib/bioshogi/explain//346/210/246/345/236/213/GAVA/350/247/222.kif +33 -0
  508. data/lib/bioshogi/explain//346/210/246/345/236/213/UFO/351/212/200.kif +38 -0
  509. data/lib/bioshogi/explain//346/210/246/345/236/213/xaby/350/247/222/346/210/246/346/263/225.kif +18 -0
  510. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/223/344/270/203/351/212/200/346/210/246/346/263/225.kif +74 -0
  511. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/224/344/272/224/346/255/251/346/227/251/344/273/225/346/216/233/343/201/221.kif +64 -0
  512. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/224/345/205/255/351/212/200/345/217/263/346/200/245/346/210/246.kif +41 -0
  513. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/224/345/205/255/351/212/200/345/267/246/346/200/245/346/210/246.kif +44 -0
  514. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/225/344/270/203/351/207/221/346/210/246/346/263/225.kif +133 -0
  515. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/225/344/272/224/351/276/215/344/270/255/351/243/233/350/273/212.kif +31 -0
  516. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/227/344/272/214/351/243/233/344/272/234/346/200/245/346/210/246.kif +100 -0
  517. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/227/345/205/253/351/243/233/346/210/246/346/263/225.kif +12 -0
  518. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/262/357/274/230/344/272/224/351/243/233/350/273/212/346/210/246/346/263/225.kif +77 -0
  519. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/263/357/274/222/344/270/211/346/255/251/346/210/246/346/263/225.kif +63 -0
  520. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/263/357/274/223/344/270/211/346/241/202/346/210/246/346/263/225.kif +50 -0
  521. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/263/357/274/223/344/270/211/350/247/222/345/236/213/347/251/272/344/270/255/346/210/246/346/263/225.kif +60 -0
  522. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/263/357/274/223/344/270/211/351/243/233/346/210/246/346/263/225.kif +148 -0
  523. data/lib/bioshogi/explain//346/210/246/345/236/213//342/226/263/357/274/224/344/272/224/350/247/222/346/210/246/346/263/225.kif +61 -0
  524. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/206/343/201/243/343/201/213/343/202/212/344/270/211/351/226/223/351/243/233/350/273/212.kif +18 -0
  525. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/213/343/201/276/343/201/204/343/201/237/343/201/241/346/210/246/346/263/225.kif +190 -0
  526. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/215/343/202/223/343/201/250/343/201/206/343/202/223/346/210/246/346/263/225.kif +38 -0
  527. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/215/357/275/215/343/201/215/357/275/215/351/207/221.kif +21 -0
  528. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/244/343/201/217/343/201/244/343/201/217/343/201/274/343/201/206/343/201/227/346/210/246/346/263/225.kif +32 -0
  529. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/257/343/201/217/345/274/217/345/233/233/351/226/223/351/243/233/350/273/212.kif +34 -0
  530. data/lib/bioshogi/explain//346/210/246/345/236/213//343/201/262/343/201/255/343/202/212/351/243/233/350/273/212.kif +51 -0
  531. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/242/343/203/222/343/203/253/346/210/246/346/263/225.kif +65 -0
  532. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/246/343/202/275/347/237/242/345/200/211.kif +17 -0
  533. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/250/343/203/253/343/203/242/346/200/245/346/210/246.kif +44 -0
  534. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/252/343/202/266/343/203/257/343/202/267/343/202/271/343/203/206/343/203/240.kif +194 -0
  535. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/253/343/203/213/343/202/253/343/203/213/351/207/221.kif +43 -0
  536. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/253/343/203/213/343/202/253/343/203/213/351/212/200.kif +83 -0
  537. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/253/343/203/241/343/203/254/343/202/252/343/203/263/346/210/246/346/263/225.kif +29 -0
  538. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/264/343/202/255/343/202/262/343/203/263/344/270/255/351/243/233/350/273/212.kif +16 -0
  539. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/267/343/203/247/343/203/274/343/203/200/343/203/263/343/202/252/343/203/252/343/202/270/343/203/212/343/203/253.kif +123 -0
  540. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/267/343/203/247/343/203/274/343/203/200/343/203/263/343/202/267/343/202/271/343/203/206/343/203/240.kif +151 -0
  541. data/lib/bioshogi/explain//346/210/246/345/236/213//343/202/277/343/203/251/343/203/263/343/203/201/343/203/245/343/203/251/346/210/246/346/263/225.kif +29 -0
  542. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/200/343/202/244/343/203/254/343/202/257/343/203/210/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +28 -0
  543. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/204/343/203/216/351/212/200/344/270/255/351/243/233/350/273/212.kif +102 -0
  544. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/210/343/203/236/343/203/233/343/203/274/343/202/257.kif +128 -0
  545. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/216/343/203/274/343/202/254/343/203/274/343/203/211/346/210/246/346/263/225.kif +34 -0
  546. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/221/343/203/203/343/202/257/343/203/236/343/203/263/346/210/246/346/263/225.kif +23 -0
  547. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/235/343/203/263/343/203/235/343/203/263/346/241/202.kif +115 -0
  548. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/240/343/203/252/343/203/244/343/203/252/346/227/251/347/237/263/347/224/260.kif +16 -0
  549. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/241/343/202/244/343/203/211/343/202/267/343/202/271/343/203/206/343/203/240.kif +14 -0
  550. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/241/343/203/252/343/202/261/343/203/263/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +29 -0
  551. data/lib/bioshogi/explain//346/210/246/345/236/213//343/203/254/343/202/260/343/202/271/343/203/232.kif +46 -0
  552. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/200/346/211/213/346/220/215/350/247/222/346/217/233/343/202/217/343/202/212.kif +14 -0
  553. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/200/347/233/264/347/267/232/347/251/264/347/206/212.kif +128 -0
  554. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/200/351/226/223/351/243/233/350/273/212.kif +63 -0
  555. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/200/351/226/223/351/243/233/350/273/212/347/251/264/347/206/212.kif +30 -0
  556. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/211/351/226/223/351/243/233/350/273/212.kif +52 -0
  557. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/211/351/226/223/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +30 -0
  558. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/345/216/237/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +99 -0
  559. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/345/216/237/346/265/201/347/233/270/346/216/233/343/201/213/343/202/212.kif +89 -0
  560. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/345/216/237/351/243/233/350/273/212.kif +89 -0
  561. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/347/224/260/345/212/237XP.kif +133 -0
  562. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +33 -0
  563. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/255/351/243/233/350/273/212/345/267/246/347/251/264/347/206/212.kif +95 -0
  564. data/lib/bioshogi/explain//346/210/246/345/236/213//344/270/270/345/261/261/343/203/257/343/202/257/343/203/201/343/203/263.kif +23 -0
  565. data/lib/bioshogi/explain//346/210/246/345/236/213//344/271/205/345/244/242/346/265/201.kif +61 -0
  566. data/lib/bioshogi/explain//346/210/246/345/236/213//345/205/210/346/211/213/344/270/255/351/243/233/350/273/212.kif +17 -0
  567. data/lib/bioshogi/explain//346/210/246/345/236/213//345/210/235/346/211/213/357/274/223/345/205/255/346/255/251/346/210/246/346/263/225.kif +11 -0
  568. data/lib/bioshogi/explain//346/210/246/345/236/213//345/210/235/346/211/213/357/274/227/345/205/253/351/212/200/346/210/246/346/263/225.kif +29 -0
  569. data/lib/bioshogi/explain//346/210/246/345/236/213//345/212/233/346/210/246.kif +26 -0
  570. data/lib/bioshogi/explain//346/210/246/345/236/213//345/212/240/350/227/244/346/265/201/350/242/226/351/243/233/350/273/212.kif +85 -0
  571. data/lib/bioshogi/explain//346/210/246/345/236/213//345/213/207/346/260/227/346/265/201.kif +31 -0
  572. data/lib/bioshogi/explain//346/210/246/345/236/213//345/215/207/347/224/260/345/274/217/347/237/263/347/224/260/346/265/201.kif +89 -0
  573. data/lib/bioshogi/explain//346/210/246/345/236/213//345/216/237/345/247/213/344/270/255/351/243/233/350/273/212.kif +12 -0
  574. data/lib/bioshogi/explain//346/210/246/345/236/213//345/216/237/345/247/213/346/243/222/351/212/200.kif +47 -0
  575. data/lib/bioshogi/explain//346/210/246/345/236/213//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +82 -0
  576. data/lib/bioshogi/explain//346/210/246/345/236/213//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/345/267/246/347/276/216/346/277/203.kif +87 -0
  577. data/lib/bioshogi/explain//346/210/246/345/236/213//345/217/263/345/233/233/351/226/223/351/243/233/350/273/212/346/200/245/346/210/246.kif +79 -0
  578. data/lib/bioshogi/explain//346/210/246/345/236/213//345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +55 -0
  579. data/lib/bioshogi/explain//346/210/246/345/236/213//345/233/233/346/211/213/350/247/222.kif +78 -0
  580. data/lib/bioshogi/explain//346/210/246/345/236/213//345/233/233/351/226/223/351/243/233/350/273/212.kif +60 -0
  581. data/lib/bioshogi/explain//346/210/246/345/236/213//345/233/233/351/226/223/351/243/233/350/273/212/343/203/237/343/203/254/343/203/213/343/202/242/343/203/240.kif +32 -0
  582. data/lib/bioshogi/explain//346/210/246/345/236/213//345/234/260/344/270/213/351/211/204/351/243/233/350/273/212.kif +102 -0
  583. data/lib/bioshogi/explain//346/210/246/345/236/213//345/241/232/347/224/260/343/202/271/343/203/232/343/202/267/343/203/243/343/203/253.kif +95 -0
  584. data/lib/bioshogi/explain//346/210/246/345/236/213//345/254/211/351/207/216/346/265/201.kif +9 -0
  585. data/lib/bioshogi/explain//346/210/246/345/236/213//345/257/276/346/214/257/343/202/212/346/214/201/344/271/205/346/210/246.kif +72 -0
  586. data/lib/bioshogi/explain//346/210/246/345/236/213//345/261/213/346/225/267/346/265/201/344/272/214/346/236/232/351/212/200.kif +77 -0
  587. data/lib/bioshogi/explain//346/210/246/345/236/213//345/261/213/346/225/267/346/265/201/344/272/214/346/236/232/351/212/200/346/243/222/351/212/200/345/236/213.kif +60 -0
  588. data/lib/bioshogi/explain//346/210/246/345/236/213//345/261/261/345/264/216/346/265/201/343/203/221/343/203/203/343/202/257/343/203/236/343/203/263.kif +13 -0
  589. data/lib/bioshogi/explain//346/210/246/345/236/213//345/267/246/347/276/216/346/277/203/346/200/245/346/210/246.kif +76 -0
  590. data/lib/bioshogi/explain//346/210/246/345/236/213//345/271/263/347/233/256.kif +110 -0
  591. data/lib/bioshogi/explain//346/210/246/345/236/213//345/271/273/346/203/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +49 -0
  592. data/lib/bioshogi/explain//346/210/246/345/236/213//346/211/213/345/276/227/350/247/222/344/272/244/346/217/233/345/236/213.kif +14 -0
  593. data/lib/bioshogi/explain//346/210/246/345/236/213//346/211/213/346/220/215/350/247/222/344/272/244/346/217/233/345/236/213.kif +12 -0
  594. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/344/270/270/345/261/261/343/203/257/343/202/257/343/203/201/343/203/263.kif +24 -0
  595. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/345/254/211/351/207/216/346/265/201.kif +15 -0
  596. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/346/235/221/347/224/260/343/202/267/343/202/271/343/203/206/343/203/240.kif +117 -0
  597. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/347/237/263/347/224/260/346/265/201.kif +90 -0
  598. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/347/261/263/351/225/267/347/216/211.kif +10 -0
  599. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/351/242/250/350/273/212.kif +44 -0
  600. data/lib/bioshogi/explain//346/210/246/345/236/213//346/226/260/351/254/274/346/256/272/343/201/227.kif +113 -0
  601. data/lib/bioshogi/explain//346/210/246/345/236/213//346/227/251/347/237/263/347/224/260.kif +68 -0
  602. data/lib/bioshogi/explain//346/210/246/345/236/213//346/232/264/351/212/200.kif +37 -0
  603. data/lib/bioshogi/explain//346/210/246/345/236/213//346/234/250/346/235/221/345/256/232/350/267/241.kif +138 -0
  604. data/lib/bioshogi/explain//346/210/246/345/236/213//346/235/221/347/224/260/343/202/267/343/202/271/343/203/206/343/203/240.kif +19 -0
  605. data/lib/bioshogi/explain//346/210/246/345/236/213//346/243/222/347/216/211.kif +80 -0
  606. data/lib/bioshogi/explain//346/210/246/345/236/213//346/243/222/351/207/221.kif +52 -0
  607. data/lib/bioshogi/explain//346/210/246/345/236/213//346/243/222/351/212/200.kif +65 -0
  608. data/lib/bioshogi/explain//346/210/246/345/236/213//346/243/256/344/270/213/343/202/267/343/202/271/343/203/206/343/203/240.kif +118 -0
  609. data/lib/bioshogi/explain//346/210/246/345/236/213//346/245/240/346/234/254/345/274/217/347/237/263/347/224/260/346/265/201.kif +122 -0
  610. data/lib/bioshogi/explain//346/210/246/345/236/213//346/245/265/351/231/220/346/227/251/347/271/260/343/202/212/351/212/200.kif +51 -0
  611. data/lib/bioshogi/explain//346/210/246/345/236/213//346/250/252/346/255/251/345/217/226/343/202/212.kif +50 -0
  612. data/lib/bioshogi/explain//346/210/246/345/236/213//346/270/205/351/207/216/346/265/201/345/262/220/351/230/234/346/210/246/346/263/225.kif +61 -0
  613. data/lib/bioshogi/explain//346/210/246/345/236/213//347/216/211/351/240/255/344/275/215/345/217/226/343/202/212.kif +35 -0
  614. data/lib/bioshogi/explain//346/210/246/345/236/213//347/216/211/351/240/255/351/212/200.kif +68 -0
  615. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/256/343/201/217/343/202/211/343/201/276/343/201/227/346/210/246/346/263/225.kif +18 -0
  616. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/270/346/214/257/343/202/212/351/243/233/350/273/212.kif +14 -0
  617. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/270/346/216/233/343/201/213/343/202/212.kif +45 -0
  618. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/270/346/216/233/343/201/213/343/202/212/346/243/222/351/212/200.kif +33 -0
  619. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/270/346/250/252/346/255/251/345/217/226/343/202/212.kif +72 -0
  620. data/lib/bioshogi/explain//346/210/246/345/236/213//347/233/270/347/255/213/351/201/225/343/201/204/350/247/222.kif +45 -0
  621. data/lib/bioshogi/explain//346/210/246/345/236/213//347/234/237/351/203/250/346/265/201.kif +117 -0
  622. data/lib/bioshogi/explain//346/210/246/345/236/213//347/237/242/345/200/211/344/270/255/351/243/233/350/273/212.kif +71 -0
  623. data/lib/bioshogi/explain//346/210/246/345/236/213//347/237/242/345/200/211/345/267/246/347/276/216/346/277/203/346/200/245/346/210/246.kif +122 -0
  624. data/lib/bioshogi/explain//346/210/246/345/236/213//347/237/242/345/200/211/346/243/222/351/212/200.kif +88 -0
  625. data/lib/bioshogi/explain//346/210/246/345/236/213//347/237/263/347/224/260/346/265/201.kif +58 -0
  626. data/lib/bioshogi/explain//346/210/246/345/236/213//347/250/262/345/272/255/346/210/246/346/263/225.kif +31 -0
  627. data/lib/bioshogi/explain//346/210/246/345/236/213//347/251/264/350/247/222/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +18 -0
  628. data/lib/bioshogi/explain//346/210/246/345/236/213//347/251/264/350/247/222/346/210/246/346/263/225.kif +133 -0
  629. data/lib/bioshogi/explain//346/210/246/345/236/213//347/253/213/347/237/263/346/265/201/345/233/233/351/226/223/351/243/233/350/273/212.kif +43 -0
  630. data/lib/bioshogi/explain//346/210/246/345/236/213//347/253/257/346/243/222/351/212/200.kif +66 -0
  631. data/lib/bioshogi/explain//346/210/246/345/236/213//347/255/213/351/201/225/343/201/204/350/247/222.kif +78 -0
  632. data/lib/bioshogi/explain//346/210/246/345/236/213//347/261/263/351/225/267/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +172 -0
  633. data/lib/bioshogi/explain//346/210/246/345/236/213//347/276/275/347/224/237/345/274/217/350/242/226/351/243/233/350/273/212.kif +172 -0
  634. data/lib/bioshogi/explain//346/210/246/345/236/213//350/200/200/351/276/215/343/201/262/343/201/255/343/202/212/351/243/233/350/273/212.kif +24 -0
  635. data/lib/bioshogi/explain//346/210/246/345/236/213//350/200/200/351/276/215/345/233/233/351/226/223/351/243/233/350/273/212.kif +50 -0
  636. data/lib/bioshogi/explain//346/210/246/345/236/213//350/204/207/343/202/267/343/202/271/343/203/206/343/203/240.kif +100 -0
  637. data/lib/bioshogi/explain//346/210/246/345/236/213//350/205/260/346/216/233/343/201/221/351/212/200.kif +73 -0
  638. data/lib/bioshogi/explain//346/210/246/345/236/213//350/212/261/346/235/221/346/265/201/345/220/215/345/217/244/345/261/213/346/210/246/346/263/225.kif +72 -0
  639. data/lib/bioshogi/explain//346/210/246/345/236/213//350/213/261/343/201/241/343/202/203/343/202/223/346/265/201/344/270/255/351/243/233/350/273/212.kif +64 -0
  640. data/lib/bioshogi/explain//346/210/246/345/236/213//350/213/261/346/230/245/346/265/201/343/202/253/343/203/241/343/203/254/343/202/252/343/203/263.kif +135 -0
  641. data/lib/bioshogi/explain//346/210/246/345/236/213//350/217/205/344/272/225/346/265/201/344/270/211/351/226/223/351/243/233/350/273/212.kif +23 -0
  642. data/lib/bioshogi/explain//346/210/246/345/236/213//350/217/234/343/200/205/346/262/263/346/265/201/342/226/263/357/274/224/345/233/233/350/247/222.kif +14 -0
  643. data/lib/bioshogi/explain//346/210/246/345/236/213//350/217/234/343/200/205/346/262/263/346/265/201/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +24 -0
  644. data/lib/bioshogi/explain//346/210/246/345/236/213//350/227/244/344/272/225/343/202/267/343/202/271/343/203/206/343/203/240.kif +73 -0
  645. data/lib/bioshogi/explain//346/210/246/345/236/213//350/227/244/346/243/256/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +63 -0
  646. data/lib/bioshogi/explain//346/210/246/345/236/213//350/242/226/351/243/233/350/273/212.kif +60 -0
  647. data/lib/bioshogi/explain//346/210/246/345/236/213//350/243/217/343/202/242/343/203/222/343/203/253/346/210/246/346/263/225.kif +29 -0
  648. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/344/272/244/346/217/233/345/236/213.kif +19 -0
  649. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/344/272/244/346/217/233/346/214/257/343/202/212/351/243/233/350/273/212.kif +64 -0
  650. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/346/217/233/343/202/217/343/202/212.kif +20 -0
  651. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/346/217/233/343/202/217/343/202/212/346/226/260/345/236/213.kif +49 -0
  652. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/346/217/233/343/202/217/343/202/212/346/227/251/347/271/260/343/202/212/351/212/200.kif +76 -0
  653. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/346/217/233/343/202/217/343/202/212/346/243/222/351/212/200.kif +65 -0
  654. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/346/217/233/343/202/217/343/202/212/350/205/260/346/216/233/343/201/221/351/212/200.kif +76 -0
  655. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/351/201/223/343/202/252/343/203/274/343/203/227/343/203/263/345/233/233/351/226/223/351/243/233/350/273/212.kif +12 -0
  656. data/lib/bioshogi/explain//346/210/246/345/236/213//350/247/222/351/240/255/346/255/251/346/210/246/346/263/225.kif +15 -0
  657. data/lib/bioshogi/explain//346/210/246/345/236/213//350/266/205/346/200/245/346/210/246.kif +28 -0
  658. data/lib/bioshogi/explain//346/210/246/345/236/213//350/266/205/351/200/237/342/226/262/357/274/223/344/270/203/351/212/200.kif +116 -0
  659. data/lib/bioshogi/explain//346/210/246/345/236/213//351/201/240/345/261/261/346/265/201.kif +98 -0
  660. data/lib/bioshogi/explain//346/210/246/345/236/213//351/203/275/346/210/220/346/265/201/342/226/263/357/274/223/344/270/200/351/207/221.kif +28 -0
  661. data/lib/bioshogi/explain//346/210/246/345/236/213//351/207/221/351/212/200/346/251/213.kif +50 -0
  662. data/lib/bioshogi/explain//346/210/246/345/236/213//351/212/200/351/233/262/351/233/200.kif +38 -0
  663. data/lib/bioshogi/explain//346/210/246/345/236/213//351/216/226/351/216/214/351/212/200.kif +77 -0
  664. data/lib/bioshogi/explain//346/210/246/345/236/213//351/230/252/347/224/260/346/265/201/345/220/221/351/243/233/350/273/212.kif +87 -0
  665. data/lib/bioshogi/explain//346/210/246/345/236/213//351/230/277/344/271/205/346/264/245/346/265/201/346/200/245/346/210/246/347/237/242/345/200/211.kif +74 -0
  666. data/lib/bioshogi/explain//346/210/246/345/236/213//351/231/275/345/213/225/346/214/257/343/202/212/351/243/233/350/273/212.kif +62 -0
  667. data/lib/bioshogi/explain//346/210/246/345/236/213//351/233/200/345/210/272/343/201/227.kif +140 -0
  668. data/lib/bioshogi/explain//346/210/246/345/236/213//351/235/222/351/207/216/346/265/201.kif +31 -0
  669. data/lib/bioshogi/explain//346/210/246/345/236/213//351/242/250/350/273/212.kif +134 -0
  670. data/lib/bioshogi/explain//346/210/246/345/236/213//351/243/257/345/263/266/346/265/201/345/274/225/343/201/215/350/247/222/346/210/246/346/263/225.kif +42 -0
  671. data/lib/bioshogi/explain//346/210/246/345/236/213//351/243/257/345/263/266/346/265/201/347/233/270/346/216/233/343/201/213/343/202/212/345/274/225/343/201/215/350/247/222/346/210/246/346/263/225.kif +49 -0
  672. data/lib/bioshogi/explain//346/210/246/345/236/213//351/253/230/347/224/260/346/265/201/345/267/246/347/216/211.kif +60 -0
  673. data/lib/bioshogi/explain//346/210/246/345/236/213//351/254/274/346/256/272/343/201/227.kif +173 -0
  674. data/lib/bioshogi/explain//346/210/246/345/236/213//351/254/274/346/256/272/343/201/227/345/220/221/343/201/213/343/201/204/351/243/233/350/273/212.kif +73 -0
  675. data/lib/bioshogi/explain//346/210/246/345/236/213//351/255/224/347/225/214/345/233/233/351/226/223/351/243/233/350/273/212.kif +25 -0
  676. data/lib/bioshogi/explain//346/210/246/345/236/213//351/263/245/345/210/272/343/201/227.kif +32 -0
  677. data/lib/bioshogi/explain//346/210/246/345/236/213//351/267/272/345/256/256/345/256/232/350/267/241.kif +72 -0
  678. data/lib/bioshogi/explain//346/210/246/345/236/213//357/274/224/342/206/222/357/274/223/346/210/246/346/263/225.kif +72 -0
  679. data/lib/bioshogi/explain//346/210/246/345/236/213//357/274/226/347/255/213/344/275/215/345/217/226/343/202/212.kif +42 -0
  680. data/lib/bioshogi/explain//346/211/213/347/255/213//343/201/265/343/202/223/343/201/251/343/201/227/343/201/256/346/241/202.kif +25 -0
  681. data/lib/bioshogi/explain//346/211/213/347/255/213//343/203/221/343/203/263/343/203/204/343/202/222/350/204/261/343/201/220.kif +28 -0
  682. data/lib/bioshogi/explain//346/211/213/347/255/213//343/203/255/343/202/261/343/203/203/343/203/210.kif +25 -0
  683. data/lib/bioshogi/explain//346/211/213/347/255/213//345/211/262/343/202/212/346/211/223/343/201/241/343/201/256/351/212/200.kif +28 -0
  684. data/lib/bioshogi/explain//346/211/213/347/255/213//345/236/202/343/202/214/346/255/251.kif +25 -0
  685. data/lib/bioshogi/explain//346/211/213/347/255/213//345/271/275/351/234/212/350/247/222.kif +36 -0
  686. data/lib/bioshogi/explain//346/211/213/347/255/213//346/241/202/351/240/255/343/201/256/351/212/200.kif +25 -0
  687. data/lib/bioshogi/explain//346/211/213/347/255/213//347/266/231/343/201/216/346/241/202.kif +25 -0
  688. data/lib/bioshogi/explain//346/211/213/347/255/213//350/205/271/351/212/200.kif +25 -0
  689. data/lib/bioshogi/explain//346/211/213/347/255/213//351/201/240/350/246/213/343/201/256/350/247/222.kif +25 -0
  690. data/lib/bioshogi/explain//346/211/213/347/255/213//351/207/221/345/272/225/343/201/256/346/255/251.kif +30 -0
  691. data/lib/bioshogi/explain//346/211/213/347/255/213//351/212/200/345/206/240/343/201/256/345/260/217/351/203/250/345/261/213.kif +86 -0
  692. data/lib/bioshogi/extreme_validator.rb +145 -0
  693. data/lib/bioshogi/formatter/akf_builder.rb +79 -0
  694. data/lib/bioshogi/formatter/animation/animation_apng_builder.rb +18 -0
  695. data/lib/bioshogi/formatter/animation/animation_builder_timeout.rb +28 -0
  696. data/lib/bioshogi/formatter/animation/animation_gif_builder.rb +166 -0
  697. data/lib/bioshogi/formatter/animation/animation_mp4_builder.rb +370 -0
  698. data/lib/bioshogi/formatter/animation/animation_webp_builder.rb +14 -0
  699. data/lib/bioshogi/formatter/animation/animation_zip_builder.rb +72 -0
  700. data/lib/bioshogi/formatter/animation/audio_theme_info.rb +97 -0
  701. data/lib/bioshogi/formatter/animation/demo_builder.rb +58 -0
  702. data/lib/bioshogi/formatter/animation/ffmpeg_support.rb +110 -0
  703. data/lib/bioshogi/formatter/animation/progress_cop.rb +114 -0
  704. data/lib/bioshogi/formatter/animation/serial_filename_generator.rb +55 -0
  705. data/lib/bioshogi/formatter/animation/system_support.rb +60 -0
  706. data/lib/bioshogi/formatter/core.rb +239 -0
  707. data/lib/bioshogi/formatter/csa_builder.rb +150 -0
  708. data/lib/bioshogi/formatter/ki2_builder.rb +58 -0
  709. data/lib/bioshogi/formatter/kif_builder.rb +83 -0
  710. data/lib/bioshogi/formatter/kif_ki2_shared.rb +144 -0
  711. data/lib/bioshogi/formatter/last_action_info.rb +77 -0
  712. data/lib/bioshogi/formatter/parser_methods.rb +37 -0
  713. data/lib/bioshogi/formatter/runner.rb +44 -0
  714. data/lib/bioshogi/formatter/skill_embed.rb +174 -0
  715. data/lib/bioshogi/hand/drop.rb +78 -0
  716. data/lib/bioshogi/hand/move.rb +114 -0
  717. data/lib/bioshogi/hand/shared.rb +102 -0
  718. data/lib/bioshogi/hand_log.rb +72 -0
  719. data/lib/bioshogi/hand_logs.rb +21 -0
  720. data/lib/bioshogi/hand_logs_mod.rb +29 -0
  721. data/lib/bioshogi/input_adapter/abstract_adapter.rb +126 -0
  722. data/lib/bioshogi/input_adapter/csa_adapter.rb +56 -0
  723. data/lib/bioshogi/input_adapter/ki2_adapter.rb +155 -0
  724. data/lib/bioshogi/input_adapter/ki2_motion_wrapper.rb +42 -0
  725. data/lib/bioshogi/input_adapter/ki2_place_methods.rb +50 -0
  726. data/lib/bioshogi/input_adapter/kif_adapter.rb +64 -0
  727. data/lib/bioshogi/input_adapter/location_validation.rb +23 -0
  728. data/lib/bioshogi/input_adapter/origin_soldier_methods.rb +24 -0
  729. data/lib/bioshogi/input_adapter/sfen_adapter.rb +60 -0
  730. data/lib/bioshogi/input_adapter/shared_validation.rb +110 -0
  731. data/lib/bioshogi/input_parser.rb +74 -0
  732. data/lib/bioshogi/kanji_number.rb +128 -0
  733. data/lib/bioshogi/kifu_format_info.rb +15 -0
  734. data/lib/bioshogi/location.rb +131 -0
  735. data/lib/bioshogi/logger.rb +5 -0
  736. data/lib/bioshogi/main_clock.rb +21 -0
  737. data/lib/bioshogi/media.rb +85 -0
  738. data/lib/bioshogi/official_formatter.rb +433 -0
  739. data/lib/bioshogi/order_info.rb +12 -0
  740. data/lib/bioshogi/parser/base.rb +61 -0
  741. data/lib/bioshogi/parser/bod_parser.rb +8 -0
  742. data/lib/bioshogi/parser/csa_parser.rb +198 -0
  743. data/lib/bioshogi/parser/header.rb +82 -0
  744. data/lib/bioshogi/parser/inspector.rb +47 -0
  745. data/lib/bioshogi/parser/kakinoki_methods.rb +125 -0
  746. data/lib/bioshogi/parser/ki2_parser.rb +39 -0
  747. data/lib/bioshogi/parser/kif_parser.rb +60 -0
  748. data/lib/bioshogi/parser/pi.rb +45 -0
  749. data/lib/bioshogi/parser/sfen_parser.rb +26 -0
  750. data/lib/bioshogi/parser/time_parser.rb +24 -0
  751. data/lib/bioshogi/parser.rb +40 -0
  752. data/lib/bioshogi/piece/ek_score_info.rb +22 -0
  753. data/lib/bioshogi/piece/piece_csa.rb +31 -0
  754. data/lib/bioshogi/piece/piece_pressure.rb +23 -0
  755. data/lib/bioshogi/piece/piece_scale.rb +19 -0
  756. data/lib/bioshogi/piece/piece_score.rb +31 -0
  757. data/lib/bioshogi/piece/piece_vector.rb +156 -0
  758. data/lib/bioshogi/piece/yomiage_piece_info.rb +31 -0
  759. data/lib/bioshogi/piece.rb +276 -0
  760. data/lib/bioshogi/piece_box.rb +152 -0
  761. data/lib/bioshogi/place.rb +171 -0
  762. data/lib/bioshogi/player/other_methods.rb +60 -0
  763. data/lib/bioshogi/player/piece_box_methods.rb +33 -0
  764. data/lib/bioshogi/player/pressure_methods.rb +37 -0
  765. data/lib/bioshogi/player/soldier_methods.rb +45 -0
  766. data/lib/bioshogi/player.rb +101 -0
  767. data/lib/bioshogi/player_executor/base.rb +120 -0
  768. data/lib/bioshogi/player_executor/brain.rb +7 -0
  769. data/lib/bioshogi/player_executor/error_handler.rb +49 -0
  770. data/lib/bioshogi/player_executor/human.rb +8 -0
  771. data/lib/bioshogi/player_executor/without_monitor.rb +7 -0
  772. data/lib/bioshogi/preset_info.rb +130 -0
  773. data/lib/bioshogi/rect.rb +6 -0
  774. data/lib/bioshogi/screen_image/README.org +14 -0
  775. data/lib/bioshogi/screen_image/board_methods.rb +148 -0
  776. data/lib/bioshogi/screen_image/color_theme_info.rb +137 -0
  777. data/lib/bioshogi/screen_image/core_methods.rb +337 -0
  778. data/lib/bioshogi/screen_image/font_theme_info.rb +35 -0
  779. data/lib/bioshogi/screen_image/helper.rb +73 -0
  780. data/lib/bioshogi/screen_image/layer_methods.rb +87 -0
  781. data/lib/bioshogi/screen_image/palette_info.rb +15 -0
  782. data/lib/bioshogi/screen_image/pentagon.rb +167 -0
  783. data/lib/bioshogi/screen_image/piece_font_weight_info.rb +12 -0
  784. data/lib/bioshogi/screen_image/renderer.rb +15 -0
  785. data/lib/bioshogi/screen_image/soldier_methods.rb +136 -0
  786. data/lib/bioshogi/screen_image/stand.rb +132 -0
  787. data/lib/bioshogi/screen_image/turn_methods.rb +45 -0
  788. data/lib/bioshogi/screen_image.rb +11 -0
  789. data/lib/bioshogi/sfen.rb +120 -0
  790. data/lib/bioshogi/sfen_importer.rb +29 -0
  791. data/lib/bioshogi/simple_model.rb +13 -0
  792. data/lib/bioshogi/simulator.rb +44 -0
  793. data/lib/bioshogi/single_clock.rb +36 -0
  794. data/lib/bioshogi/soldier.rb +293 -0
  795. data/lib/bioshogi/soldier_box.rb +38 -0
  796. data/lib/bioshogi/soldier_walker.rb +122 -0
  797. data/lib/bioshogi/source.rb +30 -0
  798. data/lib/bioshogi/tasks/about.rake +5 -0
  799. data/lib/bioshogi/tasks/chore.rake +8 -0
  800. data/lib/bioshogi/tasks/clean.rake +4 -0
  801. data/lib/bioshogi/tasks/color_theme.rake +9 -0
  802. data/lib/bioshogi/tasks/demo.rake +11 -0
  803. data/lib/bioshogi/tasks/doc.rake +11 -0
  804. data/lib/bioshogi/tasks/extreme_validator.rake +8 -0
  805. data/lib/bioshogi/tasks/generate.rake +9 -0
  806. data/lib/bioshogi/tasks/loader.rake +9 -0
  807. data/lib/bioshogi/tasks/normalize.rake +8 -0
  808. data/lib/bioshogi/tasks/tactic_validator.rake +8 -0
  809. data/lib/bioshogi/tasks/test.rake +41 -0
  810. data/lib/bioshogi/turn_info.rb +67 -0
  811. data/lib/bioshogi/v/once_vector.rb +10 -0
  812. data/lib/bioshogi/v/repeat_vector.rb +10 -0
  813. data/lib/bioshogi/v.rb +77 -0
  814. data/lib/bioshogi/vector_constants.rb +4 -0
  815. data/lib/bioshogi/version.rb +3 -0
  816. data/lib/bioshogi/yomiage/formatter.rb +31 -0
  817. data/lib/bioshogi/yomiage/kanji_info.rb +19 -0
  818. data/lib/bioshogi/yomiage/number_info.rb +18 -0
  819. data/lib/bioshogi.rb +62 -0
  820. metadata +1149 -0
@@ -0,0 +1,72 @@
1
+ module Bioshogi
2
+ module Formatter
3
+ module Animation
4
+ class AnimationZipBuilder
5
+ include Builder
6
+ include AnimationBuilderTimeout
7
+
8
+ def self.default_params
9
+ super.merge({
10
+ :basename_format => "%04d",
11
+ :progress_callback => nil, # 進捗通知用
12
+ :cover_text => nil, # 表紙の内容(あれば表紙画像を作る)
13
+ :bottom_text => nil, # 表紙の右下に小さく表示する1行
14
+ })
15
+ end
16
+
17
+ attr_reader :params
18
+
19
+ delegate :logger, to: "Bioshogi"
20
+
21
+ def initialize(formatter, params = {})
22
+ require "zip"
23
+ @formatter = formatter
24
+ @params = self.class.default_params.merge(params)
25
+ end
26
+
27
+ def to_binary
28
+ container = @formatter.container_for_image
29
+ @screen_image_renderer = ScreenImage.renderer(container, params)
30
+ @progress_cop = ProgressCop.new(1 + 1 + @formatter.pi.move_infos.size, &params[:progress_callback])
31
+ zos = Zip::OutputStream.write_buffer do |z|
32
+ if v = params[:cover_text].presence
33
+ @progress_cop.next_step("表紙描画")
34
+ tob("表紙描画") { zip_write2(z, "cover.png", CoverImage.renderer(text: v, **params.slice(:bottom_text, :width, :height)).to_png24_binary) }
35
+ end
36
+ @progress_cop.next_step("初期配置")
37
+ tob("初期配置") { zip_write1(z, 0) }
38
+ @formatter.pi.move_infos.each.with_index do |e, i|
39
+ @progress_cop.next_step("(#{i}/#{@formatter.pi.move_infos.size}) #{e[:input]}")
40
+ container.execute(e[:input])
41
+ tob("#{i}/#{@formatter.pi.move_infos.size}") { zip_write1(z, i.next) }
42
+ logger.info { "move: #{i} / #{@formatter.pi.move_infos.size}" } if i.modulo(10).zero?
43
+ end
44
+ end
45
+ @screen_image_renderer.clear_all
46
+ zos.string
47
+ end
48
+
49
+ private
50
+
51
+ def filename_for(index)
52
+ (params[:basename_format] % index) + ".png"
53
+ end
54
+
55
+ def zip_write1(z, index)
56
+ zip_write2(z, filename_for(index), @screen_image_renderer.to_png24_binary)
57
+ end
58
+
59
+ def zip_write2(z, filename, bin)
60
+ entry = Zip::Entry.new(z, filename)
61
+ entry.time = fixed_entry_time
62
+ z.put_next_entry(entry)
63
+ z.write(bin)
64
+ end
65
+
66
+ def fixed_entry_time
67
+ @fixed_entry_time ||= Zip::DOSTime.from_time(Time.now)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,97 @@
1
+ # ボリュームは上げると音割れする場合があるため基本下げて調整する
2
+ module Bioshogi
3
+ module Formatter
4
+ module Animation
5
+ class AudioThemeInfo
6
+ include ApplicationMemoryRecord
7
+ memory_record [
8
+ # ../../../shogi-extend/nuxt_side/components/Kiwi/models/audio_theme_info.js
9
+ # assets/audios
10
+ { key: :is_audio_theme_none, name: "無音", source_url: nil, author: nil, audio_part_a: nil, audio_part_a_volume: nil, audio_part_a_duration: nil, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
11
+ { key: :is_audio_theme_breakbeat_only, name: "ブレイクビート", source_url: nil, author: nil, audio_part_a: :breakbeat_long, audio_part_a_volume: 1.0, audio_part_a_duration: 35.55, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
12
+ { key: :is_audio_theme_dance_chain, name: "ヘッドスピン→ブレイクビート", source_url: nil, author: nil, audio_part_a: :headspin_long, audio_part_a_volume: 1.0, audio_part_a_duration: 28.05, audio_part_a_loop: false, audio_part_b: :breakbeat_long_strip, audio_part_b_volume: 1.0, acrossfade_duration: 1, desc: "", },
13
+ { key: :is_audio_theme_diamond_shark, name: "Diamond Shark", source_url: "https://www.youtube.com/watch?v=JZMHhmDwauk", author: "27Corazones Beats", audio_part_a: :diamond_shark, audio_part_a_volume: 1.0, audio_part_a_duration: 3*60+12, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
14
+ { key: :is_audio_theme_ds11184, name: "Gliese (Prod. Khaim)", source_url: "https://dova-s.jp/bgm/play11184.html", author: "Khaim", audio_part_a: :ds11184, audio_part_a_volume: 1.0, audio_part_a_duration: 157.13, audio_part_a_loop: true, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: nil, },
15
+ { key: :is_audio_theme_ds13037, name: "YouTube向けラグタイム", source_url: "https://dova-s.jp/bgm/play13037.html", author: "天休ひさし", audio_part_a: :ds13037, audio_part_a_volume: 1.0, audio_part_a_duration: 96.02, audio_part_a_loop: true, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "loop", },
16
+ { key: :is_audio_theme_ds14640, name: "しゅわしゅわハニーレモン350ml", source_url: "https://dova-s.jp/bgm/play14640.html", author: "しゃろう", audio_part_a: :ds14640, audio_part_a_volume: 1.0, audio_part_a_duration: 60+36, audio_part_a_loop: true, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
17
+ { key: :is_audio_theme_ds1982, name: "8-bit Aggressive1", source_url: "https://dova-s.jp/bgm/play1982.html", author: "もっぴーさうんど", audio_part_a: :ds1982, audio_part_a_volume: 1.0, audio_part_a_duration: 60*1+58, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
18
+ { key: :is_audio_theme_ds3479, name: "Blue Ever", source_url: "https://dova-s.jp/bgm/play3479.html", author: "Khaim", audio_part_a: :ds3479, audio_part_a_volume: 1.0, audio_part_a_duration: 56.03, audio_part_a_loop: true, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: nil, },
19
+ { key: :is_audio_theme_ds3812, name: "Three Keys (Freestyle Rap Beat No.02)", source_url: "https://dova-s.jp/bgm/play3812.html", author: "Khaim", audio_part_a: :ds3812, audio_part_a_volume: 1.0, audio_part_a_duration: 237.72, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: nil, },
20
+ { key: :is_audio_theme_ds4520, name: "わくわくクッキングタイム的なBGM", source_url: "https://dova-s.jp/bgm/play4520.html", author: "鷹尾まさき", audio_part_a: :ds4520, audio_part_a_volume: 1.0, audio_part_a_duration: 61.205, audio_part_a_loop: false, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
21
+ { key: :is_audio_theme_headspin_only, name: "ヘッドスピン", source_url: nil, author: nil, audio_part_a: :headspin_long, audio_part_a_volume: 1.0, audio_part_a_duration: 28.05, audio_part_a_loop: true, audio_part_b: nil, audio_part_b_volume: nil, acrossfade_duration: nil, desc: "", },
22
+ ]
23
+
24
+ def to_params
25
+ {
26
+ :audio_part_a => audio_part_a,
27
+ :audio_part_a_volume => audio_part_a_volume,
28
+ :audio_part_b => audio_part_b,
29
+ :audio_part_b_volume => audio_part_b_volume,
30
+ :acrossfade_duration => acrossfade_duration,
31
+ :bottom_text => bottom_text,
32
+ }
33
+ end
34
+
35
+ def audio_part_a
36
+ real_path(super)
37
+ end
38
+
39
+ def audio_part_b
40
+ real_path(super)
41
+ end
42
+
43
+ # ruby -I lib -r bioshogi -e 'tp Bioshogi::AudioThemeInfo.collect{ |e| [e.key, e.native_duration&.round(2)] }.to_h'
44
+ # |---------------------------------+--------|
45
+ # | is_audio_theme_none | |
46
+ # | is_audio_theme_headspin_only | 28.05 |
47
+ # | is_audio_theme_breakbeat_only | 35.55 |
48
+ # | is_audio_theme_dance_chain | 28.05 |
49
+ # | is_audio_theme_nc97718 | 24.0 |
50
+ # | is_audio_theme_ds4712 | 235.26 |
51
+ # | is_audio_theme_nc105702 | 94.15 |
52
+ # | is_audio_theme_nc107860 | 69.85 |
53
+ # | is_audio_theme_ds5616 | 113.59 |
54
+ # | is_audio_theme_nc142538 | 95.66 |
55
+ # | is_audio_theme_shw_akatsuki_japan | 236.64 |
56
+ # | is_audio_theme_ds3895 | 133.7 |
57
+ # | is_audio_theme_ds1245 | 96.05 |
58
+ # | is_audio_theme_ds7138 | 36.05 |
59
+ # | is_audio_theme_ds3812 | 237.72 |
60
+ # | is_audio_theme_ds3480 | 55.44 |
61
+ # | is_audio_theme_ds11184 | 157.13 |
62
+ # | is_audio_theme_ds6574 | 174.6 |
63
+ # |---------------------------------+--------|
64
+ def native_duration
65
+ if audio_part_a
66
+ Media.duration(audio_part_a)
67
+ end
68
+ end
69
+
70
+ def valid?
71
+ errors = 0
72
+ if audio_part_a && !audio_part_a.exist?
73
+ errors += 1
74
+ end
75
+ if audio_part_b && !audio_part_b.exist?
76
+ errors += 1
77
+ end
78
+ errors == 0
79
+ end
80
+
81
+ private
82
+
83
+ def real_path(basename)
84
+ if basename
85
+ ASSETS_DIR.join("audios/#{basename}.m4a")
86
+ end
87
+ end
88
+
89
+ def bottom_text
90
+ if author
91
+ "BGM: #{name} by #{author}"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,58 @@
1
+ # BGMが合っているか確認するのが目的
2
+ # 別になくてもよい
3
+
4
+ module Bioshogi
5
+ module Formatter
6
+ module Animation
7
+ class DemoBuilder
8
+ def call
9
+ Bioshogi.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
10
+ no_audio_file_create_unless_file
11
+ AudioThemeInfo.each(&method(:build_one))
12
+ end
13
+
14
+ private
15
+
16
+ def build_one(e)
17
+ if e.audio_part_a && e.audio_part_b.nil?
18
+ name = ("%02d" % e.code) + "_" + e.name.gsub(/[?.()-]/, "_").gsub(/\P{Graph}+/, "_").gsub(/_+/, "_")
19
+ output_file = store_dir.join("#{name}.mp4")
20
+ system "ffmpeg -v warning -i #{no_audio_file} -i #{e.audio_part_a} -c copy -y #{output_file}"
21
+ puts output_file
22
+ end
23
+ end
24
+
25
+ def no_audio_file_create_unless_file
26
+ unless no_audio_file.exist?
27
+ no_audio_file_create
28
+ end
29
+ end
30
+
31
+ def no_audio_file_create
32
+ # info = Parser.parse("position sfen g1+P1k1+P+P+L/1p3P3/+R+p2pp1pl/1NNsg+p2+R/+b+nL+P1+p3/1P3ssP1/2P1+Ps2N/4+P1P1L/+B5G1g b - 1 moves 4b4a+ 5a5b 7d6b+ 5b6b 7a6a 6b5b 6a5a 5b6b 8d7b+ 6b6c 6e7d 6c7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b 1a2a 2b1b N*2d 2c2d 2a1a 1b2b 1d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 4d3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d P*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 1d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d L*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*3d 3c3d 7g7f 4e4d 3a2a 2b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d L*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b 1a2a 2b1b N*2d 2c2d 9i8i 4d4e 2a1a 1b2b 1d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d P*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 1d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d L*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*3d 3c3d 8i8h 4e4d 3a2a 2b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d L*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b 1a2a 2b1b N*2d 2c2d 8h7h 4d4e 2a1a 1b2b 1d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d P*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 1d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d L*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*3d 3c3d 7h7g 4e4d 3a2a 2b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d L*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b 1a2a 2b1b N*2d 2c2d 7g6g 4d4e 2a1a 1b2b 1d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d P*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 1d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d L*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*3d 3c3d 6g6f 4e4d 3a2a 2b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d L*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 3d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b L*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 1a2a 2b1b 2d1d L*1c 2a1a 1b2b 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b N*2d 2c2d 2a3a 3b2b 1d2d P*2c 3a2a 2b3b 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b N*3d 3c3d 3a4a 4b3b 2d3d P*3c 4a3a 3b4b 5a4a 4b5b 6a5a 5b6b P*6c 6b7b 7d8c 7b6c 8c8d N*8c 8d7d 6c6b 5a6a 6b5b 4a5a 5b4b 3a4a 4b3b 2a3a 3b2b N*1d 1c1d 9c8b 9a8b 1a2a 2b1b P*1c 1b1c 1g2e 3f2e 1h1d 2e1d 3d1d 1c1d L*1f 1d2d S*2e 2d3e 5g4f 3e2f 6f4h 4g4h 4f3f 2f1g S*2h 1g1h 2h1i 1h1i G*2i")
33
+ # bin = info.to_animation_mp4(page_duration: 0.0166666666667, end_duration: 0)
34
+ # no_audio_file.write(bin)
35
+
36
+ file = Explain::TacticInfo.flat_lookup("トマホーク").sample_kif_file
37
+ info = Parser.parse(file)
38
+ bin = info.to_animation_mp4({
39
+ :color_theme_key => :is_color_theme_real,
40
+ :page_duration => 0.5,
41
+ :end_duration => 7,
42
+ :audio_part_a => nil,
43
+ :audio_part_b => nil,
44
+ })
45
+ no_audio_file.write(bin)
46
+ end
47
+
48
+ def no_audio_file
49
+ store_dir.join("no_audio.mp4")
50
+ end
51
+
52
+ def store_dir
53
+ ROOT_DIR.join("../demo/BGM合成後の確認用").expand_path
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,110 @@
1
+ module Bioshogi
2
+ module Formatter
3
+ module Animation
4
+ class FfmpegError < StandardError; end
5
+
6
+ concern :FfmpegSupport do
7
+ include SystemSupport
8
+
9
+ included do
10
+ cattr_accessor(:one_second) { 10000 } # ffmpeg の -r x/y の x の部分
11
+ end
12
+
13
+ class_methods do
14
+ def default_params
15
+ super.merge({
16
+ # 全体
17
+ :page_duration => 1.0, # 1手N秒 10000/60 = 166.666666667 なので 0.0166666666667 を指定すると 60 FPS になる
18
+ :end_duration => 0, # 終了図をN秒表示する
19
+ :end_pages => nil, # 終了図追加フレーム数。空なら end_duration / page_duration
20
+ :progress_callback => nil, # 進捗通知用
21
+ :cover_text => nil, # 表紙(nilなら作らない)
22
+ :bottom_text => nil, # 表紙の右下に小さく表示する1行
23
+ :turn_embed_key => "is_turn_embed_off", # 手数を埋め込むか?
24
+
25
+ # 他
26
+ :ffmpeg_after_embed_options => nil, # ffmpegコマンドの YUV420 変換の際に最後に埋めるコマンド(-crt )
27
+ :tmpdir_remove => true, # 作業ディレクトリを最後に削除するか? (デバッグ時にはfalseにする)
28
+ :factory_method_key => "is_factory_method_ffmpeg", # is_factory_method_rmagick or is_factory_method_ffmpeg
29
+ })
30
+ end
31
+ end
32
+
33
+ attr_reader :params
34
+
35
+ private
36
+
37
+ def in_work_directory
38
+ begin
39
+ require "rmagick"
40
+ dir = Dir.mktmpdir
41
+ logger.info { "cd #{dir}" }
42
+ Dir.chdir(dir) do
43
+ yield
44
+ end
45
+ ensure
46
+ if params[:tmpdir_remove]
47
+ logger.info { "rm -fr #{dir}" }
48
+ FileUtils.remove_entry_secure(dir)
49
+ end
50
+ end
51
+ end
52
+
53
+ def factory_method_key
54
+ params.fetch(:factory_method_key).to_s
55
+ end
56
+
57
+ def page_duration
58
+ params[:page_duration].to_f
59
+ end
60
+
61
+ def ffmpeg_after_embed_options
62
+ if v = params[:ffmpeg_after_embed_options].presence
63
+ Shellwords.join(Shellwords.split(v))
64
+ end
65
+ end
66
+
67
+ # 最後の局面を追加で足す回数
68
+ # これを設定しても最終的な秒数は不明なため基本指定せず、指定した end_duration から算出した方がよい
69
+ # |------------------+------------------------+-----------+-----+----------------|
70
+ # | 伸ばしたい秒数 | 1手N秒 | | | 追加フレーム数 |
71
+ # | end_duration | page_duration | | | end_pages |
72
+ # |------------------+------------------------+-----------+-----+----------------|
73
+ # | 2.0 | 0.4 | 2.0 / 0.4 | 5.0 | 5 |
74
+ # | 2.0 | 0.5 | 2.0 / 0.5 | 4.0 | 4 |
75
+ # | 2.0 | 0.6 | 2.0 / 0.6 | 3.3 | 4 |
76
+ # | 2.0 | 0.9 | 2.0 / 0.9 | 2.2 | 3 |
77
+ # | 2.0 | 1.0 | 2.0 / 1.0 | 2.0 | 2 |
78
+ # | 2.0 | 1.1 | 2.0 / 1.1 | 1.8 | 2 |
79
+ # | 2.0 | 2.0 | 2.0 / 2.0 | 1.0 | 1 |
80
+ # | 2.0 | 3.0 | 2.0 / 3.0 | 0.6 | 1 |
81
+ # | 2.0 | 4.0 | 2.0 / 4.0 | 0.5 | 1 |
82
+ # | 0.1 | 1.0 | 0.1 / 1.0 | 0.1 | 1 |
83
+ # | 0.0 | 1.0 | 0.0 / 1.0 | 0.0 | 0 |
84
+ # | 0.0 | 0.0 | 0.0 / 0.0 | ERR | |
85
+ # |------------------+------------------------+-----------+-----+----------------|
86
+ # 伸ばしたい秒数分だけ手が必要なので「伸ばす秒数/1手秒数」で追加フレーム数がわかる
87
+ # ただ1手の秒数より伸ばす秒数が少ないと繰り上げる必要がある
88
+ def end_pages
89
+ if v = params[:end_pages]
90
+ v.to_i
91
+ else
92
+ params[:end_duration].fdiv(page_duration).ceil
93
+ end
94
+ end
95
+
96
+ # 1手 0.5 秒 → "-r 60/30"
97
+ # 1手 1.0 秒 → "-r 60/60"
98
+ # 1手 1.5 秒 → "-r 60/90"
99
+ def fps_value
100
+ v = (one_second * page_duration).to_f
101
+ "#{one_second}/#{v}"
102
+ end
103
+
104
+ def sfg
105
+ @sfg ||= SerialFilenameGenerator.new
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,114 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # 進捗通知
4
+ #
5
+ # progress_cop = ProgressCop.new(5) { |e| puts e }
6
+ # progress_cop.next_step("message1")
7
+ # progress_cop.next_step("message2")
8
+ # progress_cop.next_step("message3")
9
+ #
10
+ # >> 2021-09-11 11:20:33 1/5 12.50 % T1 message1
11
+ # >> 2021-09-11 11:20:33 2/5 25.00 % T0 message2 <-- 1秒経過していない
12
+ # >> 2021-09-11 11:20:34 3/5 37.50 % T1 message3 <-- 1秒経過したので通知するべき
13
+ #
14
+ module Bioshogi
15
+ module Formatter
16
+ module Animation
17
+ class ProgressCop
18
+ attr_reader :timestamp
19
+ attr_reader :total
20
+ attr_reader :step
21
+ attr_reader :message
22
+
23
+ def initialize(total = 100, params = {}, &callback)
24
+ @total = total
25
+
26
+ @params = {
27
+ throttle_interval: 1, # trigger? は最低N秒間隔とする。指定したからといって callback の間隔が変わるわけではない
28
+ }.merge(params)
29
+
30
+ @callback = callback
31
+
32
+ @step = 0
33
+ @message = nil
34
+
35
+ @timestamp = nil
36
+ @last_triggered = nil
37
+ end
38
+
39
+ def next_step(message = nil)
40
+ next_jump(1, message)
41
+ end
42
+
43
+ def next_jump(step_value, message = nil)
44
+ @timestamp = Time.now
45
+ @message = message
46
+ @step += step_value
47
+ if interval_passed?
48
+ @trigger = true
49
+ @last_triggered = @timestamp
50
+ else
51
+ @trigger = false
52
+ end
53
+ Bioshogi.logger.info { log }
54
+ if @callback
55
+ @callback.call(self)
56
+ end
57
+ end
58
+
59
+ def trigger? # TODO: 名前がいまいち。「ユーザーに見せるタイミングになっている」の意
60
+ @trigger
61
+ end
62
+
63
+ def percent
64
+ to_f * 100
65
+ end
66
+
67
+ def to_f
68
+ @step.fdiv(@total)
69
+ end
70
+
71
+ def to_s
72
+ [
73
+ @timestamp.strftime("%F %T"),
74
+ "#{@step}/#{@total}",
75
+ "%6.2f %%" % percent,
76
+ "T%d" % (@trigger ? 1 : 0),
77
+ "#{message}"
78
+ ].join(" ").strip
79
+ end
80
+
81
+ def log
82
+ to_s
83
+ end
84
+
85
+ def inspect
86
+ to_s
87
+ end
88
+
89
+ def to_h
90
+ {
91
+ :timestamp => timestamp,
92
+ :total => total,
93
+ :step => step,
94
+ :percent => percent,
95
+ :message => message,
96
+ :log => log,
97
+ }
98
+ end
99
+
100
+ private
101
+
102
+ # 一定期間経過したか?
103
+ def interval_passed?
104
+ unless @last_triggered
105
+ return true
106
+ end
107
+ if v = @params[:throttle_interval]
108
+ (@timestamp - @last_triggered) >= v
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,55 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Bioshogi
4
+ module Formatter
5
+ module Animation
6
+ class SerialFilenameGenerator
7
+ attr_accessor :index
8
+ attr_accessor :prefix
9
+ attr_accessor :ext_type
10
+ attr_accessor :number_format
11
+
12
+ def initialize(prefix: "_input", index: 0, ext_type: "png", number_format: "%04d")
13
+ @prefix = prefix
14
+ @index = index
15
+ @ext_type = ext_type
16
+ @number_format = number_format
17
+ end
18
+
19
+ def next
20
+ format("PNG24:#{name}", @index).tap { @index += 1 }
21
+ end
22
+
23
+ def name
24
+ "#{@prefix}#{@number_format}.#{ext_type}"
25
+ end
26
+
27
+ def exist_files
28
+ Dir[wild_name]
29
+ end
30
+
31
+ def shell_inspect
32
+ `ls -alh #{wild_name}`
33
+ end
34
+
35
+ def info
36
+ {
37
+ "ページ数" => index,
38
+ "存在ファイル数" => exist_files.count,
39
+ "ファイル名" => name,
40
+ }
41
+ end
42
+
43
+ def inspect
44
+ info.collect { |k, v| "#{k}: #{v}" }.join(", ")
45
+ end
46
+
47
+ private
48
+
49
+ def wild_name
50
+ "#{prefix}*.#{ext_type}"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,60 @@
1
+ require "shellwords"
2
+ require "timeout"
3
+ require "systemu"
4
+
5
+ module Bioshogi
6
+ module Formatter
7
+ module Animation
8
+ module SystemSupport
9
+ extend self
10
+
11
+ FFMPEG_CURRENT_VERSION_REQUIRED_GTEQ = "4.4"
12
+
13
+ delegate :logger, to: "Bioshogi"
14
+
15
+ def strict_system(command)
16
+ logger.tagged("execute") do
17
+ t = Time.now
18
+ logger.info { command }
19
+ status, stdout, stderr = systemu(command) # 例外は出ないのでensure不要
20
+ logger.info { "status: #{status}" } unless status.success?
21
+ logger.info { "elapsed: #{(Time.now - t).round}s" }
22
+ logger.info { "stderr: #{stderr}" } if stderr.present?
23
+ logger.info { "stdout: #{stdout}" } if stdout.present?
24
+ unless status.success?
25
+ raise StandardError, stderr.strip
26
+ end
27
+ end
28
+ end
29
+
30
+ def command_required!(command)
31
+ logger.info { "which #{command}" }
32
+ status, _, _ = systemu("which #{command}")
33
+ logger.info { "status: #{status}" }
34
+ unless status.success?
35
+ raise StandardError, "no #{command} in path"
36
+ end
37
+ end
38
+
39
+ def ffmpeg_version_required!(need = FFMPEG_CURRENT_VERSION_REQUIRED_GTEQ)
40
+ if current = ffmpeg_current_version
41
+ need = Gem::Version.new(need)
42
+ if current < need
43
+ raise FfmpegError, "ffmpeg requires version #{need} or later, but provides version #{current}"
44
+ end
45
+ end
46
+ end
47
+
48
+ def ffmpeg_current_version
49
+ command = "ffmpeg -version | head -1"
50
+ logger.info { command }
51
+ s = `#{command}`
52
+ logger.info { s }
53
+ if md = s.match(/version\s+(\S+)/i)
54
+ Gem::Version.create(md.captures.first)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end