• R/O
  • SSH
  • HTTPS

dxruby: Commit


Commit MetaInfo

Revisión49 (tree)
Tiempo2009-05-28 18:32:13
Autormirichi

Log Message

サンプル追加

Cambiar Resumen

Diferencia incremental

--- branches/1.0.3/sample/8_puzzle.rb (nonexistent)
+++ branches/1.0.3/sample/8_puzzle.rb (revision 49)
@@ -0,0 +1,51 @@
1+#!ruby -Ks
2+# DXRuby サンプル 8パズル
3+# 左クリックでピースを移動、右クリックでシャッフル
4+# 使用可能な画像はjpg、png、bmpなど通常のフォーマットです。
5+# あまり小さい画像は対応できません。同梱のdata.pngとか。
6+require 'dxruby'
7+
8+filename = Window.openFilename([["スベテノファイル(*.*)", "*.*"]], "パズル用の画像を選択")
9+image = Image.loadToArray(filename, 3, 3)
10+
11+# 窓設定
12+Window.width = image[0].width * 3
13+Window.height = image[0].height * 3
14+Window.caption = "8パズル"
15+
16+# パズルの情報
17+piece = [0,1,2,3,4,5,6,7,8]
18+
19+# クリック時の処理。空いてる位置のとなりだったら入れ替える。
20+def click(x, y, piece)
21+ i = piece.index(8) # 空いてるピース検索
22+ if (((i % 3) - x).abs == 1 and (i / 3) == y) or (((i / 3) - y).abs == 1 and (i % 3) == x) then
23+ piece[x + y * 3], piece[i] = piece[i], piece[x + y * 3] # 入れ替え a,b = b,aでswapできる
24+ end
25+end
26+
27+# メインループ
28+Window.loop do
29+
30+ # 右クリックでシャッフル(ランダムで1000回ほどクリックしてもらってます^^;)
31+ if Input.mousePush?(M_RBUTTON) then
32+ 1000.times do
33+ click(rand(3), rand(3), piece)
34+ end
35+ end
36+
37+ # 左クリック処理
38+ if Input.mousePush?(M_LBUTTON) then
39+ click(Input.mousePosX / image[0].width, Input.mousePosY / image[0].height, piece)
40+ end
41+
42+ # 完了判定と描画
43+ for i in 0..8
44+ if piece[i] != 8 or piece == [0,1,2,3,4,5,6,7,8] then
45+ Window.draw(i % 3 * image[0].width , i / 3 * image[0].height, image[piece[i]])
46+ end
47+ end
48+
49+ # エスケープキーで終了
50+ break if Input.keyPush?(K_ESCAPE)
51+end
--- branches/1.0.3/sample/sample.rb (nonexistent)
+++ branches/1.0.3/sample/sample.rb (revision 49)
@@ -0,0 +1,129 @@
1+#!ruby -Ks
2+# DXRuby Ver サンプルプログラム
3+
4+# ライブラリの取り込み
5+require 'dxruby'
6+
7+# 窓位置。省略するとOSデフォルト
8+#Window.x = 0
9+#Window.y = 0
10+
11+# スクリーンイメージサイズ。省略するとこのサイズ
12+#Window.width = 640
13+#Window.height = 480
14+
15+# ウィンドウのキャプション。省略すると「DXRuby Application」
16+Window.caption = "サンプル"
17+
18+# スクリーンイメージサイズに対するウィンドウの倍率。2にすると縦横2倍で表示される。
19+# 勝手にアンチエイリアシングされる。
20+# 省略すると1。
21+#Window.scale = 1
22+
23+# ウィンドウモードにするかどうか。trueでウィンドウ。falseでフルスクリーン。
24+# 省略するとtrue。
25+#Window.windowed = true
26+
27+# 秒間更新頻度を設定する。
28+# 省略すると60。
29+#Window.fps = 60
30+
31+# 重くてfpsが守れない場合に描画をスキップする指定。
32+# 省略するとfalse
33+#Window.frameskip = false
34+
35+# 画像ファイルを読み込んでイメージオブジェクトを作成する。
36+# 第2引数は横サイズ、第3引数は縦サイズで、画像の右と下をカットすることができる。
37+# あまり意味は無い。
38+# jpgとかbmpとかpngとかが使えるが、今の所カラーキーをサポートしないので
39+# 透過色がある場合はpngにする。
40+image = Image.load("data.png")
41+
42+# キャラの状態を設定する
43+x = 100
44+y = 100
45+rot = 0
46+scale = 1
47+alpha = 255
48+
49+# ウィンドウが閉じられたら自動的に終了するループ
50+Window.loop do
51+
52+ # キャラを動かしたりする
53+ # xとyメソッドはパッド入力をx座標とy座標の増分(-1、0、1)で返す。
54+ # 引数はパッド番号。0はキーボードと兼用。省略は0。
55+ x = x + Input.x
56+ y = y + Input.y
57+
58+ # Zを押したらクルクル回る
59+ # 第2引数は入力するボタン。
60+ # キーボードの場合BUTTON0がZ、1がX、2がCに割り当たっている。
61+ if Input.padDown?(P_BUTTON0) == true then
62+ rot = rot + 5
63+ if rot > 359 then
64+ rot = rot - 360
65+ end
66+ end
67+
68+ # Xを押したらサイズ変更
69+ if Input.padDown?(P_BUTTON1) == true then
70+ scale = scale + 0.05
71+ if scale > 2 then
72+ scale= 0.2
73+ end
74+ end
75+
76+ # Cを押したら半透明
77+ if Input.padDown?(P_BUTTON2) == true then
78+ alpha = alpha - 2
79+ if alpha < 0 then
80+ alpha= 255
81+ end
82+ end
83+
84+ # Enterキーを押したら全部やる
85+ if Input.keyDown?(K_RETURN) == true then
86+ rot = rot + 5
87+ if rot > 359 then
88+ rot = rot - 360
89+ end
90+
91+ scale = scale + 0.05
92+ if scale > 2 then
93+ scale= 0.2
94+ end
95+
96+ alpha = alpha - 2
97+ if alpha < 0 then
98+ alpha= 255
99+ end
100+ end
101+
102+ # 普通に描画する
103+ Window.draw(x + 50, y + 100, image)
104+
105+ # なんかしてキャラを描画する
106+ Window.drawRot(x, y, image, rot) # 回転(0が基準で右回り。360で一周)
107+ Window.drawScale(x + 50, y, image, scale, scale) # 拡大縮小(1が基準で倍率を表す)
108+ Window.drawAlpha(x + 100, y, image, alpha) # 半透明(0が透明で255が通常描画)
109+
110+ # 全部同時に適用する関数はこちら
111+ Window.drawEx(x + 50, y + 50, image, :angle => rot, :scalex => scale, :scaley => scale, :alpha => alpha)
112+
113+ # エスケープキーで終了
114+ if Input.keyDown?(K_ESCAPE) == true then
115+ break
116+ end
117+
118+ # スクリーンショット機能
119+ if Input.keyPush?(K_F12) == true then
120+ if ! File.exist?("screenshot") then
121+ Dir.mkdir("screenshot")
122+ end
123+ Window.getScreenShot("screenshot/screenshot" + Time.now.strftime("%Y%m%d_%H%M%S") + ".jpg")
124+ end
125+end
126+
127+
128+
129+
--- branches/1.0.3/sample/block_destroy.rb (nonexistent)
+++ branches/1.0.3/sample/block_destroy.rb (revision 49)
@@ -0,0 +1,161 @@
1+#!ruby -Ks
2+# DXRuby サンプル ブロック崩しモドキ
3+# 左クリックでボールが飛びます。後はマウスで打ち返して。
4+require 'dxruby'
5+
6+Window.caption = "ブロック崩しモドキ"
7+
8+# ブロックの構造体
9+Block = Struct.new(:x, :y, :image)
10+
11+# 音データ作成
12+v = 80 # ボリューム
13+s1 = SoundEffect.new(50) do # 50mSecの効果音。ブロック内は1msの変化
14+ v = v - 4 if v > 0 # ボリュームダウン
15+ [220, v] # ブロックの戻りの配列が周波数とボリューム
16+end
17+v = 80
18+s2 = SoundEffect.new(50) do
19+ v = v - 4 if v > 0
20+ [440, v]
21+end
22+v = 80
23+s3 = SoundEffect.new(50) do
24+ v = v - 4 if v > 0
25+ [880, v]
26+end
27+
28+# 画像データ作成。
29+# パッドの画像
30+padimage = Image.new(100, 20)
31+padimage.box(0, 0, 99, 19, [255, 255, 255, 255])
32+
33+# ブロックの画像。ちょっと綺麗にしようと思ったらずいぶん増えちゃった
34+blockimage = [Image.new(60, 20, [255, 255, 0, 0]),
35+ Image.new(60, 20, [255, 255, 255, 0]),
36+ Image.new(60, 20, [255, 0, 255, 0])]
37+blockimage[0].line(0, 0, 59, 0, [255, 255, 150, 150])
38+blockimage[0].line(0, 0, 0, 19, [255, 255, 150, 150])
39+blockimage[0].line(0, 19, 59, 19, [255, 120, 0, 0])
40+blockimage[0].line(59, 0, 59, 19, [255, 120, 0, 0])
41+blockimage[1].line(0, 0, 59, 0, [255, 255, 255, 150])
42+blockimage[1].line(0, 0, 0, 19, [255, 255, 255, 150])
43+blockimage[1].line(0, 19, 59, 19, [255, 150, 150, 0])
44+blockimage[1].line(59, 0, 59, 19, [255, 150, 150, 0])
45+blockimage[2].line(0, 0, 59, 0, [255, 150, 255, 120])
46+blockimage[2].line(0, 0, 0, 19, [255, 150, 255, 120])
47+blockimage[2].line(0, 19, 59, 19, [255, 0, 150, 0])
48+blockimage[2].line(59, 0, 59, 19, [255, 0, 150, 0])
49+
50+# 弾の画像
51+ballimage = Image.new(24, 24)
52+ballimage.circleFill(12, 12, 11, [255, 255, 255, 255])
53+
54+# 玉の情報
55+tx = 0
56+ty = 416
57+dtx = 0
58+dty = 0
59+
60+# 0は初期化、1は玉が飛んでない。2は飛んでる。
61+state = 0
62+
63+block = []
64+
65+# メインループ
66+Window.loop do
67+ x = Input.mousePosX - 50
68+ x = 0 if x < 0
69+ x = 540 if x > 540
70+ y = Input.mousePosY - 10
71+ y = 220 if y < 220
72+ y = 460 if y > 460
73+
74+ case state
75+ when 0
76+ # ブロック配列初期化
77+ block.clear
78+ # ブロック生成
79+ for i in 0..9
80+ for j in 0..5
81+ block.push(Block.new(i * 64 + 2, j * 24 + 50, blockimage[j / 2]))
82+ end
83+ end
84+ state = 1
85+
86+ when 1
87+ # 飛んでないときはパッドにくっついている
88+ if Input.mousePush?(M_LBUTTON) then # マウスの左クリックで飛ばす
89+ state = 2
90+ dtx = rand(2) * 16 - 8
91+ dty = -8
92+ else # くっついてるとき
93+ tx = x + 38
94+ ty = y - 24
95+ end
96+
97+ when 2
98+ # ゲームメイン処理
99+ # ブロックとの判定
100+ block.delete_if do |b|
101+ flag = false
102+ # 横にブロックがあったら横にはねかえる
103+ if tx + dtx + 24 > b.x and tx + dtx < b.x + 60 and
104+ ty + 24 > b.y and ty < b.y + 20 then
105+ dtx = -dtx
106+ s3.play
107+ # ナナメにあった場合は縦にもはねかえる
108+ if tx + 24 > b.x and tx < b.x + 60 and
109+ ty + dty + 24 > b.y and ty + dty < b.y + 20 then
110+ dty = -dty
111+ end
112+ flag = true
113+
114+ # 縦にブロックがあったら縦にはねかえる
115+ elsif tx + 24 > b.x and tx < b.x + 60 and
116+ ty + dty + 24 > b.y and ty + dty < b.y + 20 then
117+ dty = -dty
118+ s3.play
119+ flag = true
120+ end
121+ flag
122+ end
123+ # 移動
124+ tx = tx + dtx
125+ ty = ty + dty
126+ # パッドとの判定
127+ if tx + 24 > x and tx < x + 100 and ty + 24 > y and ty < y + 20 and dty > 0 then
128+ dty = -8
129+ if tx < x + 38 - dtx * 2 then
130+ dtx = -8
131+ else
132+ dtx = 8
133+ end
134+ s1.play
135+ end
136+ # 画面外の判定
137+ if tx > 607 then
138+ dtx = -8
139+ s2.play
140+ end
141+ if tx < 8 then
142+ dtx = 8
143+ s2.play
144+ end
145+ if ty <= 0 then
146+ dty = 8
147+ s2.play
148+ end
149+ state = 1 if ty > 479 # ボールが落ちた
150+ state = 0 if block.size == 0 # ブロックが全部消えた
151+ end
152+
153+ # 画像描画
154+ Window.draw(x, y, padimage)
155+ Window.draw(tx, ty, ballimage)
156+ block.each do |b|
157+ Window.draw(b.x, b.y, b.image)
158+ end
159+
160+ break if Input.keyDown?(K_ESCAPE)
161+end
--- branches/1.0.3/sample/mapedit.rb (nonexistent)
+++ branches/1.0.3/sample/mapedit.rb (revision 49)
@@ -0,0 +1,270 @@
1+#!ruby -Ks
2+# DXRuby 簡易マップエディタ
3+require 'dxruby'
4+
5+# マップデータ
6+map=[
7+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
8+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
9+ [1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
10+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
11+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1],
12+ [0, 0, 0, 0, 1, 4, 4, 4, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1],
13+ [2, 2, 2, 2, 1, 1, 4, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 3, 1, 1, 1, 1],
14+ [2, 2, 2, 1, 2, 1, 1, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 1, 3, 1, 3, 1, 1],
15+ [2, 2, 2, 1, 1, 1, 1, 1, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 1, 1],
16+ [2, 2, 2, 2, 2, 2, 1, 1, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1],
17+ [1, 2, 2, 2, 2, 2, 2, 1, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1],
18+ [1, 1, 1, 2, 2, 1, 2, 1, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3],
19+ [1, 1, 2, 1, 2, 2, 1, 4, 4, 4, 0, 0, 0, 0, 0, 0, 4, 4, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3],
20+ [1, 1, 1, 2, 2, 1, 4, 4, 4, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3],
21+ [1, 1, 1, 2, 1, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3],
22+ [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3],
23+ [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1],
24+ [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 4, 4, 1, 4, 1, 4, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
25+ [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
26+ [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 4, 4, 4, 4, 4, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
27+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 4, 4, 4, 4, 4, 4, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1],
28+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
29+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1],
30+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1],
31+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0],
32+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 0, 0],
33+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 0, 0, 0],
34+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0],
35+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0],
36+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
37+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
38+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]
39+]
40+takasa=[
41+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
42+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
43+ [3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
44+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
45+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3],
46+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 3, 3, 3, 3, 3],
47+ [4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 3, 3, 3, 3],
48+ [4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 7, 7, 8, 7, 3, 3, 3],
49+ [4, 3, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7, 8, 8, 6, 3, 3],
50+ [3, 6, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 6, 6, 8, 9, 6, 5, 3],
51+ [4, 5, 3, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 5, 6, 6, 8, 7, 6, 6, 3],
52+ [3, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 6, 5],
53+ [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6, 6, 6, 5],
54+ [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 5],
55+ [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5],
56+ [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5],
57+ [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4],
58+ [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 4],
59+ [3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 4],
60+ [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3],
61+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3],
62+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
63+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3],
64+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3],
65+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2],
66+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],
67+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2],
68+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2],
69+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
70+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
71+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
72+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3]
73+]
74+# 絵のデータを作る
75+mapimage = Array.new(5) {Image.new(32, 32)}
76+for i in 0..7 do # ひし形に地面を描く
77+ mapimage[0].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [255, 100, 100, 200]) # 水
78+ mapimage[0].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [255, 100, 100, 200])
79+ mapimage[0][15 - i * 2, i + 16] = [255, 0, 0, 0]
80+ mapimage[0][16 + i * 2, i + 16] = [255, 0, 0, 0]
81+ for j in 1..3 do
82+ mapimage[j].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [255, 50, 200, 50]) # 平地
83+ mapimage[j].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [255, 50, 200, 50])
84+ mapimage[j][15 - i * 2, i + 16] = [255, 0, 0, 0]
85+ mapimage[j][16 + i * 2, i + 16] = [255, 0, 0, 0]
86+ end
87+ mapimage[4].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [255, 200, 200, 150]) # 砂地
88+ mapimage[4].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [255, 200, 200, 150])
89+ mapimage[4][15 - i * 2, i + 16] = [255, 0, 0, 0]
90+ mapimage[4][16 + i * 2, i + 16] = [255, 0, 0, 0]
91+end
92+mapimage[2].box(13, 16, 18, 26, [255, 200, 50, 50]) # 木
93+mapimage[2].line(13, 16, 13, 26, [255, 0, 0, 0])
94+mapimage[2].line(18, 16, 18, 26, [255, 0, 0, 0])
95+mapimage[2].circleFill(16, 8, 8, [255, 0, 255, 0])
96+mapimage[2].circle(16, 8, 8, [255, 0, 0, 0])
97+for i in 1..24 do # 山
98+ mapimage[3].line(15 - i*2/4, i, 16 + i*2/4, i, [255, 200, 100, 100])
99+ mapimage[3][15 - i*2/4, i] = [255, 0, 0, 0]
100+ mapimage[3][16 + i*2/4, i] = [255, 0, 0, 0]
101+end
102+# 地面のサイド画像を作る
103+sideimage = Array.new(5) {Image.new(32, 16)}
104+for i in 0..15 do
105+ sideimage[0].line(i, i / 2, i, i / 2 + 8, [255, 60, 60, 180]) # 水
106+ sideimage[0].line(31 - i, i / 2, 31 - i, i / 2 + 8, [255, 130, 130, 200])
107+ for j in 1..3 do
108+ sideimage[j].line(i, i / 2, i, i / 2 + 8, [255, 40, 150, 40]) # 水以外
109+ sideimage[j].line(31 - i, i / 2, 31 - i, i / 2 + 8, [255, 100, 220, 100])
110+ end
111+ sideimage[4].line(i, i / 2, i, i / 2 + 8, [255, 150, 150, 120]) # 砂地
112+ sideimage[4].line(31 - i, i / 2, 31 - i, i / 2 + 8, [255, 220, 220, 170])
113+end
114+wakuimage = Image.new(36, 36).box(0, 0, 35, 35, [255, 255, 255, 255]). # 選択枠
115+ box(2, 2, 33, 33, [255, 0, 0, 0])
116+blackimage = Image.new(128, 480).box(0, 0, 127, 479, [255, 0, 0, 0]) # 右側背景
117+
118+select = 0
119+
120+# クリック位置判定関数
121+def check(x, y, map, takasa)
122+ # 手前から検索するために逆順
123+ 31.downto(0) do |i|
124+ 31.downto(0) do |j|
125+ # ひし形の中にあるかを調べる
126+ if ((j * 16 - i * 16 + 176 - x)/2).abs + (j * 8 + i * 8 - takasa[i][j]*8 + 24 - y).abs < 9 then
127+ return [i, j]
128+ end
129+ end
130+ end
131+ return nil
132+end
133+
134+# メインループ
135+Window.loop do
136+
137+ # マウスクリック
138+ if Input.mouseDown?(M_LBUTTON) or Input.mouseDown?(M_RBUTTON) then
139+ x, y = Input.mousePosX, Input.mousePosY
140+ if x >= 512 then # 右のほうなら
141+ for i in 0..mapimage.size-1
142+ if x >= 560 and x < 592 and y >= i * 64 + 64 and y < i * 64 + 96 then
143+ select = i
144+ break
145+ end
146+ end
147+ else # 左のほうなら
148+ if x > 0 and y > 0 and y < 480 then
149+ if Input.keyDown?(K_LSHIFT) then
150+ if Input.mousePush?(M_LBUTTON) then # シフト左クリックで地面を上げる
151+ temp = check(x, y, map, takasa)
152+ if temp != nil then
153+ takasa[temp[0]][temp[1]] += 1 if takasa[temp[0]][temp[1]] < 10
154+ end
155+ end
156+ if Input.mousePush?(M_RBUTTON) then # シフト右クリックで地面を下げる
157+ temp = check(x, y, map, takasa)
158+ if temp != nil then
159+ takasa[temp[0]][temp[1]] -= 1 if takasa[temp[0]][temp[1]] > 0
160+ end
161+ end
162+ else
163+ if Input.mouseDown?(M_LBUTTON) then # 左クリックはマップチップセット
164+ temp = check(x, y, map, takasa)
165+ if temp != nil then
166+ map[temp[0]][temp[1]] = select
167+ end
168+ end
169+ if Input.mouseDown?(M_RBUTTON) then # 右クリックでスポイト機能
170+ temp = check(x, y, map, takasa)
171+ if temp != nil then
172+ select = map[temp[0]][temp[1]]
173+ end
174+ end
175+ end
176+ end
177+ end
178+ end
179+
180+ # カーソルキーの左右
181+ if Input.keyPush?(K_RIGHT) then # 右回転
182+ map = map.transpose
183+ takasa = takasa.transpose
184+ map.each do |d|
185+ d.reverse!
186+ end
187+ takasa.each do |d|
188+ d.reverse!
189+ end
190+ end
191+ if Input.keyPush?(K_LEFT) then # 左回転
192+ 3.times do
193+ map = map.transpose
194+ takasa = takasa.transpose
195+ map.each do |d|
196+ d.reverse!
197+ end
198+ takasa.each do |d|
199+ d.reverse!
200+ end
201+ end
202+ end
203+
204+ # マップ全体描画
205+ for i in 0..30 do
206+ for j in 0..30 do
207+ z = 0
208+ tmp = takasa[i][j]
209+ if takasa[i][j+1] < tmp or takasa[i+1][j] < tmp then
210+ tmp2 = takasa[i][j+1] > takasa[i+1][j] ? takasa[i+1][j] : takasa[i][j+1]
211+ z = tmp2 * 8
212+ (tmp - tmp2).times do # 高さ分、サイド画像を描画するループ
213+ Window.draw(j * 16 - i * 16 + 160, j * 8 + i * 8 - z + 16, sideimage[map[i][j]])
214+ z = z + 8
215+ end
216+ else
217+ z = takasa[i][j] * 8
218+ end
219+ Window.draw(j * 16 - i * 16 + 160, j * 8 + i * 8 - z, mapimage[map[i][j]])
220+ end
221+ end
222+ for i in 0..31 do
223+ z = 0
224+ takasa[i][31].times do # 高さ分、サイド画像を描画するループ
225+ Window.draw(31 * 16 - i * 16 + 160, 31 * 8 + i * 8 - z + 16, sideimage[map[i][31]])
226+ z = z + 8
227+ end
228+ Window.draw(31 * 16 - i * 16 + 160, 31 * 8 + i * 8 - z, mapimage[map[i][31]])
229+ end
230+ for j in 0..31 do
231+ z = 0
232+ takasa[31][j].times do # 高さ分、サイド画像を描画するループ
233+ Window.draw(j * 16 - 31 * 16 + 160, j * 8 + 31 * 8 - z + 16, sideimage[map[31][j]])
234+ z = z + 8
235+ end
236+ Window.draw(j * 16 - 31 * 16 + 160, j * 8 + 31 * 8 - z, mapimage[map[31][j]])
237+ end
238+
239+ # 右側背景描画
240+ Window.draw(512, 0, blackimage)
241+
242+ # 選択枠描画
243+ Window.draw(558, select * 64 + 62, wakuimage)
244+
245+ # マップチップ描画
246+ mapimage.each_with_index do |m, i|
247+ Window.draw(560, i * 64 + 64, m)
248+ end
249+
250+ # 画面データクリア
251+ if Input.keyPush?(K_C) then
252+ map = Array.new(32) { [1] * 32 }
253+ takasa = Array.new(32) { [3] * 32 }
254+ end
255+
256+ # マップデータ出力
257+ if Input.keyPush?(K_ESCAPE) then
258+ s1 = "map=[\n"
259+ s2 = "takasa=[\n"
260+ for i in 0..30 do
261+ s1 = s1 + map[i].inspect + ",\n"
262+ s2 = s2 + takasa[i].inspect + ",\n"
263+ end
264+ s1 = s1 + map[31].inspect + "\n]\n"
265+ s2 = s2 + takasa[31].inspect + "\n]\n"
266+ print s1
267+ print s2
268+ break
269+ end
270+end
--- branches/1.0.3/sample/minsample.rb (nonexistent)
+++ branches/1.0.3/sample/minsample.rb (revision 49)
@@ -0,0 +1,14 @@
1+#!ruby -Ks
2+# DXRuby data.pngがカーソルキーで動くサンプル
3+require 'dxruby'
4+
5+x = 0 # x座標の変数
6+y = 0 # y座標の変数
7+image = Image.load("data.png") # data.pngを読み込む
8+
9+Window.loop do # メインループ
10+ x = x + Input.x # 横方向の入力でx座標を変更
11+ y = y + Input.y # 縦方向の入力でy座標を変更
12+
13+ Window.draw(x, y, image) # data.bmpを座標の位置に表示
14+end
--- branches/1.0.3/sample/soundeffect.rb (nonexistent)
+++ branches/1.0.3/sample/soundeffect.rb (revision 49)
@@ -0,0 +1,46 @@
1+#!ruby -Ks
2+# DXRuby 効果音サンプル
3+# ZXCキーで音が出ます
4+require 'dxruby'
5+
6+# かきーん
7+v = 100.0
8+c = 60
9+f = 1300
10+s1 = SoundEffect.new(500) do
11+ c = c - 1
12+ if c < 0 then
13+ v = v - 0.2
14+ f = 1760
15+ end
16+ [f, v]
17+end
18+
19+# 和音
20+s2 = SoundEffect.new(1000,WAVE_TRI) do # 低音は三角波
21+ [110, 80]
22+end
23+s2.add(WAVE_RECT) do # 矩形波
24+ [275, 40]
25+end
26+s2.add(WAVE_RECT) do # 矩形波
27+ [330, 40]
28+end
29+
30+# 周波数変調
31+f = 0
32+v = 150.0
33+s3 = SoundEffect.new(500, WAVE_SIN) do
34+f = f + 1
35+v = v - 0.2
36+ [880 + Math.sin(f) * 200, v]
37+end
38+
39+# メインループ
40+Window.loop do
41+ break if Input.keyDown?(K_ESCAPE)
42+ s1.play if Input.keyPush?(K_Z)
43+ s2.play if Input.keyPush?(K_X)
44+ s3.play if Input.keyPush?(K_C)
45+end
46+
--- branches/1.0.3/sample/dot.rb (nonexistent)
+++ branches/1.0.3/sample/dot.rb (revision 49)
@@ -0,0 +1,80 @@
1+#!ruby -Ks
2+# DXRuby サンプル 砂
3+# マウス左クリックで描いて、右クリックで消せます。
4+require 'dxruby'
5+
6+# ウィンドウ設定
7+Window.scale = 2
8+Window.width = 160
9+Window.height = 120
10+
11+# 画面の画像データ
12+$screen = Image.new(160, 120)
13+
14+BLACK = [0, 0, 0, 0]
15+WHITE = [255, 255, 255, 255]
16+
17+class Dot
18+ def initialize(x, y)
19+ @x = x
20+ @y = y
21+ end
22+
23+ # 高速化のために点が移動するときのみ描画するようにしたらちょっとごちゃごちゃ
24+ def move
25+ if $screen.compare(@x, @y + 1, BLACK) then # 真下
26+ $screen[@x, @y] = BLACK
27+ @y = @y + 1
28+ return true if @y > 119
29+ $screen[@x, @y] = WHITE
30+ elsif rand(2) == 0 then
31+ if $screen.compare(@x-1, @y + 1, BLACK) then # 真下
32+ $screen[@x, @y] = BLACK
33+ @y = @y + 1
34+ @x = @x - 1
35+ return true if @y > 119
36+ $screen[@x, @y] = WHITE
37+ end
38+ else
39+ if $screen.compare(@x+1, @y + 1, BLACK) then # 真下
40+ $screen[@x, @y] = BLACK
41+ @y = @y + 1
42+ @x = @x + 1
43+ return true if @y > 119
44+ $screen[@x, @y] = WHITE
45+ end
46+ end
47+ return false
48+ end
49+end
50+
51+dot = []
52+
53+Window.loop do
54+ # ドット生成
55+ dot.push(Dot.new(rand(10)+75, 0))
56+
57+ # マウスの座標取得
58+ mx = Input.mousePosX / 2
59+ my = Input.mousePosY / 2
60+
61+ # 左クリックで描画
62+ if Input.mouseDown?(M_LBUTTON) then
63+ $screen.box(mx - 1, my - 1, mx + 1, my + 1, [255, 0, 255, 0])
64+ end
65+
66+ # 右クリックで消去
67+ if Input.mouseDown?(M_RBUTTON) then
68+ $screen.box(mx - 1, my - 1, mx + 1, my + 1, [0, 0, 0, 0])
69+ end
70+
71+ # ドット移動
72+ dot.delete_if do |d|
73+ d.move
74+ end
75+
76+ # 画面描画
77+ Window.draw(0, 0, $screen)
78+
79+ break if Input.keyPush?(K_ESCAPE)
80+end
--- branches/1.0.3/sample/block_fall.rb (nonexistent)
+++ branches/1.0.3/sample/block_fall.rb (revision 49)
@@ -0,0 +1,196 @@
1+#!ruby -Ks
2+# DXRuby サンプル ブロック落とし
3+# SPACEで開始、左右で移動、ZorXで回転、下で落とす。
4+require 'dxruby'
5+
6+Window.caption = "ブロック落としモドキ"
7+
8+# ブロックデータ
9+blank = [0, 0, 0, 0]
10+BLOCK = [[],#ダミー
11+ [blank,
12+ [0, 1, 1, 0],# O
13+ [0, 1, 1, 0],
14+ blank],
15+ [blank,
16+ [2, 2, 2, 2],# I
17+ [0, 0, 0, 0],
18+ blank],
19+ [blank,
20+ [0, 0, 3, 3],# S
21+ [0, 3, 3, 0],
22+ blank],
23+ [blank,
24+ [0, 4, 4, 0],# Z
25+ [0, 0, 4, 4],
26+ blank],
27+ [blank,
28+ [0, 5, 5, 5],# L
29+ [0, 5, 0, 0],
30+ blank],
31+ [blank,
32+ [0, 6, 6, 6],# J
33+ [0, 0, 0, 6],
34+ blank],
35+ [blank,
36+ [0, 7, 7, 7],# T
37+ [0, 0, 7, 0],
38+ blank]
39+ ]
40+
41+# 画像データの作成
42+blockimage = [[]]
43+(1..7). each do |i| # ブロックの絵
44+ data = Image.new(16, 16)
45+ # ブロックの種類が多いので計算で色を作ってみた
46+ # こんなことするより画像ファイルから読むほうをオススメします
47+ data.box(0, 0, 15, 15, [255, (i / 4)*220, ((i % 4) / 2)*220, (i % 2)*220])
48+ data.line(0, 0, 14, 0, [255, (i / 4)*128+127, ((i % 4) / 2)*128+127, (i % 2)*128+127])
49+ data.line(0, 0, 0, 14, [255, (i / 4)*128+127, ((i % 4) / 2)*128+127, (i % 2)*128+127])
50+ data.line(15, 1, 15, 15, [255, (i / 4)*128, ((i % 4) / 2)*128, (i % 2)*128])
51+ data.line(1, 15, 15, 15, [255, (i / 4)*128, ((i % 4) / 2)*128, (i % 2)*128])
52+ blockimage.push(data)
53+end
54+
55+blockimage.push(Image.new(16, 16))
56+blockimage[8].box(0,0,15,15,[255,100,100,100])# 壁の絵
57+
58+# フィールドデータ
59+$field = Array.new(20){[8] + [0]*10 + [8]*2}.push([8]*13).push([8]*13)
60+
61+# 4*4の配列を指定回数だけ右回転
62+def rotation(kind, angle)
63+ b = BLOCK[kind]
64+ angle = angle + 4 if angle < 0 # angleが-1になることもある
65+ angle.times do
66+ a = [[], [], [], []]
67+ for y in 0..3 do
68+ for x in 0..3 do
69+ a[x].push(b[3 - y][x])
70+ end
71+ end
72+ b = a
73+ end
74+ return b
75+end
76+
77+# 当たり判定
78+def check(b, x, y)
79+ for i in 0..3 do
80+ for j in 0..3 do
81+ if b[i][j] != 0 and $field[(y+15) / 16 + i][x / 16 + j] != 0 then
82+ return true
83+ end
84+ end
85+ end
86+ return false
87+end
88+
89+x = 0
90+y = 0
91+kind = 0
92+angle = 0
93+state = 2
94+
95+# キーのオートリピート設定
96+Input.setRepeat(10,2)
97+
98+# ウィンドウサイズ設定
99+Window.width = 192
100+Window.height = 336
101+
102+# フォント作成
103+font = Font.new(16)
104+fontback = Image.new(192, 32).box(0,0,191,31,[255,100,100,100])
105+
106+# メインループ
107+Window.loop do
108+ case state
109+ when 0 # 初期化
110+ x = 64 # 横
111+ y = 0 # 縦
112+ kind = rand(7)+1 # ブロックの種類
113+ angle = 0 # 角度
114+ $field = Array.new(20){[8] + [0]*10 + [8]*2}.push([8]*13).push([8]*13)
115+ state = 1
116+
117+ when 1
118+ # 回転操作
119+ if Input.padPush?(P_BUTTON0) and check(rotation(kind, angle-1), x, y) == false then
120+ if angle == 0 then
121+ angle = 3
122+ else
123+ angle = angle - 1
124+ end
125+ end
126+ if Input.padPush?(P_BUTTON1) and check(rotation(kind, angle+1), x, y) == false then
127+ if angle == 3 then
128+ angle = 0
129+ else
130+ angle = angle + 1
131+ end
132+ end
133+
134+ b = rotation(kind, angle) # 回転したデータを作成
135+
136+ # ブロックの移動
137+ x = x - 16 if Input.padPush?(P_LEFT) and check(b, x-16, y) == false
138+ x = x + 16 if Input.padPush?(P_RIGHT) and check(b, x+16, y) == false
139+ y = y + 1
140+ y = y + 3 if Input.padDown?(P_DOWN)
141+
142+ # 当たり判定
143+ if check(b, x, y) == true then # 当たっていたら
144+ for i in 0..3 do
145+ for j in 0..3 do # フィールド配列に設定
146+ $field[(y+15) / 16 + i - 1][x / 16 + j] += b[i][j]
147+ end
148+ end
149+
150+ for i in 0..19 do # 揃った行を削除&上に空行追加
151+ if $field[i].index(0) == nil then
152+ $field.delete_at(i)
153+ $field.unshift([-1] + [0]*10 + [-1]*2)
154+ end
155+ end
156+
157+ # 位置の初期化
158+ x = 64
159+ y = 0
160+ kind = rand(7)+1
161+ angle = 0
162+
163+ # ゲームオーバー判定
164+ b = BLOCK[kind]
165+ if check(b, x, y) == true then
166+ state = 2
167+ for i in 0..3 do
168+ for j in 0..3 do # フィールド配列に設定
169+ $field[(y+15) / 16 + i][x / 16 + j] = b[i][j] if b[i][j] != 0
170+ end
171+ end
172+ end
173+ else # 当たっていなかったら
174+ # 画像描画
175+ for i in 0..3 do
176+ for j in 0..3 do
177+ Window.draw(j * 16 + x, i * 16 + y, blockimage[kind]) if b[i][j] != 0
178+ end
179+ end
180+ end
181+
182+ when 2 # スペース入力待ち
183+ Window.draw(0, 92, fontback, 9)
184+ Window.drawFont(64, 100, "push space", font, :color=>[255,255,255,255],:z=>10)
185+ state = 0 if Input.keyPush?(K_SPACE)
186+ end
187+
188+ # フィールド描画
189+ for i in 0..20 do
190+ for j in 0..11 do
191+ Window.draw(j * 16, i * 16, blockimage[$field[i][j]]) if $field[i][j] != 0
192+ end
193+ end
194+
195+ break if Input.keyDown?(K_ESCAPE)
196+end
--- branches/1.0.3/sample/race.rb (nonexistent)
+++ branches/1.0.3/sample/race.rb (revision 49)
@@ -0,0 +1,124 @@
1+#!ruby -Ks
2+# DXRuby サンプル ミニレーシング
3+# 左右で回転、Zで加速、Xでバック。
4+require 'dxruby'
5+
6+Window.caption = "ミニレーシング"
7+
8+# コースデータ
9+line1 = [53, 430, 568, 438, 568, 438, 607, 261, 607, 261, 520, 200, 520, 200, 531, 151,
10+ 531, 151, 602, 115, 602, 115, 562, 19, 562, 19, 113, 21, 113, 21, 34, 83,
11+ 34, 83, 81, 180, 81, 180, 221, 207, 221, 207, 251, 274, 251, 274, 204, 299,
12+ 204, 299, 61, 262, 61, 262, 26, 358, 26, 358, 53, 430]
13+line2 = [93, 330, 88, 380, 88, 380, 479, 392, 479, 392, 536, 302, 536, 302, 534, 267,
14+ 534, 267, 461, 210, 461, 210, 459, 151, 459, 151, 518, 91, 518, 91, 487, 53,
15+ 487, 53, 156, 77, 156, 77, 125, 110, 125, 110, 292, 197, 292, 197, 311, 268,
16+ 311, 268, 227, 342, 227, 342, 93, 330]
17+
18+# コース作成
19+$course = Image.new(640, 480)
20+$course.box(0, 0, 639, 479, [255, 0, 200, 0])
21+for i in 0..(line1.size/2-2)
22+ $course.line(line1[i*2], line1[i*2+1], line1[i*2+2], line1[i*2+3], [255, 128, 128, 128])
23+end
24+for i in 0..(line2.size/2-2)
25+ $course.line(line2[i*2], line2[i*2+1], line2[i*2+2], line2[i*2+3], [255, 128, 128, 128])
26+end
27+
28+# 自前で塗りつぶし
29+Green = [255, 0, 200, 0]
30+Gray = [255, 128, 128, 128]
31+def paint(x, y, col)
32+ arr = []
33+ loop do
34+ px = x
35+ flag = [1, 1]
36+ return if y < 0 or y > 479
37+ while px > 0 and $course[px-1,y] == Green do # 左端まで検索
38+ px = px - 1
39+ end
40+ lx = px
41+ while px <= 639 and $course[px,y] == Green do # 右端まで塗る
42+ (0..1).each do |i|
43+ if $course[px, y+i*2-1] == Green then
44+ if flag[i] == 1 then
45+ arr.push([px, y+i*2-1, col]) # 上下に空きがあれば再帰で塗る登録
46+ flag[i] = 0
47+ end
48+ else
49+ flag[i] = 1
50+ end
51+ end
52+ px = px + 1
53+ end
54+ $course.line(lx, y, px-1, y, Gray)
55+
56+ if arr.size != 1 then
57+ break
58+ end
59+ x = arr[0][0]
60+ y = arr[0][1]
61+ col = arr[0][2]
62+ arr = []
63+ end
64+
65+ arr.each do |ax, ay, acol|
66+ paint(ax,ay,acol) # 再帰呼び出し
67+ end
68+
69+end
70+
71+paint(200,300,[255,128,128,128])
72+
73+# 車データ
74+carimage = Image.new(8,8)
75+carimage.box(0, 1, 7, 6, [255, 255, 0, 0]).box(5, 2, 6, 5, [255, 0, 0, 255]).
76+ line(0, 0, 1, 0, [255, 0, 0, 0]).line(5, 0, 6, 0, [255, 0, 0, 0]).
77+ line(0, 7, 1, 7, [255, 0, 0, 0]).line(5, 7, 6, 7, [255, 0, 0, 0])
78+
79+x = 200
80+y = 300
81+angle = 0
82+speed = 0
83+dx = 0
84+dy = 0
85+
86+Window.scale = 2
87+Window.width = 200
88+Window.height = 200
89+
90+image = Image.new(200,200, Green)
91+
92+Window.loop do
93+ # 移動処理
94+ speed = speed + 0.1 if Input.padDown?(P_BUTTON0) and speed < 4
95+ speed = speed - 0.1 if Input.padDown?(P_BUTTON1) and speed > -2
96+ angle = angle - 45 if Input.padPush?(P_LEFT)
97+ angle = angle + 45 if Input.padPush?(P_RIGHT)
98+
99+ dx = dx * 0.95 + Math.cos(Math::PI / 180 * angle) * speed * 0.05
100+ dy = dy * 0.95 + Math.sin(Math::PI / 180 * angle) * speed * 0.05
101+ x = x + dx
102+ y = y + dy
103+
104+ # imageオブジェクト編集
105+ image.copyRect(0, 0, $course, x, y, 200, 200)
106+# $course.x = x
107+# $course.y = y
108+# $course.width = 200
109+# $course.height = 200
110+
111+ # 描画
112+ Window.draw(0, 0, image)
113+ Window.drawRot(96, 96, carimage, angle)
114+
115+ if image[100, 100] == Green then
116+ dx = -dx
117+ dy = -dy
118+ x = x + dx
119+ y = y + dy
120+ speed = 0.5
121+ end
122+
123+ break if Input.keyPush?(K_ESCAPE)
124+end
--- branches/1.0.3/sample/readme_sample.txt (nonexistent)
+++ branches/1.0.3/sample/readme_sample.txt (revision 49)
@@ -0,0 +1,15 @@
1+DXRuby サンプルプログラム
2+
3+まず最初に、ソースが汚くてごめんなさい。
4+テキトーに作ったものたちを参考になればって感じで詰め込んであります。
5+
6+minsanple・・・最も簡単なサンプルです。
7+sample・・・Windowモジュールの各種機能のサンプルとなっています。
8+8_puzzle・・・8パズルです。画像を読み込んで遊んでみてください。
9+block_destory・・・英語でなんていうんですかね。こうですか、わかりません!ブロック崩しです。
10+block_fall・・・有名なアレモドキです。
11+dot・・・砂が降ってくるデモです。マウスでいじってください。
12+race・・・レースモドキです。ImageオブジェクトのcopyRectメソッドを使っています。
13+mapedit・・・疑似3Dの簡易マップエディタです。shift押しながらクリックで土地の上げ下げできます。
14+soundeffect・・・SoundEffectクラスのサンプルです。ZXCキーで音がでます。
15+
Show on old repository browser