-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathplayer.rb
224 lines (187 loc) · 18.1 KB
/
player.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
$LOAD_PATH << '.'
require 'gosu'
class Player
attr_accessor :x, :y, :width, :height, :radius, :image_index, :velocity, :vidas, :bomb_limit
def initialize(window)
@x = 127
@y = 118
@width = 16
@height = 14
@radius = 8 # Valor fixo
@velocity = 4
# Indice referente a imagem inicial para o personagem
@image_index = 6
# Divide o sprite em várias imagens diferentes
@images = Gosu::Image::load_tiles('images/sprite_16x26.png', 16, 26)
# Transformar o objeto window em atributo
@window = window
# Quantidade de vidas do personagem
@vidas = 3
# Quantidade de bombas que ele pode colocar
@bomb_limit = 1
# Tiles com os números a serem mostrados na tela
@numbers = Gosu::Image::load_tiles('images/tile_8x14.png', 8, 14)
end
#Draw principal de Player.
#Exibe o personagem sobre o background e nas coordenadas @x e @y
def draw
@images[@image_index].draw(@x - @width / 2, @y - @height / 2, 3)
@numbers[@vidas].draw(184, 6, 3)
end
#Move o personagem para cima e realiza a troca dos seus sprites.
def move_up
@y -= @velocity
@y = 29 + @radius if @y < 29 + @radius #Limitador do movimento para cima
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 35 and @x <= 59 #Limitação do movimento para cima - 1ª Linha 1° bloco
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 67 and @x <= 91 #Limitação do movimento para cima - 1ª Linha 2° bloco
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 99 and @x <= 123 #Limitação do movimento para cima - 1ª Linha 3° bloco
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 131 and @x <= 155 #Limitação do movimento para cima - 1ª Linha 4° bloco
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 163 and @x <= 187 #Limitação do movimento para cima - 1ª Linha 5° bloco
@y += @velocity if @y >= 56 and @y <= 71 and @x >= 195 and @x <= 219 #Limitação do movimento para cima - 1ª Linha 6° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 35 and @x <= 59 #Limitação do movimento para cima - 2ª Linha 1° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 67 and @x <= 91 #Limitação do movimento para cima - 2ª Linha 2° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 99 and @x <= 123 #Limitação do movimento para cima - 2ª Linha 3° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 131 and @x <= 155 #Limitação do movimento para cima - 2ª Linha 4° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 163 and @x <= 187 #Limitação do movimento para cima - 2ª Linha 5° bloco
@y += @velocity if @y >= 88 and @y <= 103 and @x >= 195 and @x <= 219 #Limitação do movimento para cima - 2ª Linha 6° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 35 and @x <= 59 #Limitação do movimento para cima - 3ª Linha 1° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 67 and @x <= 91 #Limitação do movimento para cima - 3ª Linha 2° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 99 and @x <= 123 #Limitação do movimento para cima - 3ª Linha 3° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 131 and @x <= 155 #Limitação do movimento para cima - 3ª Linha 4° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 163 and @x <= 187 #Limitação do movimento para cima - 3ª Linha 5° bloco
@y += @velocity if @y >= 110 and @y <= 135 and @x >= 195 and @x <= 219 #Limitação do movimento para cima - 3ª Linha 6° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 35 and @x <= 59 #Limitação do movimento para cima - 4ª Linha 1° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 67 and @x <= 91 #Limitação do movimento para cima - 4ª Linha 2° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 99 and @x <= 123 #Limitação do movimento para cima - 4ª Linha 3° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 131 and @x <= 155 #Limitação do movimento para cima - 4ª Linha 4° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 163 and @x <= 187 #Limitação do movimento para cima - 4ª Linha 5° bloco
@y += @velocity if @y >= 142 and @y <= 167 and @x >= 195 and @x <= 219 #Limitação do movimento para cima - 4ª Linha 6° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 35 and @x <= 59 #Limitação do movimento para cima - 5ª Linha 1° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 67 and @x <= 91 #Limitação do movimento para cima - 5ª Linha 2° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 99 and @x <= 123 #Limitação do movimento para cima - 5ª Linha 3° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 131 and @x <= 155 #Limitação do movimento para cima - 5ª Linha 4° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 163 and @x <= 187 #Limitação do movimento para cima - 5ª Linha 5° bloco
@y += @velocity if @y >= 174 and @y <= 199 and @x >= 195 and @x <= 219 #Limitação do movimento para cima - 5ª Linha 6° bloco
changeSprite([0, 1, 2])
end
#Move o personagem para baixo e realiza a troca dos seus sprites.
def move_down
@y += @velocity
@y = (@window.height - @radius - 35) if @y > @window.height - @radius - 35 #Limitador do movimento para baixo
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 35 and @x <= 59 #Limitação do movimento para baixo - 1ª Linha 1° bloco
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 67 and @x <= 91 #Limitação do movimento para baixo - 1ª Linha 2° bloco
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 99 and @x <= 123 #Limitação do movimento para baixo - 1ª Linha 3° bloco
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 131 and @x <= 155 #Limitação do movimento para baixo - 1ª Linha 4° bloco
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 163 and @x <= 187 #Limitação do movimento para baixo - 1ª Linha 5° bloco
@y -= @velocity if @y >= 40 and @y <= 56 and @x >= 195 and @x <= 219 #Limitação do movimento para baixo - 1ª Linha 6° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 35 and @x <= 59 #Limitação do movimento para baixo - 2ª Linha 1° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 67 and @x <= 91 #Limitação do movimento para baixo - 2ª Linha 2° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 99 and @x <= 123 #Limitação do movimento para baixo - 2ª Linha 3° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 131 and @x <= 155 #Limitação do movimento para baixo - 2ª Linha 4° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 163 and @x <= 187 #Limitação do movimento para baixo - 2ª Linha 5° bloco
@y -= @velocity if @y >= 72 and @y <= 88 and @x >= 195 and @x <= 219 #Limitação do movimento para baixo - 2ª Linha 6° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 35 and @x <= 59 #Limitação do movimento para baixo - 3ª Linha 1° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 67 and @x <= 91 #Limitação do movimento para baixo - 3ª Linha 2° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 99 and @x <= 123 #Limitação do movimento para baixo - 3ª Linha 3° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 131 and @x <= 155 #Limitação do movimento para baixo - 3ª Linha 4° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 163 and @x <= 187 #Limitação do movimento para baixo - 3ª Linha 5° bloco
@y -= @velocity if @y >= 104 and @y <= 120 and @x >= 195 and @x <= 219 #Limitação do movimento para baixo - 3ª Linha 6° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 35 and @x <= 59 #Limitação do movimento para baixo - 4ª Linha 1° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 67 and @x <= 91 #Limitação do movimento para baixo - 4ª Linha 2° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 99 and @x <= 123 #Limitação do movimento para baixo - 4ª Linha 3° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 131 and @x <= 155 #Limitação do movimento para baixo - 4ª Linha 4° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 163 and @x <= 187 #Limitação do movimento para baixo - 4ª Linha 5° bloco
@y -= @velocity if @y >= 136 and @y <= 152 and @x >= 195 and @x <= 219 #Limitação do movimento para baixo - 4ª Linha 6° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 35 and @x <= 59 #Limitação do movimento para baixo - 5ª Linha 1° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 67 and @x <= 91 #Limitação do movimento para baixo - 5ª Linha 2° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 99 and @x <= 123 #Limitação do movimento para baixo - 5ª Linha 3° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 131 and @x <= 155 #Limitação do movimento para baixo - 5ª Linha 4° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 163 and @x <= 187 #Limitação do movimento para baixo - 5ª Linha 5° bloco
@y -= @velocity if @y >= 168 and @y <= 184 and @x >= 195 and @x <= 219 #Limitação do movimento para baixo - 5ª Linha 6° bloco
changeSprite([6, 7, 8])
end
#Move o personagem para a esquerda e realiza a troca dos seus sprites.
def move_left
@x -= @velocity
@x = 23 + @radius if @x < 23 + @radius #Limitador do movimento para a esquerda
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 35 and @x <= 59 #Limitação do movimento para a esquerda - 1ª Linha 1° bloco
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 67 and @x <= 91 #Limitação do movimento para a esquerda - 1ª Linha 2° bloco
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 99 and @x <= 123 #Limitação do movimento para a esquerda - 1ª Linha 3° bloco
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 131 and @x <= 155 #Limitação do movimento para a esquerda - 1ª Linha 4° bloco
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 163 and @x <= 187 #Limitação do movimento para a esquerda - 1ª Linha 5° bloco
@x += @velocity if @y >= 40 and @y <= 62 and @x >= 195 and @x <= 219 #Limitação do movimento para a esquerda - 1ª Linha 6° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 35 and @x <= 59 #Limitação do movimento para a esquerda - 2ª Linha 1° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 67 and @x <= 91 #Limitação do movimento para a esquerda - 2ª Linha 2° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 99 and @x <= 123 #Limitação do movimento para a esquerda - 2ª Linha 3° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 131 and @x <= 155 #Limitação do movimento para a esquerda - 2ª Linha 4° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 163 and @x <= 187 #Limitação do movimento para a esquerda - 2ª Linha 5° bloco
@x += @velocity if @y >= 72 and @y <= 94 and @x >= 195 and @x <= 219 #Limitação do movimento para a esquerda - 2ª Linha 6° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 35 and @x <= 59 #Limitação do movimento para a esquerda - 3ª Linha 1° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 67 and @x <= 91 #Limitação do movimento para a esquerda - 3ª Linha 2° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 99 and @x <= 123 #Limitação do movimento para a esquerda - 3ª Linha 3° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 131 and @x <= 155 #Limitação do movimento para a esquerda - 3ª Linha 4° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 163 and @x <= 187 #Limitação do movimento para a esquerda - 3ª Linha 5° bloco
@x += @velocity if @y >= 104 and @y <= 126 and @x >= 195 and @x <= 219 #Limitação do movimento para a esquerda - 3ª Linha 6° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 35 and @x <= 59 #Limitação do movimento para a esquerda - 4ª Linha 1° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 67 and @x <= 91 #Limitação do movimento para a esquerda - 4ª Linha 2° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 99 and @x <= 123 #Limitação do movimento para a esquerda - 4ª Linha 3° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 131 and @x <= 155 #Limitação do movimento para a esquerda - 4ª Linha 4° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 163 and @x <= 187 #Limitação do movimento para a esquerda - 4ª Linha 5° bloco
@x += @velocity if @y >= 136 and @y <= 158 and @x >= 195 and @x <= 219 #Limitação do movimento para a esquerda - 4ª Linha 6° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 35 and @x <= 59 #Limitação do movimento para a esquerda - 5ª Linha 1° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 67 and @x <= 91 #Limitação do movimento para a esquerda - 5ª Linha 2° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 99 and @x <= 123 #Limitação do movimento para a esquerda - 5ª Linha 3° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 131 and @x <= 155 #Limitação do movimento para a esquerda - 5ª Linha 4° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 163 and @x <= 187 #Limitação do movimento para a esquerda - 5ª Linha 5° bloco
@x += @velocity if @y >= 168 and @y <= 190 and @x >= 195 and @x <= 219 #Limitação do movimento para a esquerda - 5ª Linha 6° bloco
changeSprite([9, 10, 11])
end
#Move o personagem para a direita e realiza a troca dos seus sprites.
def move_right
@x += @velocity
@x = (@window.width - @radius - 25) if @x > @window.width - @radius - 25 #Limitador do movimento para a direita
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 35 and @x <= 59 #Limitação do movimento para a direita - 1ª Linha 1° bloco
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 67 and @x <= 91 #Limitação do movimento para a direita - 1ª Linha 2° bloco
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 99 and @x <= 123 #Limitação do movimento para a direita - 1ª Linha 3° bloco
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 131 and @x <= 155 #Limitação do movimento para a direita - 1ª Linha 4° bloco
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 163 and @x <= 187 #Limitação do movimento para a direita - 1ª Linha 5° bloco
@x -= @velocity if @y >= 40 and @y <= 62 and @x >= 195 and @x <= 219 #Limitação do movimento para a direita - 1ª Linha 6° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 35 and @x <= 59 #Limitação do movimento para a direita - 2ª Linha 1° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 67 and @x <= 91 #Limitação do movimento para a direita - 2ª Linha 2° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 99 and @x <= 123 #Limitação do movimento para a direita - 2ª Linha 3° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 131 and @x <= 155 #Limitação do movimento para a direita - 2ª Linha 4° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 163 and @x <= 187 #Limitação do movimento para a direita - 2ª Linha 5° bloco
@x -= @velocity if @y >= 72 and @y <= 94 and @x >= 195 and @x <= 219 #Limitação do movimento para a direita - 2ª Linha 6° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 35 and @x <= 59 #Limitação do movimento para a direita - 3ª Linha 1° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 67 and @x <= 91 #Limitação do movimento para a direita - 3ª Linha 2° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 99 and @x <= 123 #Limitação do movimento para a direita - 3ª Linha 3° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 131 and @x <= 155 #Limitação do movimento para a direita - 3ª Linha 4° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 163 and @x <= 187 #Limitação do movimento para a direita - 3ª Linha 5° bloco
@x -= @velocity if @y >= 104 and @y <= 126 and @x >= 195 and @x <= 219 #Limitação do movimento para a direita - 3ª Linha 6° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 35 and @x <= 59 #Limitação do movimento para a direita - 4ª Linha 1° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 67 and @x <= 91 #Limitação do movimento para a direita - 4ª Linha 2° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 99 and @x <= 123 #Limitação do movimento para a direita - 4ª Linha 3° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 131 and @x <= 155 #Limitação do movimento para a direita - 4ª Linha 4° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 163 and @x <= 187 #Limitação do movimento para a direita - 4ª Linha 5° bloco
@x -= @velocity if @y >= 136 and @y <= 158 and @x >= 195 and @x <= 219 #Limitação do movimento para a direita - 4ª Linha 6° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 35 and @x <= 59 #Limitação do movimento para a direita - 5ª Linha 1° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 67 and @x <= 91 #Limitação do movimento para a direita - 5ª Linha 2° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 99 and @x <= 123 #Limitação do movimento para a direita - 5ª Linha 3° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 131 and @x <= 155 #Limitação do movimento para a direita - 5ª Linha 4° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 163 and @x <= 187 #Limitação do movimento para a direita - 5ª Linha 5° bloco
@x -= @velocity if @y >= 168 and @y <= 190 and @x >= 195 and @x <= 219 #Limitação do movimento para a direita - 5ª Linha 6° bloco
changeSprite([3, 4, 5])
end
#Método responsável pela troca de imagens enquanto o player se movimenta.
def changeSprite(indexes)
#Verifica se é a primeira vez que o player aperta para uma determinada direção a partir do sprite atual.
# Se sim, setar o primeiro sprite da direção selecionada.
if @image_index != indexes[0] && @image_index != indexes[1] && @image_index != indexes[2] then @image_index = indexes[0]
#Verifica se já está na última imagem. Enquanto não estiver, ele trocará de sprite.
elsif @image_index < indexes[2] then @image_index += 1
# Verifica se está na última imagem.
# Se sim, retorna para a primeira imagem.
elsif @image_index == indexes[2] then @image_index = indexes[0] end
sleep 0.1 #Deixar a troca de sprite mais lenta
end
end