dxruby64 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +14 -0
- data/README-ja.md +125 -0
- data/README.md +120 -0
- data/lib/31/dxruby.so +0 -0
- data/lib/32/dxruby.so +0 -0
- data/lib/33/dxruby.so +0 -0
- data/lib/34/dxruby.so +0 -0
- data/lib/dxruby.rb +2 -0
- data/sample/classic_sample/8_puzzle.rb +55 -0
- data/sample/classic_sample/block_destroy.rb +161 -0
- data/sample/classic_sample/block_fall.rb +194 -0
- data/sample/classic_sample/data.png +0 -0
- data/sample/classic_sample/dot.rb +80 -0
- data/sample/classic_sample/drawtile.rb +173 -0
- data/sample/classic_sample/flight.rb +75 -0
- data/sample/classic_sample/hitrangeview.rb +66 -0
- data/sample/classic_sample/mapedit.rb +270 -0
- data/sample/classic_sample/meiro.rb +106 -0
- data/sample/classic_sample/minsample.rb +14 -0
- data/sample/classic_sample/race.rb +119 -0
- data/sample/classic_sample/readme_sample.txt +42 -0
- data/sample/classic_sample/sample.rb +110 -0
- data/sample/classic_sample/soundeffect.rb +46 -0
- data/sample/new_sample/biyo.rb +25 -0
- data/sample/new_sample/image/enemy1.png +0 -0
- data/sample/new_sample/image/enemy1bomb.png +0 -0
- data/sample/new_sample/image/enemy2.png +0 -0
- data/sample/new_sample/image/enemy2bomb.png +0 -0
- data/sample/new_sample/image/enemyshot1.png +0 -0
- data/sample/new_sample/image/enemyshot2.png +0 -0
- data/sample/new_sample/image/maptile.png +0 -0
- data/sample/new_sample/image/myship.png +0 -0
- data/sample/new_sample/image/myshot.png +0 -0
- data/sample/new_sample/iraira.rb +49 -0
- data/sample/new_sample/laser2.rb +292 -0
- data/sample/new_sample/raycast.rb +249 -0
- data/sample/new_sample/readme_sample.txt +27 -0
- data/sample/new_sample/rubima.rb +597 -0
- data/sample/new_sample/ruby.png +0 -0
- data/sample/new_sample/slg.rb +82 -0
- data/sample/new_sample/sprite_animation.rb +133 -0
- data/sample/new_sample/sprite_collision1.rb +216 -0
- data/sample/new_sample/sprite_collision2.rb +93 -0
- data/sample/new_sample/sprite_simple.rb +65 -0
- data/sample/new_sample2/ImageFont.dat +0 -0
- data/sample/new_sample2/ImageFont.dat.png +0 -0
- data/sample/new_sample2/autocall.rb +24 -0
- data/sample/new_sample2/effecttest.rb +136 -0
- data/sample/new_sample2/fibersprite.rb +89 -0
- data/sample/new_sample2/hitrange.rb +133 -0
- data/sample/new_sample2/hlstest.rb +27 -0
- data/sample/new_sample2/mapedit_perlin.rb +291 -0
- data/sample/new_sample2/noise.rb +33 -0
- data/sample/new_sample2/particle.rb +220 -0
- data/sample/new_sample2/readme_sample.txt +29 -0
- data/sample/new_sample2/scenetest.rb +200 -0
- data/sample/new_sample2/scenetest2.rb +120 -0
- data/sample/scroll_sample/map.dat +32 -0
- data/sample/scroll_sample/map.rb +77 -0
- data/sample/scroll_sample/map_sub.dat +32 -0
- data/sample/scroll_sample/mapedit.rb +102 -0
- data/sample/scroll_sample/readme_sample.txt +24 -0
- data/sample/scroll_sample/scroll1.rb +108 -0
- data/sample/scroll_sample/scroll2.rb +149 -0
- data/sample/scroll_sample/scroll3.rb +148 -0
- data/sample/scroll_sample/simple.rb +13 -0
- data/sample/shader_sample/Shader/Flash.rb +93 -0
- data/sample/shader_sample/Shader/RasterScroll.rb +71 -0
- data/sample/shader_sample/Shader/RgssSprite.rb +143 -0
- data/sample/shader_sample/Shader/Transition.rb +108 -0
- data/sample/shader_sample/bgimage/BG00a1_80.jpg +0 -0
- data/sample/shader_sample/bgimage/BG10a_80.jpg +0 -0
- data/sample/shader_sample/bgimage/BG13a_80.jpg +0 -0
- data/sample/shader_sample/bgimage/BG32a.jpg +0 -0
- data/sample/shader_sample/bgimage/BG42a.jpg +0 -0
- data/sample/shader_sample/bgimage/course.png +0 -0
- data/sample/shader_sample/bgimage/image1.png +0 -0
- data/sample/shader_sample/bgimage/world_map2.png +0 -0
- data/sample/shader_sample/fan.rb +53 -0
- data/sample/shader_sample/image/enemy1.png +0 -0
- data/sample/shader_sample/image/enemy2.png +0 -0
- data/sample/shader_sample/image/maptile.png +0 -0
- data/sample/shader_sample/readme_sample.txt +43 -0
- data/sample/shader_sample/rule//343/203/201/343/202/247/343/203/203/343/202/253/343/203/274.png +0 -0
- data/sample/shader_sample/rule//345/217/263/346/270/246/345/267/273/343/201/215.png +0 -0
- data/sample/shader_sample/rule//346/250/252/343/203/226/343/203/251/343/202/244/343/203/263/343/203/211.png +0 -0
- data/sample/shader_sample/sample_blur.rb +112 -0
- data/sample/shader_sample/sample_divide.rb +91 -0
- data/sample/shader_sample/sample_flash.rb +54 -0
- data/sample/shader_sample/sample_lens.rb +65 -0
- data/sample/shader_sample/sample_mapping.rb +50 -0
- data/sample/shader_sample/sample_rasterscroll.rb +48 -0
- data/sample/shader_sample/sample_rgsssprite.rb +41 -0
- data/sample/shader_sample/sample_spehari.rb +50 -0
- data/sample/shader_sample/sample_sphere.rb +66 -0
- data/sample/shader_sample/sample_transition.rb +62 -0
- data/sample/shader_sample/sample_vertexshader.rb +223 -0
- data/sample/shader_sample/sample_wingman.rb +47 -0
- data/sample/shader_sample/turn_transition.rb +74 -0
- metadata +141 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'dxruby'
|
2
|
+
|
3
|
+
module FiberSprite
|
4
|
+
def initialize(x=0,y=0,image=nil)
|
5
|
+
super
|
6
|
+
@fiber = Fiber.new do
|
7
|
+
self.fiber_proc
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def update
|
12
|
+
@fiber.resume
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def wait(t=1)
|
17
|
+
t.times {Fiber.yield}
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_x(x, t=1)
|
21
|
+
t.times {self.x += x;Fiber.yield}
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_y(y, t=1)
|
25
|
+
t.times {self.y += y;Fiber.yield}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Enemy < Sprite
|
30
|
+
include FiberSprite
|
31
|
+
|
32
|
+
@@image = Image.load_tiles("new_sample/image/enemy2.png", 4, 1)
|
33
|
+
|
34
|
+
def self.objects=(ary)
|
35
|
+
@@objects = ary
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize(x=0, y=0)
|
39
|
+
super(x, y, @@image[0])
|
40
|
+
@angle = 90
|
41
|
+
end
|
42
|
+
|
43
|
+
def fire(angle)
|
44
|
+
@@objects << Shot.new(self.x+20, self.y+@@image[0].height/2+20, angle)
|
45
|
+
@@objects << Shot.new(self.x+108, self.y+@@image[0].height/2+20, angle)
|
46
|
+
end
|
47
|
+
|
48
|
+
def fiber_proc
|
49
|
+
loop do
|
50
|
+
fire(@angle)
|
51
|
+
@angle += 15
|
52
|
+
wait 5
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Shot < Sprite
|
58
|
+
@@image = Image.load("new_sample/image/enemyshot2.png")
|
59
|
+
|
60
|
+
def self.objects=(ary)
|
61
|
+
@@objects = ary
|
62
|
+
end
|
63
|
+
|
64
|
+
def initialize(x=0, y=0, angle=0)
|
65
|
+
super(x-@@image.width/2, y-@@image.height/2, @@image)
|
66
|
+
@dx = Math.cos(angle / 180.0 * Math::PI) * 3.5
|
67
|
+
@dy = Math.sin(angle / 180.0 * Math::PI) * 3.5
|
68
|
+
end
|
69
|
+
|
70
|
+
def update
|
71
|
+
self.x += @dx
|
72
|
+
self.y += @dy
|
73
|
+
if self.x < -@@image.width or self.x > 640 or self.y < -@@image.height or self.y > 480
|
74
|
+
vanish
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
objs = []
|
80
|
+
Enemy.objects = objs
|
81
|
+
Shot.objects = objs
|
82
|
+
|
83
|
+
objs << Enemy.new(260,160)
|
84
|
+
|
85
|
+
Window.loop do
|
86
|
+
Sprite.update(objs)
|
87
|
+
Sprite.draw(objs)
|
88
|
+
Sprite.clean(objs)
|
89
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'dxruby'
|
2
|
+
|
3
|
+
module HitRange
|
4
|
+
def draw
|
5
|
+
super
|
6
|
+
if self.visible and self.collision_enable and !self.vanished?
|
7
|
+
if @hitrange_image == nil or @hitrange_collision != self.collision or
|
8
|
+
@hitrange_image_width != self.image.width or
|
9
|
+
@hitrange_image_height != self.image.height
|
10
|
+
|
11
|
+
@hitrange_image_width = self.image.width
|
12
|
+
@hitrange_image_height = self.image.height
|
13
|
+
|
14
|
+
@hitrange_image.dispose if @hitrange_image != nil
|
15
|
+
|
16
|
+
color = [255, 255, 255, 0]
|
17
|
+
color_fill = [100, 255, 255, 0]
|
18
|
+
|
19
|
+
if self.collision == nil
|
20
|
+
@hitrange_collision = nil
|
21
|
+
@hitrange_image = Image.new(self.image.width, self.image.height)
|
22
|
+
@hitrange_image.box_fill(0, 0, @hitrange_image.width-1, @hitrange_image.height-1, color_fill)
|
23
|
+
@hitrange_image.box(0, 0, @hitrange_image.width-1, @hitrange_image.height-1, color)
|
24
|
+
@hitrange_x = @hitrange_y = 0
|
25
|
+
else
|
26
|
+
@hitrange_collision = []
|
27
|
+
self.collision.each do |v|
|
28
|
+
if v === Array
|
29
|
+
@hitrange_collision << v.dup
|
30
|
+
else
|
31
|
+
@hitrange_collision << v
|
32
|
+
end
|
33
|
+
end
|
34
|
+
temp = self.collision
|
35
|
+
temp = [temp] if temp[0].class != Array
|
36
|
+
|
37
|
+
x1 = y1 = 0
|
38
|
+
x2 = y2 = 0
|
39
|
+
temp.each do |col|
|
40
|
+
case col.size
|
41
|
+
when 2 # point
|
42
|
+
x1 = [x1, col[0]].min
|
43
|
+
y1 = [y1, col[1]].min
|
44
|
+
x2 = [x2, col[0]].max
|
45
|
+
y2 = [y2, col[1]].max
|
46
|
+
when 3 # circle
|
47
|
+
x1 = [x1, col[0] - col[2]].min
|
48
|
+
y1 = [y1, col[1] - col[2]].min
|
49
|
+
x2 = [x2, col[0] + col[2]].max
|
50
|
+
y2 = [y2, col[1] + col[2]].max
|
51
|
+
when 4 # box
|
52
|
+
x1 = [x1, col[0], col[2]].min
|
53
|
+
y1 = [y1, col[1], col[3]].min
|
54
|
+
x2 = [x2, col[0], col[2]].max
|
55
|
+
y2 = [y2, col[1], col[3]].max
|
56
|
+
when 6 # triangle
|
57
|
+
x1 = [x1, col[0], col[2], col[4]].min
|
58
|
+
y1 = [y1, col[1], col[3], col[5]].min
|
59
|
+
x2 = [x2, col[0], col[2], col[4]].max
|
60
|
+
y2 = [y2, col[1], col[3], col[5]].max
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
@hitrange_image = Image.new(x2 - x1 + 1, y2 - y1 + 1)
|
65
|
+
@hitrange_x = x = x1
|
66
|
+
@hitrange_y = y = y1
|
67
|
+
|
68
|
+
temp.each do |col|
|
69
|
+
case col.size
|
70
|
+
when 2 # point
|
71
|
+
@hitrange_image[col[0] - x, col[1] - y] = color
|
72
|
+
when 3 # circle
|
73
|
+
@hitrange_image.circle_fill(col[0] - x, col[1] - y, col[2], color_fill)
|
74
|
+
@hitrange_image.circle(col[0] - x, col[1] - y, col[2], color)
|
75
|
+
when 4 # box
|
76
|
+
@hitrange_image.box_fill(col[0] - x, col[1] - y, col[2] - x, col[3] - y, color_fill)
|
77
|
+
@hitrange_image.box(col[0] - x, col[1] - y, col[2] - x, col[3] - y, color)
|
78
|
+
when 6 # triangle
|
79
|
+
@hitrange_image.triangle_fill(col[0] - x, col[1] - y, col[2] - x, col[3] - y, col[4] - x, col[5] - y, color_fill)
|
80
|
+
@hitrange_image.triangle(col[0] - x, col[1] - y, col[2] - x, col[3] - y, col[4] - x, col[5] - y, color)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
hash = {}
|
88
|
+
if self.collision_sync
|
89
|
+
hash[:scale_x] = self.scale_x
|
90
|
+
hash[:scale_y] = self.scale_y
|
91
|
+
hash[:center_x] = self.center_x - @hitrange_x
|
92
|
+
hash[:center_y] = self.center_y - @hitrange_y
|
93
|
+
hash[:angle] = self.angle
|
94
|
+
end
|
95
|
+
hash[:z] = self.z + 1
|
96
|
+
|
97
|
+
ox = oy = 0
|
98
|
+
if self.offset_sync
|
99
|
+
ox = self.center_x
|
100
|
+
oy = self.center_y
|
101
|
+
end
|
102
|
+
|
103
|
+
target = self.target ? self.target : Window
|
104
|
+
|
105
|
+
target.draw_ex(self.x - ox + @hitrange_x, self.y - oy + @hitrange_y, @hitrange_image, hash)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
if __FILE__ == $0
|
113
|
+
class TestSprite < Sprite
|
114
|
+
include HitRange
|
115
|
+
end
|
116
|
+
|
117
|
+
s = TestSprite.new(100,100)
|
118
|
+
s.image = Image.new(100,100,C_BLUE)
|
119
|
+
s.offset_sync=true
|
120
|
+
s.center_x = 0
|
121
|
+
s.center_y = 0
|
122
|
+
|
123
|
+
y = 90
|
124
|
+
Window.loop do
|
125
|
+
y += Input.y
|
126
|
+
s.collision = [10,10,90,0,50,y]
|
127
|
+
s.angle += 1
|
128
|
+
s.draw
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'dxruby'
|
2
|
+
|
3
|
+
image = Image.load("./shader_sample/bgimage/BG10a_80.jpg")
|
4
|
+
Window.width, Window.height = 800, 600
|
5
|
+
Window.mag_filter = TEXF_POINT
|
6
|
+
|
7
|
+
hue = 0
|
8
|
+
luminance = 0
|
9
|
+
saturation = 0
|
10
|
+
|
11
|
+
Window.loop do
|
12
|
+
hue += Input.y*5
|
13
|
+
saturation += Input.x
|
14
|
+
if Input.key_down?(K_Z)
|
15
|
+
luminance -= 1
|
16
|
+
end
|
17
|
+
if Input.key_down?(K_X)
|
18
|
+
luminance += 1
|
19
|
+
end
|
20
|
+
|
21
|
+
img = image.change_hls(hue, luminance, saturation)
|
22
|
+
img.delayed_dispose
|
23
|
+
Window.draw(0,0,img)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,291 @@
|
|
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
|
+
Image.perlin_seed(1.hash)
|
75
|
+
|
76
|
+
32.times do |y|
|
77
|
+
32.times do |x|
|
78
|
+
c = Image.octave_perlin_noise(x / 32.0, y / 32.0, 20.5, 8, 0.8)
|
79
|
+
t = ((c-0.5) * 60 + 6).to_i
|
80
|
+
takasa[y][x] = t
|
81
|
+
map[y][x] = t < 4 ? 4 : (t > 7 ? 3 : (t == 4 ? 4 : 1))
|
82
|
+
map[y][x] = t == 7 ? 2 : map[y][x]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# 絵のデータを作る
|
87
|
+
mapimage = Array.new(5) {Image.new(32, 32)}
|
88
|
+
for i in 0..7 do # ひし形に地面を描く
|
89
|
+
mapimage[0].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [100, 100, 200]) # 水
|
90
|
+
mapimage[0].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [100, 100, 200])
|
91
|
+
mapimage[0][15 - i * 2, i + 16] = [0, 0, 0]
|
92
|
+
mapimage[0][16 + i * 2, i + 16] = [0, 0, 0]
|
93
|
+
for j in 1..3 do
|
94
|
+
mapimage[j].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [50, 200, 50]) # 平地
|
95
|
+
mapimage[j].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [50, 200, 50])
|
96
|
+
mapimage[j][15 - i * 2, i + 16] = [0, 0, 0]
|
97
|
+
mapimage[j][16 + i * 2, i + 16] = [0, 0, 0]
|
98
|
+
end
|
99
|
+
mapimage[4].line(15 - i * 2, i + 16, 16 + i * 2, i + 16, [200, 200, 150]) # 砂地
|
100
|
+
mapimage[4].line(15 - i * 2, 31 - i, 16 + i * 2, 31 - i, [200, 200, 150])
|
101
|
+
mapimage[4][15 - i * 2, i + 16] = [0, 0, 0]
|
102
|
+
mapimage[4][16 + i * 2, i + 16] = [0, 0, 0]
|
103
|
+
end
|
104
|
+
mapimage[2].boxFill(13, 16, 18, 26, [200, 50, 50]) # 木
|
105
|
+
mapimage[2].line(13, 16, 13, 26, [0, 0, 0])
|
106
|
+
mapimage[2].line(18, 16, 18, 26, [0, 0, 0])
|
107
|
+
mapimage[2].circleFill(16, 8, 8, [0, 255, 0])
|
108
|
+
mapimage[2].circle(16, 8, 8, [0, 0, 0])
|
109
|
+
for i in 1..24 do # 山
|
110
|
+
mapimage[3].line(15 - i*2/4, i, 16 + i*2/4, i, [200, 100, 100])
|
111
|
+
mapimage[3][15 - i*2/4, i] = [0, 0, 0]
|
112
|
+
mapimage[3][16 + i*2/4, i] = [0, 0, 0]
|
113
|
+
end
|
114
|
+
# 地面のサイド画像を作る
|
115
|
+
sideimage = Array.new(5) {Image.new(32, 16)}
|
116
|
+
for i in 0..15 do
|
117
|
+
sideimage[0].line(i, i / 2, i, i / 2 + 8, [60, 60, 180]) # 水
|
118
|
+
sideimage[0].line(31 - i, i / 2, 31 - i, i / 2 + 8, [130, 130, 200])
|
119
|
+
for j in 1..3 do
|
120
|
+
sideimage[j].line(i, i / 2, i, i / 2 + 8, [40, 150, 40]) # 水以外
|
121
|
+
sideimage[j].line(31 - i, i / 2, 31 - i, i / 2 + 8, [100, 220, 100])
|
122
|
+
end
|
123
|
+
sideimage[4].line(i, i / 2, i, i / 2 + 8, [150, 150, 120]) # 砂地
|
124
|
+
sideimage[4].line(31 - i, i / 2, 31 - i, i / 2 + 8, [220, 220, 170])
|
125
|
+
end
|
126
|
+
wakuimage = Image.new(36, 36, [255, 255, 255]). # 選択枠
|
127
|
+
boxFill(2, 2, 33, 33, [0, 0, 0])
|
128
|
+
blackimage = Image.new(128, 480, [0, 0, 0]) # 右側背景
|
129
|
+
|
130
|
+
select = 0
|
131
|
+
|
132
|
+
# クリック位置判定関数
|
133
|
+
def check(x, y, map, takasa)
|
134
|
+
# 手前から検索するために逆順
|
135
|
+
31.downto(0) do |i|
|
136
|
+
31.downto(0) do |j|
|
137
|
+
# ひし形の中にあるかを調べる
|
138
|
+
if ((j * 16 - i * 16 + 176 - x)/2).abs + (j * 8 + i * 8 - takasa[i][j]*8 + 24 - y).abs < 9 then
|
139
|
+
return [i, j]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
return nil
|
144
|
+
end
|
145
|
+
|
146
|
+
# メインループ
|
147
|
+
Window.loop do
|
148
|
+
|
149
|
+
# マウスクリック
|
150
|
+
if Input.mouseDown?(M_LBUTTON) or Input.mouseDown?(M_RBUTTON) then
|
151
|
+
x, y = Input.mousePosX, Input.mousePosY
|
152
|
+
if x >= 512 then # 右のほうなら
|
153
|
+
for i in 0..mapimage.size-1
|
154
|
+
if x >= 560 and x < 592 and y >= i * 64 + 64 and y < i * 64 + 96 then
|
155
|
+
select = i
|
156
|
+
break
|
157
|
+
end
|
158
|
+
end
|
159
|
+
else # 左のほうなら
|
160
|
+
if x > 0 and y > 0 and y < 480 then
|
161
|
+
if Input.keyDown?(K_LSHIFT) then
|
162
|
+
if Input.mousePush?(M_LBUTTON) then # シフト左クリックで地面を上げる
|
163
|
+
temp = check(x, y, map, takasa)
|
164
|
+
if temp != nil then
|
165
|
+
takasa[temp[0]][temp[1]] += 1 if takasa[temp[0]][temp[1]] < 10
|
166
|
+
end
|
167
|
+
end
|
168
|
+
if Input.mousePush?(M_RBUTTON) then # シフト右クリックで地面を下げる
|
169
|
+
temp = check(x, y, map, takasa)
|
170
|
+
if temp != nil then
|
171
|
+
takasa[temp[0]][temp[1]] -= 1 if takasa[temp[0]][temp[1]] > 0
|
172
|
+
end
|
173
|
+
end
|
174
|
+
else
|
175
|
+
if Input.mouseDown?(M_LBUTTON) then # 左クリックはマップチップセット
|
176
|
+
temp = check(x, y, map, takasa)
|
177
|
+
if temp != nil then
|
178
|
+
map[temp[0]][temp[1]] = select
|
179
|
+
end
|
180
|
+
end
|
181
|
+
if Input.mouseDown?(M_RBUTTON) then # 右クリックでスポイト機能
|
182
|
+
temp = check(x, y, map, takasa)
|
183
|
+
if temp != nil then
|
184
|
+
select = map[temp[0]][temp[1]]
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
# カーソルキーの左右
|
193
|
+
if Input.keyPush?(K_RIGHT) then # 右回転
|
194
|
+
map = map.transpose
|
195
|
+
takasa = takasa.transpose
|
196
|
+
map.each do |d|
|
197
|
+
d.reverse!
|
198
|
+
end
|
199
|
+
takasa.each do |d|
|
200
|
+
d.reverse!
|
201
|
+
end
|
202
|
+
end
|
203
|
+
if Input.keyPush?(K_LEFT) then # 左回転
|
204
|
+
3.times do
|
205
|
+
map = map.transpose
|
206
|
+
takasa = takasa.transpose
|
207
|
+
map.each do |d|
|
208
|
+
d.reverse!
|
209
|
+
end
|
210
|
+
takasa.each do |d|
|
211
|
+
d.reverse!
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
# マップ全体描画
|
217
|
+
for i in 0..30 do
|
218
|
+
for j in 0..30 do
|
219
|
+
z = 0
|
220
|
+
tmp = takasa[i][j]
|
221
|
+
if takasa[i][j+1] < tmp or takasa[i+1][j] < tmp then
|
222
|
+
tmp2 = takasa[i][j+1] > takasa[i+1][j] ? takasa[i+1][j] : takasa[i][j+1]
|
223
|
+
z = tmp2 * 8
|
224
|
+
(tmp - tmp2).times do # 高さ分、サイド画像を描画するループ
|
225
|
+
Window.draw(j * 16 - i * 16 + 160, j * 8 + i * 8 - z + 16, sideimage[map[i][j]])
|
226
|
+
z = z + 8
|
227
|
+
end
|
228
|
+
else
|
229
|
+
z = takasa[i][j] * 8
|
230
|
+
end
|
231
|
+
Window.draw(j * 16 - i * 16 + 160, j * 8 + i * 8 - z, mapimage[map[i][j]])
|
232
|
+
if takasa[i][j] < 4
|
233
|
+
Window.draw_alpha(j * 16 - i * 16 + 160, j * 8 + i * 8 - 32, mapimage[0], 192)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
for i in 0..31 do
|
238
|
+
z = 0
|
239
|
+
takasa[i][31].times do # 高さ分、サイド画像を描画するループ
|
240
|
+
Window.draw(31 * 16 - i * 16 + 160, 31 * 8 + i * 8 - z + 16, sideimage[map[i][31]])
|
241
|
+
z = z + 8
|
242
|
+
end
|
243
|
+
Window.draw(31 * 16 - i * 16 + 160, 31 * 8 + i * 8 - z, mapimage[map[i][31]])
|
244
|
+
if takasa[i][31] < 4
|
245
|
+
Window.draw_alpha(31 * 16 - i * 16 + 160, 31 * 8 + i * 8 - 32, mapimage[0], 192)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
for j in 0..31 do
|
249
|
+
z = 0
|
250
|
+
takasa[31][j].times do # 高さ分、サイド画像を描画するループ
|
251
|
+
Window.draw(j * 16 - 31 * 16 + 160, j * 8 + 31 * 8 - z + 16, sideimage[map[31][j]])
|
252
|
+
z = z + 8
|
253
|
+
end
|
254
|
+
Window.draw(j * 16 - 31 * 16 + 160, j * 8 + 31 * 8 - z, mapimage[map[31][j]])
|
255
|
+
if takasa[31][j] < 4
|
256
|
+
Window.draw_alpha(j * 16 - 31 * 16 + 160, j * 8 + 31 * 8 - 32, mapimage[0], 192)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
# 右側背景描画
|
261
|
+
Window.draw(512, 0, blackimage)
|
262
|
+
|
263
|
+
# 選択枠描画
|
264
|
+
Window.draw(558, select * 64 + 62, wakuimage)
|
265
|
+
|
266
|
+
# マップチップ描画
|
267
|
+
mapimage.each_with_index do |m, i|
|
268
|
+
Window.draw(560, i * 64 + 64, m)
|
269
|
+
end
|
270
|
+
|
271
|
+
# 画面データクリア
|
272
|
+
if Input.keyPush?(K_C) then
|
273
|
+
map = Array.new(32) { [1] * 32 }
|
274
|
+
takasa = Array.new(32) { [3] * 32 }
|
275
|
+
end
|
276
|
+
|
277
|
+
# マップデータ出力
|
278
|
+
if Input.keyPush?(K_ESCAPE) then
|
279
|
+
s1 = "map=[\n"
|
280
|
+
s2 = "takasa=[\n"
|
281
|
+
for i in 0..30 do
|
282
|
+
s1 = s1 + map[i].inspect + ",\n"
|
283
|
+
s2 = s2 + takasa[i].inspect + ",\n"
|
284
|
+
end
|
285
|
+
s1 = s1 + map[31].inspect + "\n]\n"
|
286
|
+
s2 = s2 + takasa[31].inspect + "\n]\n"
|
287
|
+
print s1
|
288
|
+
print s2
|
289
|
+
break
|
290
|
+
end
|
291
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'dxruby'
|
2
|
+
|
3
|
+
Window.width = 300
|
4
|
+
Window.height = 300
|
5
|
+
|
6
|
+
bg = Image.new(300,300,C_BLUE)
|
7
|
+
image = Image.new(300,900)
|
8
|
+
repeat_x = 3
|
9
|
+
repeat_y = 9
|
10
|
+
octave = 5
|
11
|
+
subsistence = 0.4
|
12
|
+
w = 1/image.width.to_f*repeat_x
|
13
|
+
h = 1/image.height.to_f*repeat_y
|
14
|
+
|
15
|
+
Image.perlin_seed(1.hash)
|
16
|
+
|
17
|
+
image.height.times do |y|
|
18
|
+
image.width.times do |x|
|
19
|
+
c = (Image.octave_perlin_noise(x*w,
|
20
|
+
y*h,
|
21
|
+
1, octave, subsistence, repeat_x, repeat_y) * 255 - 70) * 2.2
|
22
|
+
image[x, y] = [c>255?255:c, 255, 255, 255] if c>0
|
23
|
+
end
|
24
|
+
end
|
25
|
+
y = 0
|
26
|
+
Window.loop do
|
27
|
+
Window.draw(0,0,bg)
|
28
|
+
Window.draw_tile(0,0,[[0]], [image], nil, y, nil, nil)
|
29
|
+
y-=5
|
30
|
+
break if Input.key_push?(K_ESCAPE)
|
31
|
+
end
|
32
|
+
|
33
|
+
|