Game Development Reference
In-Depth Information
self
, media_path(
'ground.png'
),
128
,
128
,
true
)
65
@sand
=
tiles
[0]
66
@grass
=
tiles
[8]
67
@water
=
Gosu
::
Image
.
new(
68
self
, media_path(
'water.png'
),
true
)
69
70
end
71
72
def
tiles_x
73
count
=
(
WIDTH
/
(
TILE_SIZE
*
@zoom
))
.
ceil
+ 1
74
[
count,
MAP_WIDTH
].
min
75
end
76
77
def
tiles_y
78
count
=
(
HEIGHT
/
(
TILE_SIZE
*
@zoom
))
.
ceil
+ 1
79
[
count,
MAP_HEIGHT
].
min
80
end
81
82
def
generate_map
83
noises
=
Perlin
::
Noise
.
new(
2
)
84
contrast
=
Perlin
::
Curve
.
contrast(
85
Perlin
::
Curve
::
CUBIC
,
2
)
86
map
=
{}
87
MAP_WIDTH
.
times
do
|
x
|
88
map
[
x
] =
{}
89
MAP_HEIGHT
.
times
do
|
y
|
90
n
=
noises
[
x
* 0.1
, y
* 0.1]
91
n
=
contrast
.
call(n)
92
map
[
x
][
y
] =
choose_tile(n)
93
end
94
end
95
map
96
end
97
98
def
choose_tile
(val)
99
case
val
100
when
0.0.
.
0.3
# 30% chance
101
@water
102
when
0.3.
.
0.45
# 15% chance, water edges
103
@sand
104
else
# 55% chance
105
@grass
106
end
107
end
108
109
end
110