-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsnake.rb
More file actions
146 lines (138 loc) · 4.74 KB
/
snake.rb
File metadata and controls
146 lines (138 loc) · 4.74 KB
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
class Snake
attr_reader :player_dead
def initialize(colliders_name)
@blue_right_anim = Gosu::Image.load_tiles("images/snake_moves_blue_right.png", 32, 32)
@blue_left_anim = Gosu::Image.load_tiles("images/snake_moves_blue_left.png", 32, 32)
@red_right_anim = Gosu::Image.load_tiles("images/snake_moves_red_right.png", 32, 32)
@red_left_anim = Gosu::Image.load_tiles("images/snake_moves_red_left.png", 32, 32)
@height = 32
@width = 32
@speed = 1
@centre_and_top_gap = 0
@centre_and_bottom_gap = 8
@centre_and_left_gap = 6
@centre_and_right_gap = 6
@buffer = 4
@colliders_name = colliders_name
@snake_colliders = Colliders.new("#{@colliders_name}", @buffer, @centre_and_top_gap, @centre_and_bottom_gap, @centre_and_left_gap, @centre_and_right_gap)
@line_ranges = @snake_colliders.calculate_lines
@moving_right = true
@moving_up = true
@move_counter = 1
@frame_speed = 1
@chase = false
end
def warp(x,y)
@x = x + (@width/2)
@y = y + (@height/2)
end
def move(player_x, player_y, eaten_shroom)
@player_x = player_x
@player_y = player_y
@eaten_shroom = eaten_shroom
kill_checker(@player_x, @player_y, @eaten_shroom)
chase_checker(@player_x, @player_y)
collision_checker
if @move_counter == 1
@move_counter = 0
if @chase == false
if @moving_right && @moving_up
@x += @speed
@y -= @speed
if @colliders_name == "snake_blue"
@image = @blue_right_anim[Gosu.milliseconds / 200 % @blue_right_anim.size]
else
@image = @red_right_anim[Gosu.milliseconds / 200 % @red_right_anim.size]
end
elsif @moving_right && @moving_up == false
@x += @speed
@y += @speed
if @colliders_name == "snake_blue"
@image = @blue_right_anim[Gosu.milliseconds / 200 % @blue_right_anim.size]
else
@image = @red_right_anim[Gosu.milliseconds / 200 % @red_right_anim.size]
end
elsif @moving_right == false && @moving_up
@x -= @speed
@y -= @speed
if @colliders_name == "snake_blue"
@image = @blue_left_anim[Gosu.milliseconds / 200 % @blue_left_anim.size]
else
@image = @red_left_anim[Gosu.milliseconds / 200 % @red_left_anim.size]
end
else
@x -= @speed
@y += @speed
if @colliders_name == "snake_blue"
@image = @blue_left_anim[Gosu.milliseconds / 200 % @blue_left_anim.size]
else
@image = @red_left_anim[Gosu.milliseconds / 200 % @red_left_anim.size]
end
end
else
if @x > @player_x
@x -= @speed*2 unless @snake_colliders.left_collision
if @colliders_name == "snake_blue"
@image = @blue_left_anim[Gosu.milliseconds / 200 % @blue_left_anim.size]
else
@image = @red_left_anim[Gosu.milliseconds / 200 % @red_left_anim.size]
end
elsif @x < @player_x
@x += @speed*2 unless @snake_colliders.right_collision
if @colliders_name == "snake_blue"
@image = @blue_right_anim[Gosu.milliseconds / 200 % @blue_right_anim.size]
else
@image = @red_right_anim[Gosu.milliseconds / 200 % @red_right_anim.size]
end
end
if @y > @player_y
@y -= @speed*2 unless @snake_colliders.top_collision
elsif @y < @player_y
@y += @speed*2 unless @snake_colliders.bottom_collision
end
end
else
@move_counter += 1
end
end
def collision_checker
@snake_colliders.top_collision_check(@x, @y, @speed)
@snake_colliders.bottom_collision_check(@x, @y, @speed)
@snake_colliders.right_collision_check(@x, @y, @speed)
@snake_colliders.left_collision_check(@x, @y, @speed)
if @snake_colliders.top_collision then @moving_up = false end
if @snake_colliders.bottom_collision then @moving_up = true end
if @snake_colliders.right_collision then @moving_right = false end
if @snake_colliders.left_collision then @moving_right = true end
end
def chase_checker(player_x, player_y)
@chase_x_range = false
@chase_y_range = false
@player_x = player_x
@player_y = player_y
@line_ranges.each do |line|
x_min = line[:x_range][0]
x_max = line[:x_range][1]
y_min = line[:y_range][0]
y_max = line[:y_range][1]
@chase_x_range = true if @player_x > x_min && @player_x < x_max
@chase_y_range = true if @player_y > y_min && @player_y < y_max
end
@chase_x_range && @chase_y_range ? @chase = true : @chase = false
end
def kill_checker(player_x, player_y, eaten_shroom)
@player_x = player_x
@player_y = player_y
@eaten_shroom = eaten_shroom
if @colliders_name == "snake_red" && Gosu.distance(@x, @y, @player_x, @player_y) < 4 && @eaten_shroom == false
@player_dead = true
elsif @colliders_name == "snake_blue" && Gosu.distance(@x, @y, @player_x, @player_y) < 4 && @eaten_shroom == false
@player_dead = true
#else
#@player_dead = false
end
end
def draw
@image.draw(@x - @width/2, @y - @height/2, 11)
end
end