『Rubyではじめるゲームプログラミング』正誤表（仮）

![51sWOzSOqbL._SL500_AA300_.jpg](https://qiita-image-store.s3.amazonaws.com/0/26536/5d4286d7-9216-2f90-ec33-b3fce8a600f4.jpeg)

[『Rubyではじめるゲームプログラミング』山本団著（工学社、2007年）](http://www.kohgakusha.co.jp/books/detail/978-4-7775-1292-8)

の[サポートページ](http://www.kohgakusha.co.jp/support/gp_ruby/index.html)には正誤表がないので作ってみました。
　
***
#注意事項
##動作環境
* MyGame 0.9.1
* Ruby 2.0.0-p.247、または 1.9.3-p.429
* Mac OS X Mountain Lion（10.8.4）、または Lion（10.7.5）

（書籍付属 CD-ROM の MyGame、Ruby とはバージョンが違います。
また、書籍の想定している環境（Windows XP）でもありません。）

##MyGameのインストール手順

* [MacにRuby/SDL、rsdl、SGEを入れて、ゲームライブラリMyGameを動かす - Qiita [キータ]](http://qiita.com/noanoa07/items/88fefe232dc605720e09)

を参照のこと。
##参考

* Macでは、（Ruby/SDLを使用する）MyGame のプログラムの実行は `$ ruby foo.rb` の代わりに、`$ rsdl foo.rb` です。

* 本書籍のプログラムは Ruby 1.8系で書かれているので、日本語を使う場合には 1.9系、2.0系では文字コードの指定方法を変更する必要があります。
具体的には、プログラム先頭行の `#!  ruby -Ks` という指定を、`# coding: utf-8` に書き換えます。
（ここでは Macで動かすため、元の Shift_JIS の指定を UTF-8 に変えています。さらに、Ruby 2.0 ではデフォルトが UTF-8 なので、この行自体を削除してもよいです。）


* Ruby 1.9.2から `require` がカレントディレクトリをロードしなくなったため、`require` でエラーが出ることがあります。
そのときは、`require 'baz'` を `require_relative 'baz'` と書き換えれば動くことが多いです。

（2014.5.28 追記；
　あるいは、Ruby の起動時に[コマンドラインオプション](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2frubycmd.html) `-I directory名` を使ってファイルをロードするパスを追加します。カレントディレクトリを追加するには .（ドット）を追加すればよいので；
`$ rsdl -I. foo.rb` 
で実行します。
→ ・[Star Rubyのインストール - ザリガニが見ていた...。](http://d.hatena.ne.jp/zariganitosh/20140417/install_star_ruby) ）

* 第5章で作成するゲームプログラム（ビジュアルノベル、アクションゲーム）の作成について、本文中ではすべて解説されていない部分があります。そのため、付属CD-ROM に収められているプログラムを見ないと動作しないことがあるので、注意が必要です。
　

***
#注釈、正誤表（仮）

```p.23
・scriptsample.rb
（先頭行に日本語文字コード指定を追加）
# coding: utf-8
```

```p.35
■日本語の文字の表示
（上記「参考」を参照のこと）
```

```p.119
・下から7行目
（誤）img.scase = 2.0
（正）img.scale = 2.0

・下から6行目
（誤）img.scase = 0.5
（正）img.scale = 0.5

・下から5行目
（誤）scase=
（正）scale =
```

```p.120
・上から10行目
（誤）img.scase = 2.0
（正）img.scale = 2.0

・下から5行目
（誤）img = Image.new("sample.bmp", 200, 200)
（正）img = Image.new("sample.bmp", :x => 200, :y => 200)
```

```p.121
・下から6行目
（誤）img = Image.new("sample.bmp", 200, 200)
（正）img = Image.new("sample.bmp", :x => 200, :y => 200)
```

```p.122
・movechara00.rb の実行
（punya00.png を同じディレクトリに置いておく必要がある）
```

```p.125
・上から3行目
（誤）screen.x
（正）screen.w

・上から4行目
（誤）screen.y
（正）screen.h
```

```p.132
・animation05.rb の実行
（punya01.png を同じディレクトリに置いておく必要がある）
```

```p.134
・上から7行目
Font.new(文字列, 省略できるオプション)
（文字列は、空文字列 "" を指定するとエラーになる）

・下から2行目
（誤）fnt.rendr
（正）fnt.render
```

```p.135
・上から6行目
（誤）fnt.str = "ABC"
（正）fnt.string = "ABC"

・上から7行目
（誤）「str=」を使うと、
（正）「string=」を使うと、
```

```p.142
・下から4行目
（誤）fnt = Font.new
（正）fnt = Font.new("UP")　
（文字列を指定しないとエラーになる。空文字列（""）の指定でもエラーになる）

・下から3行目
（誤）fnt_pos = Font.new("POS", 0, 20)
（正）fnt_pos = Font.new("POS", :x => 0, :y => 20)

・下から2行目
（誤）add_event(:mouse_button_up){ fnt.str = "UP" }
（正）add_event(:mouse_button_up){ fnt.string = "UP" }

・下から1行目
（誤）add_event(:mouse_button_down){ fnt.str = "DOWN" }
（正）add_event(:mouse_button_down){ fnt.string = "DOWN" }
```

```p.143
・上から1行目
（誤）add_event(:mouse_motion){|e| fnt_pos.str = "POS x:#{e.x}
（正）add_event(:mouse_motion){|e| fnt_pos.string = "POS x:#{e.x}

・上から7行目
（誤）「str=」
（正）「string=」
```

```p.145
・下から2行目
（誤）MyGame.Image.render "sample.bmp"
（正）MyGame::Image.render "sample.bmp"
```

```p.195
・上から8行目
（誤）puts "MP   #{mp}"   #hp メソッドの呼び出し
（正）puts "MP   #{mp}"   #mp メソッドの呼び出し
```

```p.197
・上から2行目
（誤）str・・・trength（力）。
（正）str・・・strength（力）。
```

```p.247
・visualnovel00.rb 1行目
（誤）#!ruby -Ks
（正）# coding: utf-8 （Ruby 1.9、2.0 の場合）
（Ruby 2.0 ではデフォルトが UTF-8 なので、この行は省略可能）
```

```p.251
・上から7行目
（誤）def command_text(text = "")
（正）def command_text(text = " ")
（空文字列の指定ではエラーになるのでスペースを指定した。
ただし、visualnovel01.rbプログラムでは実行時に文字列が引数で指定されるので、実際にはエラーにならない。）
```

```p.261
・上から12行目
（誤）when :wait
（正）when :jump

・上から13行目
（誤）command_wait
（正）command_jump
```

```p.265
・上から4行目
（誤）@cursor = ShadowFont.new("images/carsor.png")
（正）@cursor = TransparentImage.new("images/carsor.png")
```

```p.268
・上から8行目
（インデントずれ）add_event(:mouse_motion)
・上から10行目
（インデントずれ）add_event(:mouse_button_down)
```

```p.274
・上から3行目
（誤）require 'scenario.rb'
（正）require_relative 'scenario.rb'
```

```p.279
・下から6行目
（誤）@acorn.render
（正）@crow.render
```

```p.287
・上から10行目
（1行追加する）:stand_right => [10, [0, 1, 2 ,1]]
```

```p.312
・上から8行目
（誤）if c == "#"
（正）if c != ""
（間違いではないが、本文の説明と整合性を保つため。
ただし、付属CD-ROM の actiogame11.rb では if c == "#" となっている。）
```

　
***
#付属CD-ROM

* CD-ROM収載のサンプルプログラムは、Windows用の文字コード Shift_JIS なので、Macのエディタ（テキストエディットなど）で開いて、 UTF-8 に保存し直す必要があります。

* 日本語をコメント以外で使っているプログラムは、文字コードを指定し直す必要があります。（上記「参考」を参照のこと。）

* 「プニャリン競争」と「アクションゲーム」のサンプルプログラムは、作者の [MyGame のホームページ](http://dgames.jp/ja/projects/mygame/)からもダウンロードできます。

　

```visualnovel00.rb　
（visualnovel01.rb 以降も同じ）
・1行目
（誤）#!ruby -Ks
（正）# coding: utf-8 （Ruby 1.9、2.0 の場合）
（Ruby 2.0 ではデフォルトが UTF-8 なので、この行は省略可能）
```
```visualnovel01.rb　
（visualnovel02.rb 以降も同じ）
・43行目
（誤）def command_text(text = "")
（正）def command_text(text = " ")
（空文字列の指定ではエラーになるのでスペースを指定した。
ただし、visualnovel01.rbプログラムでは実行時に文字列が引数で指定されるので、実際にはエラーにならない。）
```
```visualnovel.rb　
（visualnovel_ex.rb も同じ）
・3行目
（誤）require 'scenario.rb' 
（正）require_relative 'scenario.rb' 
```
```senario.rb　
・出てくるすべての行を修正
（誤）add_command :text, ''
（正）add_command :text, ' '
（空文字列の指定ではエラーになるのでスペースを指定する。）
```
```actiongame_ex.rb　
・3行目
（誤）require 'blockmap'
（正）require_relative 'blockmap' 
```