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

system("display -geometry +0+0 8puzzle1big.png&")
system("display -geometry +150+0 8puzzle2big.png&")
system("display -geometry +300+0 8puzzle3big.png&")
system("display -geometry +0+150 8puzzle4big.png&")
system("display -geometry +150+150 8puzzle5big.png&")
system("display -geometry +300+150 8puzzle6big.png&")
system("display -geometry +0+300 8puzzle7big.png&")
system("display -geometry +150+300 8puzzle8big.png&")
sleep(3)
system('pkill magick -U `whoami`')

puts "3✕3のスライドパズル。\n動かしたいタイル番号を入力して動かしてね。\nタイル番号は下の通り。\n-------------\n| 1 | 2 | 3 |\n-------------\n| 4 | 5 | 6 |\n-------------\n| 7 | 8 | 9 |\n-------------\nタイルの数字が左上から右に向かって右下まで順に1〜9になればクリア。"
srand()               #配置指定
puzzle = rand(2)
if puzzle == 0
  system("display -geometry +0+0 8puzzle1big.png&")
  system("display -geometry +150+0 8puzzle2big.png&")
  system("display -geometry +300+0 8puzzle3big.png&")
  system("display -geometry +0+150 8puzzle4big.png&")
  system("display -geometry +150+150 8puzzle5big.png&")
  system("display -geometry +300+150 8puzzle6big.png&")
  system("display -geometry +0+300 8puzzle7big.png&")
  system("display -geometry +300+300 8puzzle8big.png&")
else
  system("display -geometry +0+0 8puzzle1big.png&")
  system("display -geometry +150+0 8puzzle2big.png&")
  system("display -geometry +300+0 8puzzle3big.png&")
  system("display -geometry +0+150 8puzzle4big.png&")
  system("display -geometry +150+150 8puzzle5big.png&")
  system("display -geometry +300+150 8puzzle6big.png&")
  system("display -geometry +0+300 8puzzle7big.png&")
  system("display -geometry +300+300 8puzzle8big.png&")
end
while true
  if air == 1   #空白が1のとき
    printf("-------------\n|   | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d |   | %d |\n-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d |   |\n-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n|   | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n| %d |   | %d |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n| %d | %d |   |\n-------------\n| %d | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n|   | %d | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n| %d |   | %d |\n-------------\n",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のとき
    printf("-------------\n| %d | %d | %d |\n-------------\n| %d | %d | %d |\n-------------\n| %d | %d |   |\n-------------\n",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
  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
                    
                    def stop(x)
                      sleep(x)
                    end
                    
                    puts"-------------\n| 1 | 2 | 3 |\n-------------\n| 4 | 5 | 6 |\n-------------\n| 7 | 8 |   |\n-------------\nクリア!!!おめでとう!!!"
                    stop(5)
                    puts "...もっかいやる?"
                    stop(1)
                    puts "いや、やらんわな。おつかれさま。\nCtrlとCを一緒に押してゲームを終了してね。"
                    stop(3000)
                    break
                  end
                end
              end
            end
          end
        end
      end
    end
  end
end