#!/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番タイル start = 0 #スタート用 require 'curses' include Curses init_screen cbreak noecho begin puts "3✕3のスライドパズル。\n動かしたいタイル番号を入力して動かしてね。\nタイル番号は下の通り。\n-------------\n| 1 | 2 | 3 |\n-------------\n| 4 | 5 | 6 |\n-------------\n| 7 | 8 | 9 |\n-------------\nタイルの数字が左上から右に向かって右下まで順に1〜9になればクリア。" start = 1 #ゲームスタート 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 start = 0 else hl = 8 hc = 6 hr = 7 cl = 2 cc = 5 cr = 4 ll = 3 lc = 0 lr = 1 start = 0 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 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 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 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 = getch.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 = getch.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 = getch.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 = getch.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 = getch.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 = getch.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 = getch.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 = getch.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 = getch.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 end