bioshogi 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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