永井@知能.九工大です.

From: Noritsugu Nakamura <nnakamur / mxq.mesh.ne.jp>
Subject: [ruby-list:38173] Re: [ANN] Sokoban for Ruby-GNOME2
Date: Wed, 20 Aug 2003 20:51:23 +0900
Message-ID: <20030820205254O.nnakamur / mxq.mesh.ne.jp>
> In article <20030617232410.4c9a8308.mutoh / highway.ne.jp> 
> Masao Mutoh <mutoh / highway.ne.jp> wrote:
> > Ruby-GNOME2のサンプル用に、懐かしの倉庫番ゲームを作ってみました。
> > 
> > 自分で言うのも何なのですが、サンプルの割にはそこそこ遊べるものに
> > なってしまったのでアナウンスさせていただきます。
> > 良かったら遊んでみてください。
> > 
> > http://ruby-gnome2.sourceforge.jp/hiki.cgi?Sokoban
> 
> Ruby/Tk に移植してみました。
> 残念ながら last stage の保存ができません。(^_^;
> http://www2s.biglobe.ne.jp/~Nori/ruby/dist/sokoban_tk-20030817.rb

> stage data は Sokoban for Ruby-GNOME2 のから取ってきて下さい。

いいですねぇ.実に懐かしいです.(^_^)
Ruby/Tk 版はメッセージの表示がちょっと崩れているので,
現実逃避にちょいとパッチを作ってみました.
よかったらお試し下さい.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp

--- ../sokoban_tk-20030817.rb	2003-08-20 22:45:22.000000000 +0900
+++ sokoban_tk.rb	2003-08-21 00:46:16.000000000 +0900
@@ -177,12 +177,12 @@
     ['k',  0, -1], ['Up',    0, -1],
     ['j',  0,  1], ['Down',  0,  1],
   ]
-  MESSAGE = %Q[
- LEFT  - h or Left  RESTART        - r
- RIGHT - l or Right NEXT STAGE     - n
- TOP   - k or Top   PREVIOUS STAGE - p
- DOWN  - j or Down  QUIT           - q
- UNDO  - u
+  MESSAGE = [
+ %w(LEFT  - h or Left  RESTART        - r), 
+ %w(RIGHT - l or Right NEXT_STAGE     - n), 
+ %w(TOP   - k or Top   PREVIOUS_STAGE - p), 
+ %w(DOWN  - j or Down  QUIT           - q),
+ %w(UNDO  - u)
 ]
   def create_stage(stage)
     @stage = stage
@@ -191,6 +191,8 @@
     end    
     canvas = TkCanvas.new(@base_box) {
       bg "white"
+      borderwidth 3
+      relief 'sunken'
       pack
     }
     @map = Array.new
@@ -246,19 +248,43 @@
     vbox = TkFrame.new {
       pack
     }
-    TkLabel.new(vbox) {
+    TkLabel.new(vbox, 'borderwidth'=>0, 'pady'=>1, 'anchor'=>'s') {
       text "Sokoban"
       fg "#ff0000"
-      pack
+      font ( TkFont.new({'family'=>'lucida', 'size'=>26}) )
+      pack('pady'=>1, 'ipady'=>5)
     }
-    TkLabel.new(vbox) {
+    fnt = nil
+    TkLabel.new(vbox, 'borderwidth'=>0, 'pady'=>0) {
       text "A sample script for Ruby/Tk"
       fg "#ff5500"
+      fnt = font
       pack
     }
-    TkMessage.new(vbox) {
-      text MESSAGE
-      pack
+    TkFrame.new(vbox){|f|
+      msgfont = TkFont.new({'family'=>fnt, 'size'=>12})
+      MESSAGE.each_with_index{|msg,idx|
+	TkGrid.configure(
+	  TkLabel.new(f, 'text'=>msg[0], 'font'=>msgfont, 'fg'=>'darkblue', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[1], 'font'=>msgfont, 'fg'=>'darkblue', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[2], 'font'=>msgfont, 'fg'=>'#0033ff', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[3], 'font'=>msgfont, 'fg'=>'darkblue', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[4], 'font'=>msgfont, 'fg'=>'#0033ff', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkFrame.new(f, 'width'=>9), 
+	  TkLabel.new(f, 'text'=>msg[5], 'font'=>msgfont, 'fg'=>'darkblue', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[6], 'font'=>msgfont, 'fg'=>'darkblue', 
+		         'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  TkLabel.new(f, 'text'=>msg[7], 'font'=>msgfont, 'fg'=>'#0033ff', 
+		          'borderwidth'=>0, 'pady'=>0, 'padx'=>3), 
+	  'sticky'=>'wns')
+      }
+      pack('pady'=>7)
     }
     @label_stage = TkLabel.new {
       pack