ruby-miyako 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1115 -0
- data/Rakefile +7 -0
- data/defines.h +144 -0
- data/extconf.rb +44 -0
- data/extern.h +29 -0
- data/img/cursor.png +0 -0
- data/img/cursors.png +0 -0
- data/img/dice.png +0 -0
- data/img/wait_cursor.png +0 -0
- data/img/win_base.png +0 -0
- data/img/window.png +0 -0
- data/install_miyako.rb +87 -0
- data/lib/Miyako/API/audio.rb +584 -0
- data/lib/Miyako/API/basic_data.rb +1026 -0
- data/lib/Miyako/API/bitmap.rb +534 -0
- data/lib/Miyako/API/choices.rb +481 -0
- data/lib/Miyako/API/collision.rb +638 -0
- data/lib/Miyako/API/diagram.rb +586 -0
- data/lib/Miyako/API/drawing.rb +151 -0
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -0
- data/lib/Miyako/API/font.rb +430 -0
- data/lib/Miyako/API/input.rb +456 -0
- data/lib/Miyako/API/layout.rb +644 -0
- data/lib/Miyako/API/map.rb +583 -0
- data/lib/Miyako/API/map_event.rb +222 -0
- data/lib/Miyako/API/modules.rb +357 -0
- data/lib/Miyako/API/movie.rb +166 -0
- data/lib/Miyako/API/parts.rb +188 -0
- data/lib/Miyako/API/plane.rb +205 -0
- data/lib/Miyako/API/screen.rb +341 -0
- data/lib/Miyako/API/shape.rb +443 -0
- data/lib/Miyako/API/sprite.rb +773 -0
- data/lib/Miyako/API/sprite_animation.rb +494 -0
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -0
- data/lib/Miyako/API/story.rb +350 -0
- data/lib/Miyako/API/textbox.rb +773 -0
- data/lib/Miyako/API/utility.rb +419 -0
- data/lib/Miyako/API/viewport.rb +190 -0
- data/lib/Miyako/API/yuki.rb +1180 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +157 -0
- data/lib/Miyako/miyako.rb +201 -0
- data/lib/Miyako/miyako_require_only.rb +35 -0
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/miyako_basicdata.c +484 -0
- data/miyako_bitmap.c +1225 -0
- data/miyako_collision.c +403 -0
- data/miyako_drawing.c +187 -0
- data/miyako_font.c +334 -0
- data/miyako_hsv.c +830 -0
- data/miyako_input_audio.c +254 -0
- data/miyako_layout.c +191 -0
- data/miyako_no_katana.c +1086 -0
- data/miyako_sprite2.c +431 -0
- data/miyako_transform.c +438 -0
- data/miyako_utility.c +288 -0
- data/sample/Animation1/m1ku.rb +68 -0
- data/sample/Animation1/m1ku_arm_0.png +0 -0
- data/sample/Animation1/m1ku_arm_1.png +0 -0
- data/sample/Animation1/m1ku_arm_2.png +0 -0
- data/sample/Animation1/m1ku_arm_3.png +0 -0
- data/sample/Animation1/m1ku_back.jpg +0 -0
- data/sample/Animation1/m1ku_body.png +0 -0
- data/sample/Animation1/m1ku_eye_0.png +0 -0
- data/sample/Animation1/m1ku_eye_1.png +0 -0
- data/sample/Animation1/m1ku_eye_2.png +0 -0
- data/sample/Animation1/m1ku_eye_3.png +0 -0
- data/sample/Animation1/m1ku_hair_front.png +0 -0
- data/sample/Animation1/m1ku_hair_rear.png +0 -0
- data/sample/Animation1/readme.txt +72 -0
- data/sample/Animation2/lex.rb +96 -0
- data/sample/Animation2/lex_back.png +0 -0
- data/sample/Animation2/lex_body.png +0 -0
- data/sample/Animation2/lex_roadroller.png +0 -0
- data/sample/Animation2/lex_wheel_0.png +0 -0
- data/sample/Animation2/lex_wheel_1.png +0 -0
- data/sample/Animation2/lex_wheel_2.png +0 -0
- data/sample/Animation2/readme.txt +72 -0
- data/sample/Animation2/song_title.png +0 -0
- data/sample/Diagram_sample/back.png +0 -0
- data/sample/Diagram_sample/chr01.png +0 -0
- data/sample/Diagram_sample/chr02.png +0 -0
- data/sample/Diagram_sample/cursor.png +0 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
- data/sample/Diagram_sample/readme.txt +90 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +297 -0
- data/sample/Room3/ending.rb +180 -0
- data/sample/Room3/green.rb +220 -0
- data/sample/Room3/image/akamatsu.png +0 -0
- data/sample/Room3/image/aoyama.png +0 -0
- data/sample/Room3/image/congra.png +0 -0
- data/sample/Room3/image/congratulation.png +0 -0
- data/sample/Room3/image/congratulation_bg.png +0 -0
- data/sample/Room3/image/cursor.png +0 -0
- data/sample/Room3/image/midori.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
- data/sample/Room3/image/room_blue.png +0 -0
- data/sample/Room3/image/room_green.png +0 -0
- data/sample/Room3/image/room_red.png +0 -0
- data/sample/Room3/image/start.png +0 -0
- data/sample/Room3/image/three_doors.png +0 -0
- data/sample/Room3/image/wait_cursor.png +0 -0
- data/sample/Room3/main.rb +120 -0
- data/sample/Room3/main_component.rb +59 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +227 -0
- data/sample/Room3/room3.rb +25 -0
- data/sample/Room3/title.rb +184 -0
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +66 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +108 -0
- data/sample/fixed_map_test/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
- data/sample/fixed_map_test/map.csv +19 -0
- data/sample/fixed_map_test/map_01.png +0 -0
- data/sample/fixed_map_test/mapchip.csv +23 -0
- data/sample/fixed_map_test/monster.png +0 -0
- data/sample/fixed_map_test/readme.txt +72 -0
- data/sample/map_test/chara.rb +58 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +69 -0
- data/sample/map_test/main_scene.rb +153 -0
- data/sample/map_test/map.png +0 -0
- data/sample/map_test/map2.png +0 -0
- data/sample/map_test/map_layer.csv +127 -0
- data/sample/map_test/map_manager.rb +75 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +71 -0
- data/sample/map_test/readme.txt +89 -0
- data/sample/map_test/route.rb +157 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +74 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +192 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +216 -0
data/sample/Room3/red.rb
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
class Red
|
3
|
+
include Story::Scene
|
4
|
+
include MainComponent
|
5
|
+
|
6
|
+
def init
|
7
|
+
@yuki = Yuki.new(message_box[:box], command_box[:box]) do |box, cbox|
|
8
|
+
select_textbox(box)
|
9
|
+
select_commandbox(cbox)
|
10
|
+
end
|
11
|
+
def @yuki.text_wait(txt, w = 0.3)
|
12
|
+
text txt
|
13
|
+
wait w
|
14
|
+
end
|
15
|
+
|
16
|
+
@akamatsu = Sprite.new(:file => "image/akamatsu.png", :type => :ck)
|
17
|
+
@akamatsu.center!.bottom!
|
18
|
+
@yuki.regist_parts(:akamatsu, @akamatsu)
|
19
|
+
|
20
|
+
@room = Sprite.new(:file=>"image/room_red.png", :type=>:as)
|
21
|
+
@room.center!.bottom!
|
22
|
+
|
23
|
+
var[:akamatsu_aisatsu] = false if var[:akamatsu_aisatsu] == nil
|
24
|
+
var[:release_akamatsu_book] = false if var[:release_akamatsu_book] == nil
|
25
|
+
var[:search_bookmark] = false if var[:search_bookmark] == nil
|
26
|
+
var[:get_bookmark] = false if var[:get_bookmark] == nil
|
27
|
+
|
28
|
+
@yuki.vars[:var] = var
|
29
|
+
@yuki.vars[:command] = get_command
|
30
|
+
@yuki.vars[:main_loop] = main_loop
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup
|
34
|
+
@yuki.setup
|
35
|
+
message_box.start
|
36
|
+
command_box.start
|
37
|
+
@yuki.start_plot(plot)
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_command
|
41
|
+
return [Yuki::Command.new("挨拶する", nil, lambda{var[:akamatsu_aisatsu] == false}, red2),
|
42
|
+
Yuki::Command.new("辺りを見る", nil, lambda{var[:akamatsu_aisatsu]==true }, look),
|
43
|
+
Yuki::Command.new("話す", nil, lambda{var[:akamatsu_aisatsu]==true }, talk),
|
44
|
+
Yuki::Command.new("渡す", nil, lambda{var[:akamatsu_aisatsu] && var[:release_akamatsu_book] && var[:search_bookmark]==false}, send1),
|
45
|
+
Yuki::Command.new("渡す", nil, lambda{var[:search_bookmark] && var[:get_bookmark] && var[:aikotoba]==false}, send2),
|
46
|
+
Yuki::Command.new("戻る", nil, lambda{var[:akamatsu_aisatsu]==true}, MainScene)]
|
47
|
+
end
|
48
|
+
|
49
|
+
def update
|
50
|
+
return nil if Input.quit_or_escape?
|
51
|
+
message_box.update_animation
|
52
|
+
command_box.update_animation
|
53
|
+
@yuki.update
|
54
|
+
r = @yuki.executing? ? @now : @yuki.result
|
55
|
+
if @yuki.is_scenario?(r)
|
56
|
+
@yuki.start_plot(r)
|
57
|
+
r = @now
|
58
|
+
end
|
59
|
+
return r
|
60
|
+
end
|
61
|
+
|
62
|
+
def render
|
63
|
+
@room.render
|
64
|
+
@yuki.render
|
65
|
+
message_box.render
|
66
|
+
command_box.render if @yuki.selecting?
|
67
|
+
end
|
68
|
+
|
69
|
+
def plot
|
70
|
+
yuki_plot do
|
71
|
+
text "赤の扉から中に入った。"
|
72
|
+
pause.clear
|
73
|
+
show :akamatsu
|
74
|
+
text "目の前には"
|
75
|
+
color(:red){vars[:var][:akamatsu_aisatsu] ? "赤松さん" : "男の人"}
|
76
|
+
text "が居る。"
|
77
|
+
cr
|
78
|
+
vars[:main_loop]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def main_loop
|
83
|
+
yuki_plot do
|
84
|
+
loop do
|
85
|
+
text "どうする?"
|
86
|
+
command vars[:command]
|
87
|
+
break select_result if is_scene?(select_result)
|
88
|
+
call_plot(select_result) if is_scenario?(select_result)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def red2
|
94
|
+
yuki_plot do
|
95
|
+
clear
|
96
|
+
text_wait "「はっ、"
|
97
|
+
text_wait "私の、"
|
98
|
+
text_wait "名前は、"
|
99
|
+
text_wait "赤松と、"
|
100
|
+
text_wait "申します!"
|
101
|
+
cr
|
102
|
+
text_wait " よろしく、"
|
103
|
+
text "お願いします!」"
|
104
|
+
pause.clear
|
105
|
+
vars[:var][:akamatsu_aisatsu] = true
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def look
|
110
|
+
yuki_plot do
|
111
|
+
clear
|
112
|
+
text "部屋を見回すと、勉強家らしく、"
|
113
|
+
cr
|
114
|
+
text "机と数々の本が本棚にしまってある。"
|
115
|
+
pause.clear
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def talk
|
120
|
+
yuki_plot do
|
121
|
+
clear
|
122
|
+
text_wait "「はっ、"
|
123
|
+
text_wait "私は、"
|
124
|
+
text_wait "某大学の、"
|
125
|
+
text_wait "はっ、"
|
126
|
+
text "8年生です!"
|
127
|
+
pause.cr
|
128
|
+
text_wait " 今年こそ、"
|
129
|
+
text_wait "無事、"
|
130
|
+
text_wait "卒業、"
|
131
|
+
text_wait "できるよう!"
|
132
|
+
cr
|
133
|
+
text_wait " 精進する、"
|
134
|
+
text_wait "所存で、"
|
135
|
+
text_wait "ございます!」"
|
136
|
+
pause.clear
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def send1
|
141
|
+
yuki_plot do
|
142
|
+
clear
|
143
|
+
text "あなたは、青山君から受け取っていた本を返した。"
|
144
|
+
pause.clear
|
145
|
+
text_wait "「あっ、"
|
146
|
+
text_wait "青山くんから、"
|
147
|
+
text "本を受け取って頂いたのですね!"
|
148
|
+
pause.cr
|
149
|
+
text_wait " あ、"
|
150
|
+
text_wait "ありがとうございます!"
|
151
|
+
pause.clear
|
152
|
+
text_wait " あ、"
|
153
|
+
text_wait "あのひと、"
|
154
|
+
text "ちょっとビビるでしょ?"
|
155
|
+
pause.cr
|
156
|
+
text_wait " ・・・おっとと、"
|
157
|
+
text_wait "聞こえてちゃ、"
|
158
|
+
text "困るな。」"
|
159
|
+
pause.clear
|
160
|
+
text " それでは・・・・・。"
|
161
|
+
pause.clear
|
162
|
+
text " ・・・・・。"
|
163
|
+
pause.clear
|
164
|
+
text_wait " おや、"
|
165
|
+
text_wait "栞が、"
|
166
|
+
text_wait "入って、"
|
167
|
+
text "ないですね。"
|
168
|
+
pause.cr
|
169
|
+
text_wait " あれは、"
|
170
|
+
text_wait "僕の、"
|
171
|
+
text_wait "大事な、"
|
172
|
+
text "宝物なんです!"
|
173
|
+
pause.cr
|
174
|
+
text_wait " 青山君の、"
|
175
|
+
text_wait "部屋に、"
|
176
|
+
text_wait "戻って、"
|
177
|
+
cr
|
178
|
+
text_wait " 栞を、"
|
179
|
+
text_wait "探して、"
|
180
|
+
text_wait "きてください!」"
|
181
|
+
pause.clear
|
182
|
+
vars[:var][:search_bookmark]=true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def send2
|
187
|
+
yuki_plot do
|
188
|
+
clear
|
189
|
+
text_wait "「あっ、"
|
190
|
+
text_wait "これは、"
|
191
|
+
text "無くなっていた栞!"
|
192
|
+
pause.cr
|
193
|
+
text_wait " ありがとうございます!"
|
194
|
+
cr
|
195
|
+
text_wait " あの、"
|
196
|
+
text_wait "お礼といっては、"
|
197
|
+
text "何ですが、"
|
198
|
+
pause.cr
|
199
|
+
text_wait " 合言葉を、"
|
200
|
+
text_wait "教えて、"
|
201
|
+
text "差し上げます!」"
|
202
|
+
pause.clear
|
203
|
+
text_wait "「『こんなゲーム", 0.5
|
204
|
+
text_wait " まじになっちゃって", 0.5
|
205
|
+
cr
|
206
|
+
text_wait " どうするの』", 0.5
|
207
|
+
cr
|
208
|
+
text_wait " これが、"
|
209
|
+
text_wait "合い言葉です!"
|
210
|
+
cr
|
211
|
+
text_wait " それでは、"
|
212
|
+
text "お元気で!」"
|
213
|
+
pause.clear
|
214
|
+
vars[:var][:aikotoba]=true
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def final
|
219
|
+
message_box.stop
|
220
|
+
command_box.stop
|
221
|
+
end
|
222
|
+
|
223
|
+
def dispose
|
224
|
+
@akamatsu.dispose
|
225
|
+
@room.dispose
|
226
|
+
end
|
227
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
#! /usr/bin/ruby
|
3
|
+
# Sample Adventure "Room 3"
|
4
|
+
|
5
|
+
$miyako_debug_mode = true
|
6
|
+
|
7
|
+
require 'Miyako/miyako'
|
8
|
+
|
9
|
+
include Miyako
|
10
|
+
|
11
|
+
Miyako.setTitle("Room 3")
|
12
|
+
Screen.set_size(640, 480)
|
13
|
+
|
14
|
+
require 'main_component'
|
15
|
+
require 'title'
|
16
|
+
require 'main'
|
17
|
+
require 'red'
|
18
|
+
require 'green'
|
19
|
+
require 'blue'
|
20
|
+
require 'ending'
|
21
|
+
|
22
|
+
r3 = Story.new
|
23
|
+
r3.run(Title)
|
24
|
+
#for debug
|
25
|
+
#r3.run(MainScene)
|
@@ -0,0 +1,184 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
class Title
|
3
|
+
include Story::Scene
|
4
|
+
|
5
|
+
def self.scene_type
|
6
|
+
return :scene
|
7
|
+
end
|
8
|
+
|
9
|
+
def init
|
10
|
+
font = Font.sans_serif
|
11
|
+
font.size = 24
|
12
|
+
font.color = Color[:white]
|
13
|
+
@push_key = Shape.text(:text=>"Push Any Key", :font=>font)
|
14
|
+
@push_key.center!.bottom!{|body| (0.1).ratio(body) }
|
15
|
+
|
16
|
+
@copy_right = Shape.text(:text=>"2006-2008 Cyross Makoto", :font=>font)
|
17
|
+
@copy_right.center!.bottom!{|body| (0.05).ratio(body) }
|
18
|
+
|
19
|
+
@visible = false
|
20
|
+
|
21
|
+
@title = Sprite.new(:file=>"image/mittsu_no_oheya.png", :type=>:ck)
|
22
|
+
|
23
|
+
@exec = self.method(:view_in)
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup
|
27
|
+
@title.move_to!(Screen.w, 0)
|
28
|
+
end
|
29
|
+
|
30
|
+
def view_in
|
31
|
+
if @title.x > 0
|
32
|
+
@title.move!(-8, 0)
|
33
|
+
return @now
|
34
|
+
end
|
35
|
+
@visible = true
|
36
|
+
@exec = self.method(:waiting)
|
37
|
+
return @now
|
38
|
+
end
|
39
|
+
|
40
|
+
def waiting
|
41
|
+
if Input.pushed_any? || Input.click?(:left)
|
42
|
+
@exec = self.method(:view_out)
|
43
|
+
@visible = false
|
44
|
+
end
|
45
|
+
return @now
|
46
|
+
end
|
47
|
+
|
48
|
+
def view_out
|
49
|
+
if @title.x > -Screen.w
|
50
|
+
@title.move!(-8, 0)
|
51
|
+
return @now
|
52
|
+
end
|
53
|
+
return TitleCall
|
54
|
+
end
|
55
|
+
|
56
|
+
def update
|
57
|
+
return nil if (Input.pushed_any?(:esc) || Input.quit?)
|
58
|
+
return @exec.call
|
59
|
+
end
|
60
|
+
|
61
|
+
def render
|
62
|
+
@title.render
|
63
|
+
if @visible
|
64
|
+
@push_key.render
|
65
|
+
@copy_right.render
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class TitleCall
|
71
|
+
include Story::Scene
|
72
|
+
include MainComponent
|
73
|
+
|
74
|
+
def init
|
75
|
+
@yuki = Yuki.new(message_box[:box]){|box|
|
76
|
+
select_textbox(box)
|
77
|
+
}
|
78
|
+
@man = Sprite.new(:file=>"image/start.png", :type=>:ck)
|
79
|
+
@man.center!.bottom!
|
80
|
+
@alpha = 0.0
|
81
|
+
@wait = WaitCounter.new(0.2)
|
82
|
+
@exec = self.method(:view_in)
|
83
|
+
end
|
84
|
+
|
85
|
+
def setup
|
86
|
+
@yuki.setup(plot){|plot|
|
87
|
+
select_plot(plot)
|
88
|
+
}
|
89
|
+
@yuki.vars[:next] = MainScene
|
90
|
+
@wait.start
|
91
|
+
end
|
92
|
+
|
93
|
+
def update
|
94
|
+
return nil if (Input.pushed_any?(:esc) || Input.quit?)
|
95
|
+
return @exec.call
|
96
|
+
end
|
97
|
+
|
98
|
+
def final
|
99
|
+
message_box.stop
|
100
|
+
end
|
101
|
+
|
102
|
+
def view_in
|
103
|
+
if @wait.finish?
|
104
|
+
if @alpha == 1.0
|
105
|
+
@yuki.start_plot
|
106
|
+
@exec = self.method(:exec_yuki)
|
107
|
+
message_box.start
|
108
|
+
return @now
|
109
|
+
end
|
110
|
+
@alpha += 0.15
|
111
|
+
@alpha = 1.0 if @alpha >= 1.0
|
112
|
+
@wait.start
|
113
|
+
end
|
114
|
+
return @now
|
115
|
+
end
|
116
|
+
|
117
|
+
def exec_yuki
|
118
|
+
message_box.update_animation
|
119
|
+
@yuki.update
|
120
|
+
return @yuki.result ? @yuki.result : @now
|
121
|
+
end
|
122
|
+
|
123
|
+
def plot
|
124
|
+
yuki_plot do
|
125
|
+
text("「レディ〜ス エ〜ン ジェントルメ〜ン!」").pause.cr
|
126
|
+
text("「本日も、視聴者参加バラエティー").cr
|
127
|
+
text(" 『ルーム3』の時間がは〜じまりま〜した〜!」").pause.clear
|
128
|
+
text("「司会はわたくし、").cr
|
129
|
+
wait 0.3
|
130
|
+
text(" サミュエル・ボチボチデンナーが").cr
|
131
|
+
text(" お送りしま〜す!」").pause.clear
|
132
|
+
text("「本日も、難関を乗り越え、").cr
|
133
|
+
text(" 豪華賞品をゲットするだけ!").cr
|
134
|
+
wait 0.5
|
135
|
+
text(" カンタン!」").pause.clear
|
136
|
+
text("「ルールもカンタン!").cr
|
137
|
+
text(" 3つの部屋にいる住人からヒントを得て、").pause.cr
|
138
|
+
text(" 合言葉を見つけるだけ!").cr
|
139
|
+
wait 0.5
|
140
|
+
text(" ほら、カンタンでしょ?」").pause.clear
|
141
|
+
text("「でも、これらの部屋にいる住人、").cr
|
142
|
+
text(" 一筋縄じゃ合い言葉を教えてくれない。").cr
|
143
|
+
wait 0.5
|
144
|
+
text(" いろいろ話して、").cr
|
145
|
+
text(" 合い言葉をゲットしてくれ!」").pause.clear
|
146
|
+
text "「さぁ、最初の挑戦者だ。"
|
147
|
+
wait 0.5
|
148
|
+
text "お名前は?"
|
149
|
+
wait 1.5
|
150
|
+
cr
|
151
|
+
text " ・・・おおー、元気いいねー!"
|
152
|
+
wait 0.5
|
153
|
+
cr
|
154
|
+
text " じゃあ、どっから来たの?"
|
155
|
+
wait 1.0
|
156
|
+
cr
|
157
|
+
text(" ・・・オーケイ、よくできました!」").pause.clear
|
158
|
+
text "「じゃ、ルールは分かるよね?"
|
159
|
+
wait 0.5
|
160
|
+
cr
|
161
|
+
text " ・・・よし」"
|
162
|
+
pause.clear
|
163
|
+
text "「ドキドキするねぇ、"
|
164
|
+
wait 0.5
|
165
|
+
cr
|
166
|
+
text " ワクワクするねぇ"
|
167
|
+
pause.cr
|
168
|
+
text " それじゃ、元気よく、"
|
169
|
+
cr
|
170
|
+
text " 目の前のドアから入ってみよう。」"
|
171
|
+
pause.clear
|
172
|
+
text "「よーい、"
|
173
|
+
wait 0.5
|
174
|
+
text "スタート!」"
|
175
|
+
pause.clear
|
176
|
+
vars[:next]
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def render
|
181
|
+
Bitmap.dec_alpha(@man, Screen, @alpha)
|
182
|
+
message_box.render if @exec == self.method(:exec_yuki)
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# 自由落下運動サンプル
|
3
|
+
# 2009.4.19 Cyross Makoto
|
4
|
+
|
5
|
+
require 'Miyako/miyako'
|
6
|
+
|
7
|
+
include Miyako
|
8
|
+
|
9
|
+
# 基本オブジェクト
|
10
|
+
class Obj
|
11
|
+
include Layout
|
12
|
+
|
13
|
+
attr_reader :collision, :position
|
14
|
+
|
15
|
+
def initialize(size)
|
16
|
+
init_layout
|
17
|
+
set_layout_size(*size.to_a)
|
18
|
+
|
19
|
+
# スプライトの生成
|
20
|
+
@sprite = Sprite.new(size: size, type: :ac)
|
21
|
+
|
22
|
+
# コリジョンの生成
|
23
|
+
@collision = Collision.new(Rect.new(0, 0, *size.to_a))
|
24
|
+
|
25
|
+
# 位置情報の生成
|
26
|
+
@position = Point.new(0, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update_layout_position
|
30
|
+
# 画像はマージンが掛かっている可能性があるため、
|
31
|
+
# 補正を掛けておく
|
32
|
+
pos = @layout.pos.move(-@position[0],-@position[1])
|
33
|
+
@sprite.move!(*pos)
|
34
|
+
@position.move_to!(*@layout.pos)
|
35
|
+
end
|
36
|
+
|
37
|
+
# スプライトとコリジョン間でマージンを設定
|
38
|
+
def margin(dx, dy)
|
39
|
+
@sprite.move!(dx, dy)
|
40
|
+
return self
|
41
|
+
end
|
42
|
+
|
43
|
+
# 衝突判定
|
44
|
+
def collision?(col, pos)
|
45
|
+
return @collision.collision?(@position, col, pos)
|
46
|
+
end
|
47
|
+
|
48
|
+
# 画面へ描画
|
49
|
+
def render
|
50
|
+
@sprite.render
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# ボール
|
55
|
+
class Ball < Obj
|
56
|
+
V0 = [8.0, 12.0].cycle
|
57
|
+
VX = [1, -1].cycle
|
58
|
+
G = 9.8
|
59
|
+
|
60
|
+
# 初速度の取得
|
61
|
+
attr_reader :v0
|
62
|
+
|
63
|
+
def initialize
|
64
|
+
size = Size.new(32, 32)
|
65
|
+
super(size)
|
66
|
+
Drawing.circle(@sprite,
|
67
|
+
[size.w/2,size.h/2],
|
68
|
+
size.w/2,
|
69
|
+
[255,255,255],
|
70
|
+
true)
|
71
|
+
|
72
|
+
# ジャンプ中?
|
73
|
+
@jumping = false
|
74
|
+
# y基準位置
|
75
|
+
@by = 0.0
|
76
|
+
# 元y
|
77
|
+
@oy = 0.0
|
78
|
+
# 速度
|
79
|
+
@v = 0.0
|
80
|
+
# 初速度
|
81
|
+
@v0 = 0.0
|
82
|
+
# 時間
|
83
|
+
@t = 0.0
|
84
|
+
# 時間刻み
|
85
|
+
@dt = 0.01
|
86
|
+
# 床の跳ね返り係数
|
87
|
+
# 0.9や0.8にすると永遠に跳ねる
|
88
|
+
@e = 0.5
|
89
|
+
# 拡大率
|
90
|
+
@zoom = 1.0 / @dt
|
91
|
+
# ウェイト
|
92
|
+
@wait = WaitCounter.new(@dt)
|
93
|
+
end
|
94
|
+
|
95
|
+
# ボールの更新
|
96
|
+
# 床(floor)を引数に取る
|
97
|
+
def update(floor)
|
98
|
+
if @jumping
|
99
|
+
# 放物運動の公式より。
|
100
|
+
# 当たり判定のテストも兼ねていることから、
|
101
|
+
# 整数単位の値が必要だったため、時間刻みを元に値を拡大している
|
102
|
+
y = (@v0 * @t - G * (@t ** 2) / 2) * @zoom
|
103
|
+
# 移動量の算出
|
104
|
+
dy = y - @oy
|
105
|
+
# 床とぶつかる?
|
106
|
+
# 移動範囲を作成
|
107
|
+
rect = Rect.new(@position.x,
|
108
|
+
@position.y,
|
109
|
+
1, -dy)
|
110
|
+
# 所定の間隔で床と衝突判定
|
111
|
+
if Utility.product_liner_f(rect, floor.h).any?{|pos|
|
112
|
+
@collision.collision?(pos,
|
113
|
+
floor.collision,
|
114
|
+
floor.position)
|
115
|
+
}
|
116
|
+
# 床にぶつかれば跳ね返る
|
117
|
+
self.move_to!(self.x, @by)
|
118
|
+
# 跳ね返り時の速度を求める。
|
119
|
+
# 実数にすると何故か永遠にはねるため、整数化して強制的に値を少なくしている
|
120
|
+
@v0 = -((@v0 - G * @t) * @e).to_i
|
121
|
+
@t = @dt
|
122
|
+
@oy = 0.0
|
123
|
+
@wait.start
|
124
|
+
elsif @wait.finish?
|
125
|
+
# ぶつからなければ移動
|
126
|
+
self.move_to!(self.x, @by - y.to_i)
|
127
|
+
@t = @t + @dt
|
128
|
+
@oy = y
|
129
|
+
@wait.start
|
130
|
+
end
|
131
|
+
# 初速度がゼロ?(止まった?)
|
132
|
+
if @v0 == 0.0
|
133
|
+
# ジャンプの終了
|
134
|
+
@wait.stop
|
135
|
+
@jumping = false
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# 飛び上がれ!
|
141
|
+
def jumpup
|
142
|
+
return if @jumping
|
143
|
+
# y基準位置の決定
|
144
|
+
@by = self.y.to_f
|
145
|
+
# 初速度の決定
|
146
|
+
@v0 = V0.next
|
147
|
+
@jumping = true
|
148
|
+
@t = @dt
|
149
|
+
@wait.start
|
150
|
+
end
|
151
|
+
|
152
|
+
# ジャンプ中?
|
153
|
+
def jumping?
|
154
|
+
return @jumping
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# 床
|
159
|
+
class Floor < Obj
|
160
|
+
def initialize
|
161
|
+
size = Size.new(640, 16)
|
162
|
+
super(size)
|
163
|
+
Drawing.fill(@sprite, [255,64,64])
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# ボールの用意
|
168
|
+
@ball = Ball.new
|
169
|
+
|
170
|
+
# 床の用意
|
171
|
+
@floor = Floor.new
|
172
|
+
|
173
|
+
# 床の初期位置設定
|
174
|
+
@floor.center!.bottom!
|
175
|
+
|
176
|
+
# ボールの初期位置設定
|
177
|
+
@ball.center!.bottom!{|b| @floor.size.h }
|
178
|
+
|
179
|
+
# フォントの用意
|
180
|
+
@font = Font.serif
|
181
|
+
@font.size = 16
|
182
|
+
|
183
|
+
# 情報表示用スプライトの用意
|
184
|
+
@speed = Sprite.new(size: Size.new(640, 16), type: :ac)
|
185
|
+
@info = Shape.text(font: @font, text: "1ボタンを押せばボールが跳ね上がります")
|
186
|
+
@info.snap(@speed).left!.outside_bottom!
|
187
|
+
|
188
|
+
Miyako.main_loop do
|
189
|
+
break if Input.quit_or_escape?
|
190
|
+
@ball.update(@floor)
|
191
|
+
# 1ボタンを押した時、ボールのジャンプを始める
|
192
|
+
@ball.jumpup if Input.pushed_any?(:btn1)
|
193
|
+
|
194
|
+
# 初速度表示スプライトの更新
|
195
|
+
@speed.clear!
|
196
|
+
@font.draw_text(@speed, "初速度:#{@ball.v0}", 0, 0)
|
197
|
+
|
198
|
+
# 画面への描画
|
199
|
+
@floor.render
|
200
|
+
@ball.render
|
201
|
+
@speed.render
|
202
|
+
# ジャンプ中でなければ説明を表示
|
203
|
+
@info.render unless @ball.jumping?
|
204
|
+
end
|
data/sample/blit_rop.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# 画像ビット操作サンプル
|
2
|
+
# 2009.4.17 Cyross Makoto
|
3
|
+
|
4
|
+
require 'Miyako/miyako'
|
5
|
+
|
6
|
+
include Miyako
|
7
|
+
|
8
|
+
# 画像が画面をはみ出そうになったら移動量を+-反転
|
9
|
+
# spr:: 移動対象のスプライト
|
10
|
+
# amt:: 移動量配列
|
11
|
+
# 返却値:: 変更した移動量配列
|
12
|
+
def turn(spr, amt)
|
13
|
+
amt[0] = -amt[0] if (spr.x + spr.ow) >= Screen.w
|
14
|
+
amt[0] = -amt[0] if spr.x <= 0
|
15
|
+
amt[1] = -amt[1] if (spr.y + spr.oh) >= Screen.h
|
16
|
+
amt[1] = -amt[1] if spr.y <= 0
|
17
|
+
return amt
|
18
|
+
end
|
19
|
+
|
20
|
+
# マスク画像を作成
|
21
|
+
bmask = Sprite.new(:size=>Size.new(100,100), :type=>:ac)
|
22
|
+
Drawing.circle(bmask, [50,50], 50, [255,255,255], :fill)
|
23
|
+
|
24
|
+
# 描画用スプライトを作成
|
25
|
+
spr1 = Sprite.new(:size=>Size.new(100,100), :type=>:ac)
|
26
|
+
spr2 = Sprite.new(:size=>Size.new(100,100), :type=>:ac)
|
27
|
+
spr3 = Sprite.new(:size=>Size.new(100,100), :type=>:ac)
|
28
|
+
|
29
|
+
# 転送元背景を準備
|
30
|
+
bk = Sprite.new(:file=>"Animation1/m1ku_back.jpg", :type=>:as)
|
31
|
+
text = Sprite.new(:file=>"text.png", :type=>:ac)
|
32
|
+
# 表示用背景を準備(元画像を反転)
|
33
|
+
bk2 = bk.inverse
|
34
|
+
|
35
|
+
spr2.centering!
|
36
|
+
spr3.right!.bottom!
|
37
|
+
|
38
|
+
# 移動量配列を設定
|
39
|
+
@amt1 = [ 4, 4]
|
40
|
+
@amt2 = [ 4,-4]
|
41
|
+
@amt3 = [-4,-4]
|
42
|
+
|
43
|
+
# Main Routine
|
44
|
+
Miyako.main_loop do
|
45
|
+
break if Input.quit_or_escape?
|
46
|
+
# マスク画像の転送
|
47
|
+
bmask.render_to(spr1)
|
48
|
+
bk.render_to(spr2){|src, dst| src.ox = spr2.x; src.oy = spr2.y}
|
49
|
+
bk2.render_to(spr3){|src, dst| src.ox = spr3.x; src.oy = spr3.y}
|
50
|
+
# 元画像をandして描画用スプライトへ転送
|
51
|
+
spr1.and!(bk){|src, dst| src.ox = spr1.x; src.oy = spr1.y}
|
52
|
+
# 元画像をorして描画用スプライトへ転送
|
53
|
+
spr2.or!(text)
|
54
|
+
# 元画像をxorして描画用スプライトへ転送
|
55
|
+
spr3.xor!(text)
|
56
|
+
|
57
|
+
# 画像を画面に描画
|
58
|
+
bk2.render
|
59
|
+
spr1.render
|
60
|
+
spr2.render
|
61
|
+
spr3.render
|
62
|
+
# スプライトの移動
|
63
|
+
spr1.move!(*@amt1)
|
64
|
+
spr2.move!(*@amt2)
|
65
|
+
spr3.move!(*@amt3)
|
66
|
+
# 画像が画面をはみ出そうになったら移動量を+-反転
|
67
|
+
@amt1 = turn(spr1, @amt1)
|
68
|
+
@amt2 = turn(spr2, @amt2)
|
69
|
+
@amt3 = turn(spr3, @amt3)
|
70
|
+
end
|