fork(1) download
  1. #!ruby
  2.  
  3. =begin
  4.  
  5. ※問題
  6. c言語です。以下のプログラミングを教えてください。
  7. 五目並べとは,以下のルールをもつゲームである.
  8. 2人のプレイヤーが盤面の上に黒・白の石を 1つずつ交互に置く.
  9. 置く場所は自由(禁じ手はないもとする)であり,いったん置いた石は除かれない.
  10. 自らの色の石を 5個以上の直線(縦、横、もしくは 45度の斜め)に並べた方が勝ちとなる.
  11. 石が盤面の全て埋め尽くした時点で勝敗が決まっていない場合は引き分けとする.
  12. 盤面の大きさは 15x15 とする
  13.  
  14. 【課題問題I】
  15. 五目並べのプログラムを作成せよ.ただし,以下の機能を有すること.
  16. 先手は o,後手は x として表示すると 最初に盤面の情報を表示し,次に,どちらかの番であるか表示し,石を置く位置を入力させること.
  17. 位置として置けない場所が入力された場合は再入力させること
  18. 勝敗が決まった場合は,どちらが勝利したかのメッセージを表示し終了すること
  19. すべての升に石が置かれた状態で引き分けの場合は,引き分けのメッセージを表示し終了すること
  20.  
  21. =end
  22.  
  23.  
  24. CharMap = [ '.', 'o', 'x' ]
  25. $bord = Array.new(15){ Array.new(15){ 0 } }
  26. Ruler = " " + (0...15).to_a.map{|x| '%X' % [x+1]}.join(' ')
  27. $player = 1
  28. $tesuu = 0
  29.  
  30. def printBoard
  31. puts Ruler
  32. rul = 'F'
  33. 15.times{|y| print " #{rul.succ!} ", (0...15).to_a.map{|x| CharMap[$bord[y][x] ] }.join(' '), " #{rul}\n" }
  34. puts Ruler
  35. end
  36.  
  37. def input_point
  38. print " #{CharMap[$player]} : "
  39. zahyou = gets&.strip&.upcase
  40. exit if zahyou == nil
  41. x = /[1-9A-F]/.match( zahyou ).to_a[0]
  42. y = /[G-U]/.match( zahyou ).to_a[0]
  43. return nil unless x && y
  44. x = x.to_i(16) - 1
  45. y = y.ord - 'G'.ord
  46. return nil if $bord[y][x] != 0
  47. [x,y]
  48. end
  49.  
  50. def input_point_debug
  51. kuu = []
  52. 15.times{|y|
  53. 15.times{|x| kuu << [x,y] if $bord[y][x] == 0 }
  54. }
  55. x, y = kuu[ rand( kuu.size ) ]
  56. puts " #{CharMap[$player]} : #{'%X' % [x+1]} #{(y+'G'.ord).chr}\n\n"
  57. sleep 0.1
  58. [x,y]
  59. end
  60.  
  61. def hantei( x, y )
  62. $bord[y][x] = $player
  63. $tesuu += 1
  64. [ [1,0], [0,1], [1,1], [1,-1] ].each{|dx1,dy1|
  65. ren = 1
  66. [ [dx1,dy1], [-dx1,-dy1] ].each{|dx2,dy2|
  67. xx = x + dx2
  68. yy = y + dy2
  69. while xx >= 0 && xx < 15 && yy >= 0 && yy < 15 && $bord[yy][xx] == $player
  70. ren += 1
  71. xx += dx2
  72. yy += dy2
  73. end
  74. }
  75. return true if ren >= 5
  76. }
  77. false
  78. end
  79.  
  80. #####################################################################
  81.  
  82. loop do
  83. printBoard()
  84. x = y = nil
  85. loop do
  86. x, y = input_point()
  87. # x, y = input_point_debug()
  88. break if x
  89. printBoard()
  90. puts "retry"
  91. end
  92. if hantei( x, y )
  93. printBoard()
  94. puts "Winner '#{CharMap[$player]}'."
  95. break
  96. end
  97. if $tesuu == 15*15
  98. puts "\nDraw gaem."
  99. break
  100. end
  101. $player = 3 - $player
  102. puts
  103. end
  104.  
