mission_game 1.1.1 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/enemy.rb +49 -53
- data/lib/main.rb +142 -142
- data/lib/neworleans.rb +144 -149
- data/lib/player.rb +122 -121
- data/lib/story.rb +38 -42
- data/lib/ui.rb +269 -259
- data/mission_game.rb +41 -43
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d66722df3461198bda49db54f496e0437ec18a3c3e1a05c21e31ef0eca35f40f
|
4
|
+
data.tar.gz: bd28000d24248ce9081869a824cae1bffe7299338db144c31c6efda2230a7080
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06473f5cf90a8de3cad9f83c6b6149074c8588deed51f6df57fcb0eaf9b9c76ebb05de03f7ff93eef7e9ee1a994a61f06f212667bfc4c325efd4474f659635b2
|
7
|
+
data.tar.gz: e93986a7c2eb38dd12fe6e81f751de0da6c071f75ad6688355850f2bf2d21af747288e313a20777c0385c1930db813442423a7394ab2a48ba535c140d80a6605
|
data/lib/enemy.rb
CHANGED
@@ -4,66 +4,62 @@
|
|
4
4
|
#
|
5
5
|
|
6
6
|
module MISSIONGAME
|
7
|
+
ENEMY_CATALOG = [
|
8
|
+
[name: "Lucien Castle", lives: 3, bonus: 0, str: 3, points: 1],
|
9
|
+
[name: "Klaus Mikaelson", lives: 8, bonus: 8, str: 4, points: 10],
|
10
|
+
[name: "Damon Salvatore", lives: 5, bonus: 0, str: 4, points: 7],
|
11
|
+
[name: "Mikael", lives: 3, bonus: 2, str: 4, points: 6],
|
12
|
+
[name: "Taylor Lockwood", lives: 4, bonus: 0, str: 4, points: 2],
|
13
|
+
[name: "Marcel Gerard", lives: 7, bonus: 3, str: 5, points: 5],
|
14
|
+
[name: "Dahlia", lives: 2, bonus: 6, str: 1, points: 2],
|
15
|
+
[name: "The Hollow", lives: 5, bonus: 0, str: 4, points: 3],
|
16
|
+
[name: "Celeste Dubois", lives: 3, bonus: 10, str: 2, points: 5]
|
17
|
+
]
|
7
18
|
|
8
|
-
|
9
|
-
[:name => "Lucien Castle", :lives => 3, :bonus => 0, :str => 3, :points => 1],
|
10
|
-
[:name => "Klaus Mikaelson", :lives => 8, :bonus => 8, :str => 4, :points => 10],
|
11
|
-
[:name => "Damon Salvatore", :lives => 5, :bonus => 0, :str => 4, :points => 7],
|
12
|
-
[:name => "Mikael", :lives => 3, :bonus => 2, :str => 4, :points => 6],
|
13
|
-
[:name => "Taylor Lockwood", :lives => 4, :bonus => 0, :str => 4, :points => 2],
|
14
|
-
[:name => "Marcel Gerard", :lives => 7, :bonus => 3, :str => 5, :points => 5],
|
15
|
-
[:name => "Dahlia", :lives => 2, :bonus => 6, :str => 1, :points => 2],
|
16
|
-
[:name => "The Hollow", :lives => 5, :bonus => 0, :str => 4, :points => 3],
|
17
|
-
[:name => "Celeste Dubois", :lives => 3, :bonus => 10, :str => 2, :points => 5]
|
18
|
-
]
|
19
|
+
PLAYER_DEAD = "PLAYER_DEAD"
|
19
20
|
|
20
|
-
|
21
|
+
class Enemy
|
22
|
+
attr_accessor :name
|
23
|
+
attr_accessor :lives
|
24
|
+
attr_accessor :bonus
|
25
|
+
attr_accessor :str
|
26
|
+
attr_accessor :int
|
27
|
+
attr_accessor :points
|
21
28
|
|
22
|
-
|
29
|
+
def initialize(args = nil)
|
30
|
+
# Pick a random enemy
|
31
|
+
selected_enemy = ENEMY_CATALOG.sample[0]
|
32
|
+
@name = selected_enemy[:name]
|
33
|
+
@lives = selected_enemy[:lives] + rand(0..3)
|
34
|
+
@bonus = selected_enemy[:bonus] + rand(0..3)
|
35
|
+
@str = selected_enemy[:str]
|
36
|
+
@points = selected_enemy[:points]
|
37
|
+
@int = rand(2..6)
|
38
|
+
end
|
23
39
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# Pick a random enemy
|
33
|
-
selected_enemy = ENEMY_CATALOG.sample[0]
|
34
|
-
@name = selected_enemy[:name]
|
35
|
-
@lives = selected_enemy[:lives] + rand(0..3)
|
36
|
-
@bonus = selected_enemy[:bonus] + rand(0..3)
|
37
|
-
@str = selected_enemy[:str]
|
38
|
-
@points = selected_enemy[:points]
|
39
|
-
@int = rand(2..6)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Enemy attacks player
|
43
|
-
def attack(args)
|
44
|
-
enemy = self
|
45
|
-
player = args[:player]
|
46
|
-
|
47
|
-
# Does the enemy even hit the player?
|
48
|
-
str_diff = (enemy.str - player.str) * 2
|
49
|
-
hit_chance = rand(1...100) + str_diff
|
40
|
+
# Enemy attacks player
|
41
|
+
def attack(args)
|
42
|
+
enemy = self
|
43
|
+
player = args[:player]
|
44
|
+
|
45
|
+
# Does the enemy even hit the player?
|
46
|
+
str_diff = (enemy.str - player.str) * 2
|
47
|
+
hit_chance = rand(1...100) + str_diff
|
50
48
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
49
|
+
if hit_chance > 30
|
50
|
+
# Determine value of the attack
|
51
|
+
attack_value = rand(1...player.str)
|
52
|
+
print enemy.name.light_red + " hits you for " +
|
53
|
+
attack_value.to_s.light_yellow + " damage(s)!\n"
|
54
|
+
if attack_value > player.lives
|
55
|
+
return PLAYER_DEAD
|
56
|
+
else
|
57
|
+
return attack_value
|
58
|
+
end
|
57
59
|
else
|
58
|
-
|
60
|
+
print enemy.name.light_red + " sees you as an easy prey!\n"
|
59
61
|
end
|
60
|
-
|
61
|
-
print enemy.name.light_red + " sees you as an easy prey!\n"
|
62
|
+
true
|
62
63
|
end
|
63
|
-
return true
|
64
64
|
end
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
65
|
end
|
data/lib/main.rb
CHANGED
@@ -1,142 +1,142 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# Written by Webster AVosa
|
4
|
-
|
5
|
-
MISSIONGAME_VERSION = "1.00"
|
6
|
-
|
7
|
-
# Create a new UI and New Orleans
|
8
|
-
ui = MISSIONGAME::UI.new
|
9
|
-
neworleans = MISSIONGAME::NewOrleans.new
|
10
|
-
|
11
|
-
# Clear the screen and print welcome message
|
12
|
-
ui.clear
|
13
|
-
ui.welcome
|
14
|
-
|
15
|
-
# Ask name
|
16
|
-
name = ui.ask("What is your name?", /\w/)
|
17
|
-
|
18
|
-
# Create a new player
|
19
|
-
player = MISSIONGAME::Player.new({:
|
20
|
-
|
21
|
-
# Show intro story
|
22
|
-
ui.new_line
|
23
|
-
story = MISSIONGAME::Story.new
|
24
|
-
ui.draw_frame({:
|
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
|
-
enemy
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
# If player has reached the Witch
|
137
|
-
if player.x == MISSIONGAME::MAP_WIDTH && player.y == 1
|
138
|
-
ui.draw_frame({:
|
139
|
-
ui.new_line
|
140
|
-
running = false
|
141
|
-
end
|
142
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Written by Webster AVosa
|
4
|
+
|
5
|
+
MISSIONGAME_VERSION = "1.00"
|
6
|
+
|
7
|
+
# Create a new UI and New Orleans
|
8
|
+
ui = MISSIONGAME::UI.new
|
9
|
+
neworleans = MISSIONGAME::NewOrleans.new
|
10
|
+
|
11
|
+
# Clear the screen and print welcome message
|
12
|
+
ui.clear
|
13
|
+
ui.welcome
|
14
|
+
|
15
|
+
# Ask name
|
16
|
+
name = ui.ask("What is your name?", /\w/)
|
17
|
+
|
18
|
+
# Create a new player
|
19
|
+
player = MISSIONGAME::Player.new({name: name, neworleans: neworleans})
|
20
|
+
|
21
|
+
# Show intro story
|
22
|
+
ui.new_line
|
23
|
+
story = MISSIONGAME::Story.new
|
24
|
+
ui.draw_frame({text: story.intro})
|
25
|
+
map = neworleans.get_map({player: player})
|
26
|
+
ui.draw_frame({text: map})
|
27
|
+
|
28
|
+
# MAIN INPUT LOOP
|
29
|
+
running = 1
|
30
|
+
while running
|
31
|
+
ui.new_line
|
32
|
+
|
33
|
+
# Get command from user
|
34
|
+
cmd = ui.get_cmd
|
35
|
+
case cmd
|
36
|
+
when "~"
|
37
|
+
binding.pry
|
38
|
+
when "map", "m"
|
39
|
+
map = neworleans.get_map({player: player})
|
40
|
+
ui.draw_frame({text: map})
|
41
|
+
when "version", "ver"
|
42
|
+
ui.display_version
|
43
|
+
when "clear", "cls", "c"
|
44
|
+
ui.clear
|
45
|
+
when "name", "whoami"
|
46
|
+
ui.display_name({player: player})
|
47
|
+
when "location", "loc", "where", "whereami"
|
48
|
+
ui.show_location({player: player})
|
49
|
+
when "look", "what", "around"
|
50
|
+
neworleans.check_area({player: player, ui: ui, story: story})
|
51
|
+
when "forward", "f"
|
52
|
+
if player.in_combat
|
53
|
+
ui.cannot_travel_combat
|
54
|
+
elsif !player.move(
|
55
|
+
{direction: :up, neworleans: neworleans, ui: ui, story: story}
|
56
|
+
)
|
57
|
+
player.in_combat = 1
|
58
|
+
end
|
59
|
+
when "backward", "b"
|
60
|
+
if player.in_combat
|
61
|
+
ui.cannot_travel_combat
|
62
|
+
elsif !player.move(
|
63
|
+
{direction: :down, neworleans: neworleans, ui: ui, story: story}
|
64
|
+
)
|
65
|
+
player.in_combat = 1
|
66
|
+
end
|
67
|
+
when "left", "l"
|
68
|
+
if player.in_combat
|
69
|
+
ui.cannot_travel_combat
|
70
|
+
elsif !player.move(
|
71
|
+
{direction: :left, neworleans: neworleans, ui: ui, story: story}
|
72
|
+
)
|
73
|
+
player.in_combat = 1
|
74
|
+
end
|
75
|
+
when "right", "r"
|
76
|
+
if player.in_combat
|
77
|
+
ui.cannot_travel_combat
|
78
|
+
elsif !player.move(
|
79
|
+
{direction: :right, neworleans: neworleans, ui: ui, story: story}
|
80
|
+
)
|
81
|
+
player.in_combat = 1
|
82
|
+
end
|
83
|
+
when "attack", "a"
|
84
|
+
if player.in_combat
|
85
|
+
retval = player.attack({enemy: player.current_enemy, ui: ui})
|
86
|
+
if retval == MISSIONGAME::ENEMY_KILLED
|
87
|
+
player.points += player.current_enemy.points
|
88
|
+
|
89
|
+
# Remove enemy from map
|
90
|
+
neworleans.the_map[player.y - 1][player.x - 1] =
|
91
|
+
MISSIONGAME::MAP_KEY_GRASS
|
92
|
+
|
93
|
+
# Take player out of combat
|
94
|
+
player.current_enemy = nil
|
95
|
+
player.in_combat = false
|
96
|
+
end
|
97
|
+
if retval.is_a? Numeric
|
98
|
+
player.current_enemy.lives -= retval
|
99
|
+
retval = player.current_enemy.attack({player: player})
|
100
|
+
player.lives -= retval if retval.is_a? Numeric
|
101
|
+
player.dead = 1 if retval == MISSIONGAME::PLAYER_DEAD
|
102
|
+
end
|
103
|
+
else
|
104
|
+
ui.not_in_combat
|
105
|
+
end
|
106
|
+
when "player", "me", "info", "status", "i"
|
107
|
+
ui.player_info({player: player})
|
108
|
+
when "enemy"
|
109
|
+
player.in_combat ? ui.enemy_info({player: player}) : ui.not_in_combat
|
110
|
+
when "points", "score"
|
111
|
+
ui.points({player: player})
|
112
|
+
when "suicide"
|
113
|
+
player.dead = 1
|
114
|
+
when "help", "h", "?"
|
115
|
+
ui.help
|
116
|
+
when "quit", "q", "exit"
|
117
|
+
ui.quit
|
118
|
+
running = nil
|
119
|
+
else
|
120
|
+
ui.not_found
|
121
|
+
end
|
122
|
+
|
123
|
+
# Is player in combat but has no enemy? Assign one.
|
124
|
+
if player.in_combat && !player.current_enemy
|
125
|
+
enemy = MISSIONGAME::Enemy.new
|
126
|
+
player.current_enemy = enemy
|
127
|
+
ui.enemy_greet({enemy: enemy})
|
128
|
+
end
|
129
|
+
|
130
|
+
# Player is dead!
|
131
|
+
if player.dead == 1
|
132
|
+
ui.player_dead({story: story})
|
133
|
+
exit
|
134
|
+
end
|
135
|
+
|
136
|
+
# If player has reached the Witch
|
137
|
+
if player.x == MISSIONGAME::MAP_WIDTH && player.y == 1
|
138
|
+
ui.draw_frame({text: story.ending})
|
139
|
+
ui.new_line
|
140
|
+
running = false
|
141
|
+
end
|
142
|
+
end
|