Newer
Older
Ruby / puzzle1.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

hl = 1      #上段左タイル   1番タイル
hc = 2      #上段中タイル   2番タイル
hr = 3      #上段右タイル   3番タイル
cl = 4      #中段左タイル   4番タイル
cc = 5      #中段中タイル   5番タイル
cr = 6      #中段右タイル   6番タイル
ll = 7      #下段左タイル   7番タイル
lc = 8      #下段中タイル   8番タイル
lr = 0      #下段右タイル   9番タイル

puts "3✕3のスライドパズル。\n動かしたいタイル番号を入力して動かしてね。\nタイル番号は下の通り。\n-------------\n| 1 | 2 | 3 |\n-------------\n| 4 | 5 | 6 |\n-------------\n| 7 | 8 | 9 |\n-------------\nタイルの数字が左上から右に向かって右下まで順に1〜9になればクリアだよ。"

while start == 1
  srand()               #配置指定
  puzzle = rand(3)
  if puzzle == 1
    hl = 1
    hc = 2
    hr = 3
    cl = 4
    cc = 5
    cr = 6
    ll = 7
    lc = 0
    lr = 8
  else
    hl = 8
    hc = 6
    hr = 7
    cl = 2
    cc = 5
    cr = 4
    ll = 3
    lc = 0
    lr = 1
  end
  while true
    if hl == 0
    air = 1
    end
    if hc == 0
      air = 2
    end
    if hr == 0
      air = 3
    end
    if cl == 0
      air = 4
    end
    if cc == 0
      air = 5
    end
    if cr == 0
      air = 6
    end
    if ll == 0
      air = 7
    end
    if lc == 0
      air = 8
    end
    if lr == 0
      air = 9
    end
    while true
      def hako(a,b,c,d,e,f,g,h,i)
        printf("-------------\n| %s | %s | %s |\n-------------\n| %s | %s | %s |\n-------------\n| %s | %s | %s |\n-------------\n",a,b,c,d,e,f,g,h,i)
      end
      if hl == 1
        if hc == 2
          if hr == 3
            if cl == 4
              if cc == 5
                if cr == 6
                  if ll == 7
                    if lc == 8
                      if lr == 0
                        start = 0
                        printf("-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n| %d | %d |   |\n-------------\nクリア!!!おめでとう!!!",a,b,c,d,e,f,g,h)
                        sleep(3)
                        puts "...もっかいやる?"
                        sleep(3)
                        puts "いや、やらんよなあ。\nおつかれさま。"
                        break
                      end
                    end
                  end
                end
              end
            end
          end
        end
      end
      if air == 1   #空白が1のとき
        hako(" ",hc,hr,cl,cc,cr,ll,lc,lr)
        while air == 1
          idou = gets.to_i
          if idou == 2
            hl += hc
            hc -= hc
            air = 2
            break
          elsif idou == 4
            hl += cl
            cl -= cl
            air = 4
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 2   #空白が2のとき
        hako(hl," ",hr,cl,cc,cr,ll,lc,lr)
        while air == 2
          idou = gets.to_i
          if idou == 1
            hc += hl
            hl -= hl
            air = 1
            break
          elsif idou == 3
            hc += hr
            hr -= hr
            air = 3
            break
          elsif idou == 5
            hc += cc
            cc -= cc
            air = 5
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 3   #空白が3のとき
        hako(hl,hc," ",cl,cc,cr,ll,lc,lr)
        while air == 3
          idou = gets.to_i
          if idou == 2
            hr += hc
            hc -= hc
            air = 2
            break
          elsif idou == 6
            hr += cr
            cr -= cr
            air = 6
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 4   #空白が4のとき
        hako(hl,hc,hr," ",cc,cr,ll,lc,lr)
        while air == 4
          idou = gets.to_i
          if idou == 1
            cl += hl
            hl -= hl
            air = 1
            break
          elsif idou == 5
            cl += cc
            cc -= cc
            air = 5
            break
          elsif idou == 7
            cl += ll
            ll -= ll
            air = 7
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 5   #空白が5のとき
        hako(hl,hc,hr,cl," ",cr,ll,lc,lr)
        while air == 5
          idou = gets.to_i
          if idou == 2
            cc += hc
            hc -= hc
            air = 2
            break
          elsif idou == 4
            cc += cl
            cl -= cl
            air = 4
            break
          elsif idou == 6
            cc += cr
            cr -= cr
            air = 6
            break
          elsif idou == 8
            cc += lc
            lc -= lc
            air = 8
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 6   #空白が6のとき
        hako(hl,hc,hr,cl,cc," ",ll,lc,lr)
        while air == 6
          idou = gets.to_i
          if idou == 3
            cr += hr
            hr -= hr
            air = 3
            break
          elsif idou == 5
            cr += cc
            cc -= cc
            air = 5
            break
          elsif idou == 9
            cr += lr
            lr -= lr
            air = 9
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 7   #空白が7のとき
        hako(hl,hc,hr,cl,cc,cr," ",lc,lr)
        while air == 7
          idou = gets.to_i
          if idou == 4
            ll += cl
            cl -= cl
            air = 4
            break
          elsif idou == 8
            ll += lc
            lc -= lc
            air = 8
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 8   #空白が8のとき
        hako(hl,hc,hr,cl,cc,cr,ll," ",lr)
        while air == 8
          idou = gets.to_i
          if idou == 5
            lc += cc
            cc -= cc
            air = 5
            break
          elsif idou == 7
            lc += ll
            ll -= ll
            air = 7
            break
          elsif idou == 9
            lc += lr
            lr -= lr
            air = 9
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      elsif air == 9   #空白が9のとき
        hako(hl,hc,hr,cl,cc,cr,ll,lc," ")
        while air == 9
          idou = gets.to_i
          if idou == 6
            lr += cr
            cr -= cr
            air = 6
            break
          elsif idou == 8
            lr += lc
            lc -= lc
            air = 8
            break
          else
            puts "それは動かせないよ。"
            redo
          end
        end
      end
    end
  end
end