mission_game 1.1.1 → 1.1.2
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 +4 -4
- data/lib/enemy.rb +49 -53
- data/lib/main.rb +148 -142
- data/lib/neworleans.rb +144 -149
- data/lib/player.rb +122 -121
- data/lib/story.rb +41 -45
- data/lib/ui.rb +269 -259
- data/mission_game.rb +41 -43
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4a63e6356c3aebf135e66163c4c73f53b776539a7e72023a3c6369bfab7bc99
|
4
|
+
data.tar.gz: ef1708f5f705150abbabfb40a57430036904f4afdbd5c8b6569639767944695e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6afa74551ab65060d42055b034d6796fd4f8a1703e720010e07dfa7f09e6a3b48421865a0bb6408e4c03c31f93833770f572a650786527b9439b83ba5d0455c8
|
7
|
+
data.tar.gz: a53e29573583e890460fd6803001161c7ac589dfb570a70c80bd40fc85589eaa0201b48693a713f7d1f1df7a8309611b0751b5ade68c3367f4a3227f73286e5f
|
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
|
+
return 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,148 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# Written by Webster AVosa
|
4
|
-
|
5
|
-
MISSIONGAME_VERSION =
|
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(
|
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
|
-
running
|
29
|
-
|
30
|
-
|
31
|
-
# Get command from user
|
32
|
-
cmd = ui.get_cmd
|
33
|
-
case cmd
|
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
|
-
if player.
|
138
|
-
ui.
|
139
|
-
|
140
|
-
|
141
|
-
|
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({ 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
|
+
|
26
|
+
# MAIN INPUT LOOP
|
27
|
+
running = 1
|
28
|
+
while running
|
29
|
+
ui.new_line
|
30
|
+
|
31
|
+
# Get command from user
|
32
|
+
cmd = ui.get_cmd
|
33
|
+
case cmd
|
34
|
+
when '~'
|
35
|
+
binding.pry
|
36
|
+
when 'map', 'm'
|
37
|
+
map = neworleans.get_map({ player: player })
|
38
|
+
ui.draw_frame({ text: map })
|
39
|
+
when 'version', 'ver'
|
40
|
+
ui.display_version
|
41
|
+
when 'clear', 'cls'
|
42
|
+
ui.clear
|
43
|
+
when 'name', 'whoami'
|
44
|
+
ui.display_name({ player: player })
|
45
|
+
when 'location', 'loc', 'where', 'whereami'
|
46
|
+
ui.show_location({ player: player })
|
47
|
+
when 'look', 'what', 'around'
|
48
|
+
neworleans.check_area({ player: player, ui: ui, story: story })
|
49
|
+
when 'forward', 'f'
|
50
|
+
unless player.in_combat
|
51
|
+
if !player.move(
|
52
|
+
{ direction: :up, neworleans: neworleans, ui: ui, story: story }
|
53
|
+
)
|
54
|
+
player.in_combat = 1
|
55
|
+
end
|
56
|
+
else
|
57
|
+
ui.cannot_travel_combat
|
58
|
+
end
|
59
|
+
when 'backward', 'b'
|
60
|
+
unless player.in_combat
|
61
|
+
if !player.move(
|
62
|
+
{ direction: :down, neworleans: neworleans, ui: ui, story: story }
|
63
|
+
)
|
64
|
+
player.in_combat = 1
|
65
|
+
end
|
66
|
+
else
|
67
|
+
ui.cannot_travel_combat
|
68
|
+
end
|
69
|
+
when 'left', 'l'
|
70
|
+
unless player.in_combat
|
71
|
+
if !player.move(
|
72
|
+
{ direction: :left, neworleans: neworleans, ui: ui, story: story }
|
73
|
+
)
|
74
|
+
player.in_combat = 1
|
75
|
+
end
|
76
|
+
else
|
77
|
+
ui.cannot_travel_combat
|
78
|
+
end
|
79
|
+
when 'right', 'r'
|
80
|
+
unless player.in_combat
|
81
|
+
if !player.move(
|
82
|
+
{ direction: :right, neworleans: neworleans, ui: ui, story: story }
|
83
|
+
)
|
84
|
+
player.in_combat = 1
|
85
|
+
end
|
86
|
+
else
|
87
|
+
ui.cannot_travel_combat
|
88
|
+
end
|
89
|
+
when 'attack', 'a'
|
90
|
+
if player.in_combat
|
91
|
+
retval = player.attack({ enemy: player.current_enemy, ui: ui })
|
92
|
+
if retval == MISSIONGAME::ENEMY_KILLED
|
93
|
+
player.points += player.current_enemy.points
|
94
|
+
|
95
|
+
# Remove enemy from map
|
96
|
+
neworleans.the_map[player.y - 1][player.x - 1] =
|
97
|
+
MISSIONGAME::MAP_KEY_GRASS
|
98
|
+
|
99
|
+
# Take player out of combat
|
100
|
+
player.current_enemy = nil
|
101
|
+
player.in_combat = false
|
102
|
+
end
|
103
|
+
if retval.is_a? Numeric
|
104
|
+
player.current_enemy.lives -= retval
|
105
|
+
retval = player.current_enemy.attack({ player: player })
|
106
|
+
player.lives -= retval if retval.is_a? Numeric
|
107
|
+
player.dead = 1 if retval == MISSIONGAME::PLAYER_DEAD
|
108
|
+
end
|
109
|
+
else
|
110
|
+
ui.not_in_combat
|
111
|
+
end
|
112
|
+
when 'player', 'me', 'info', 'status', 'i'
|
113
|
+
ui.player_info({ player: player })
|
114
|
+
when 'enemy'
|
115
|
+
player.in_combat ? ui.enemy_info({ player: player }) : ui.not_in_combat
|
116
|
+
when 'points', 'score'
|
117
|
+
ui.points({ player: player })
|
118
|
+
when 'suicide'
|
119
|
+
player.dead = 1
|
120
|
+
when 'help', 'h', '?'
|
121
|
+
ui.help
|
122
|
+
when 'quit', 'q', 'exit'
|
123
|
+
ui.quit
|
124
|
+
running = nil
|
125
|
+
else
|
126
|
+
ui.not_found
|
127
|
+
end
|
128
|
+
|
129
|
+
# Is player in combat but has no enemy? Assign one.
|
130
|
+
if player.in_combat && !player.current_enemy
|
131
|
+
enemy = MISSIONGAME::Enemy.new
|
132
|
+
player.current_enemy = enemy
|
133
|
+
ui.enemy_greet({ enemy: enemy })
|
134
|
+
end
|
135
|
+
|
136
|
+
# Player is dead!
|
137
|
+
if player.dead == 1
|
138
|
+
ui.player_dead({ story: story })
|
139
|
+
exit
|
140
|
+
end
|
141
|
+
|
142
|
+
# If player has reached the Witch
|
143
|
+
if player.x == MISSIONGAME::MAP_WIDTH && player.y == 1
|
144
|
+
ui.draw_frame({ text: story.ending })
|
145
|
+
ui.new_line
|
146
|
+
running = false
|
147
|
+
end
|
148
|
+
end
|