Success #stdin #stdout 0.01s 5968KB
stdin
7-N
9n
6-M
stdout
    1 2 3 4 5 6 7 8 9 A B C D E F
  G . . . . . . . . . . . . . . . G
  H . . . . . . . . . . . . . . . H
  I . . . . . . . . . . . . . . . I
  J . . . . . . . . . . . . . . . J
  K . . . . . . . . . . . . . . . K
  L . . . . . . . . . . . . . . . L
  M . . . . . . . . . . . . . . . M
  N . . . . . . . . . . . . . . . N
  O . . . . . . . . . . . . . . . O
  P . . . . . . . . . . . . . . . P
  Q . . . . . . . . . . . . . . . Q
  R . . . . . . . . . . . . . . . R
  S . . . . . . . . . . . . . . . S
  T . . . . . . . . . . . . . . . T
  U . . . . . . . . . . . . . . . U
    1 2 3 4 5 6 7 8 9 A B C D E F
 o : 
    1 2 3 4 5 6 7 8 9 A B C D E F
  G . . . . . . . . . . . . . . . G
  H . . . . . . . . . . . . . . . H
  I . . . . . . . . . . . . . . . I
  J . . . . . . . . . . . . . . . J
  K . . . . . . . . . . . . . . . K
  L . . . . . . . . . . . . . . . L
  M . . . . . . . . . . . . . . . M
  N . . . . . . o . . . . . . . . N
  O . . . . . . . . . . . . . . . O
  P . . . . . . . . . . . . . . . P
  Q . . . . . . . . . . . . . . . Q
  R . . . . . . . . . . . . . . . R
  S . . . . . . . . . . . . . . . S
  T . . . . . . . . . . . . . . . T
  U . . . . . . . . . . . . . . . U
    1 2 3 4 5 6 7 8 9 A B C D E F
 x : 
    1 2 3 4 5 6 7 8 9 A B C D E F
  G . . . . . . . . . . . . . . . G
  H . . . . . . . . . . . . . . . H
  I . . . . . . . . . . . . . . . I
  J . . . . . . . . . . . . . . . J
  K . . . . . . . . . . . . . . . K
  L . . . . . . . . . . . . . . . L
  M . . . . . . . . . . . . . . . M
  N . . . . . . o . x . . . . . . N
  O . . . . . . . . . . . . . . . O
  P . . . . . . . . . . . . . . . P
  Q . . . . . . . . . . . . . . . Q
  R . . . . . . . . . . . . . . . R
  S . . . . . . . . . . . . . . . S
  T . . . . . . . . . . . . . . . T
  U . . . . . . . . . . . . . . . U
    1 2 3 4 5 6 7 8 9 A B C D E F
 o : 
    1 2 3 4 5 6 7 8 9 A B C D E F
  G . . . . . . . . . . . . . . . G
  H . . . . . . . . . . . . . . . H
  I . . . . . . . . . . . . . . . I
  J . . . . . . . . . . . . . . . J
  K . . . . . . . . . . . . . . . K
  L . . . . . . . . . . . . . . . L
  M . . . . . o . . . . . . . . . M
  N . . . . . . o . x . . . . . . N
  O . . . . . . . . . . . . . . . O
  P . . . . . . . . . . . . . . . P
  Q . . . . . . . . . . . . . . . Q
  R . . . . . . . . . . . . . . . R
  S . . . . . . . . . . . . . . . S
  T . . . . . . . . . . . . . . . T
  U . . . . . . . . . . . . . . . U
    1 2 3 4 5 6 7 8 9 A B C D E F
 x :