destiny 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6c5ac7d63dba3be69904a064839ce903ec7c976d
4
+ data.tar.gz: 70e56709b40ad02bf52db4f5a80e5b77cadbeca8
5
+ SHA512:
6
+ metadata.gz: b4df0f854ed16649e87d3a69a67fac8ad6c92f8e161c77b8187834bbfba6d73d87dbf42ec45f96d3d1c5451355df0b11dc4928fb1de561d19f1121e8f07c74e0
7
+ data.tar.gz: be554abc959492b6342d3ade9e8f099596a0154a58b44e86bd000a0bfbb367d8dce68b05290c720a37da0a2fc9833a61283af2f75d2ca7e221201d714c8c9a48
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'destiny'
4
+
5
+ puts # formatting
6
+ puts " " + "_"*43
7
+ puts "| Welcome to the exciting world of Destiny! |"
8
+ puts " " + "-"*43
9
+ puts # formatting
10
+ puts "Selectable options will normally be enclosed in []'s."
11
+ puts "Would you like to start a new game?"
12
+
13
+ GameSelect.new.outcome
14
+ Town.new.choices
15
+
@@ -0,0 +1,105 @@
1
+ require "json"
2
+ require "game_mechanics"
3
+ require "mobs"
4
+ require "places"
5
+
6
+ include GameMechanics
7
+
8
+ def choose_name
9
+ puts #formatting
10
+ puts "Please enter your new character's name:"
11
+ prompt; gets.chomp
12
+ end
13
+
14
+ def read_one_line(file_name, line_number)
15
+ File.open(file_name) do |file|
16
+ current_line = 1
17
+ file.each_line do |line|
18
+ return line.chomp if line_number == current_line
19
+ current_line += 1
20
+ end
21
+ end
22
+ end
23
+
24
+ class GameSelect
25
+ attr_accessor :game_select
26
+
27
+ def initialize default="default"
28
+ #rspec with user input is more tricky, this allows me to test
29
+ @default = default
30
+ return @game_select = @default if @default != "default"
31
+ #restrict input to valid answers, but don't worry about case
32
+ begin
33
+ puts "Please enter [yes] or [no]:"
34
+ prompt; @game_select = STDIN.gets.chomp.downcase
35
+ end while not (@game_select == "yes" or @game_select == "no")
36
+ end
37
+
38
+ def outcome
39
+ if @game_select == "yes"
40
+ # this is purely for rspec
41
+ return "Starting a new game, please answer the following questions:" if @default != "default"
42
+ begin
43
+ puts # formatting
44
+ puts "_"*50
45
+ puts "Starting a new game, please answer the following questions:"
46
+ puts "Whould you like to play as a knight or wizard?"
47
+ puts "[1]. Knight"
48
+ puts "[2]. Wizard"
49
+ prompt; class_choice = gets.chomp
50
+ end while not (class_choice == "1" or class_choice == "2")
51
+ begin
52
+ player_name = choose_name
53
+ puts #formatting
54
+ puts "You have chosen #{player_name} as your character's name. Is this correct?"
55
+ puts "Please enter [yes] to confirm."
56
+ prompt; confirm_name = STDIN.gets.chomp.downcase
57
+ end while not (confirm_name == "yes")
58
+ if class_choice == "1"
59
+ @player = Knight.new
60
+ elsif class_choice == "2"
61
+ @player = Wizard.new
62
+ end
63
+ # Set player name, write attributes to save file, then return player to binary
64
+ @player.name = "#{player_name}"
65
+ save_data
66
+ # Intro for new players
67
+ puts #formatting
68
+ puts "Prepare ye, #{@player.name} for great adventure!"
69
+ puts "Ye are a young #{@player.class} with magnificent deeds ahead of ye!"
70
+ puts # formatting
71
+ @player
72
+ elsif @game_select == "no"
73
+ # for rspec
74
+ return "Loading the existing game." if @default != "default"
75
+ puts # formatting
76
+ puts "Loading the existing game."
77
+ puts # formatting
78
+ @player = load_data
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ class NewGame
85
+ attr_accessor :save_slot, :char_name
86
+
87
+ def initialize new_game
88
+ @new_game = new_game
89
+ end
90
+
91
+ def answer_was game_select="yes"
92
+ @game_select = game_select
93
+ #should probably be a case statement that verifies that only yes, y, no, or n was entered
94
+ # and ignores caps (lower and upper are valid)
95
+ if @game_select == "yes"
96
+ puts # formatting
97
+ puts "Starting a new game, please enter character name:"
98
+ # @character_name = gets
99
+ else
100
+ # Here I will display both save slots with the character names.
101
+ "Please select a game to load:"
102
+ end
103
+ end
104
+
105
+ end
@@ -0,0 +1,94 @@
1
+ module GameMechanics
2
+
3
+ @@save_file = 'lib/save_game.json'
4
+
5
+ def prompt
6
+ print ">> "
7
+ end
8
+
9
+ def save_data
10
+ save_info = {
11
+ role: @player.class,
12
+ cur_hp: @player.cur_hp,
13
+ cur_mana: @player.cur_mana,
14
+ xp: @player.xp,
15
+ lvl: @player.lvl,
16
+ coin: @player.coin,
17
+ name: @player.name
18
+ }
19
+ File.open(@@save_file, "w") do |f|
20
+ f.write(save_info.to_json)
21
+ end
22
+ end
23
+
24
+ def load_data
25
+ load_info = JSON.parse(File.read(@@save_file))
26
+ role = load_info['role']
27
+ if role == "Knight"
28
+ @player = Knight.new
29
+ elsif role == "Wizard"
30
+ @player = Wizard.new
31
+ end
32
+ # Set attributes based off information in load_info
33
+ @player.cur_hp = load_info['cur_hp']
34
+ @player.cur_mana = load_info['cur_mana']
35
+ @player.xp = load_info['xp']
36
+ @player.lvl = load_info['lvl']
37
+ @player.coin = load_info['coin']
38
+ @player.name = load_info['name']
39
+ @player
40
+ # I was trying to do the above assignments with iteration, there has to be a way!
41
+ # load_info.each do |attribute, value|
42
+ # @player.#{attribute} = value unless attribute == "role"
43
+ # end
44
+ end
45
+
46
+ def restore_player
47
+ @player.cur_hp = @player.hp
48
+ @player.cur_mana = @player.mana
49
+ save_data
50
+ end
51
+
52
+ def bar_top
53
+ "_"*25 + " STATS " + "_"*25
54
+ end
55
+
56
+ def stat_bar name, xp, lvl, coin, cur_hp, cur_mana
57
+ "Name: #{name} | XP: #{xp} | Lvl: #{lvl} | Coin: #{coin} | HP: #{cur_hp} | Mana: #{cur_mana}"
58
+ end
59
+
60
+ def bar_low
61
+ "-"*58
62
+ end
63
+
64
+ def dice(sides=6,&block)
65
+ if block_given?
66
+ block.call(rand(1..sides))
67
+ else
68
+ rand(1..sides)
69
+ end
70
+ end
71
+
72
+ def random_encounter
73
+ chance = dice(20)
74
+ case
75
+ when (1..5).include?(chance)
76
+ puts # formatting
77
+ puts "You get the feeling you are being watched..."
78
+ puts # formatting
79
+ when (6..10).include?(chance)
80
+ puts #format
81
+ puts "A small goblin springs from the shadows and attacks!!"
82
+ puts #format
83
+ when (11..15).include?(chance)
84
+ puts #format
85
+ puts "You hear squeeking sounds. BIG squeeking sounds!"
86
+ puts #format
87
+ when (16..20).include?(chance)
88
+ puts # formatting
89
+ puts "You step into a puddle of water and angrily lift your boot out."
90
+ puts # formatting
91
+ end
92
+ end
93
+
94
+ end
@@ -0,0 +1,54 @@
1
+ class Mobs
2
+
3
+ attr_accessor :str, :agi, :int, :dmg, :armor, :hp, :cur_hp, :dodge, :mana, :cur_mana, :xp, :lvl, :coin, :name
4
+
5
+ def initialize(str, agi, int, dmg, armor, hp, cur_hp, dodge, mana, cur_mana, xp, lvl, coin, name="MOB")
6
+ @str = str
7
+ @agi = agi
8
+ @int = int
9
+ @dmg = dmg
10
+ @armor = armor
11
+ @hp = hp
12
+ @cur_hp = cur_hp
13
+ @dodge = dodge
14
+ @mana = mana
15
+ @cur_mana = cur_mana
16
+ @xp = xp
17
+ @lvl = lvl
18
+ @coin = coin
19
+ @name = name
20
+ end
21
+
22
+ end
23
+
24
+ class Knight < Mobs
25
+
26
+ def initialize(str=14, agi=12, int=8, dmg=6, armor=10, hp=8, cur_hp=8, dodge=20, mana=8, cur_mana=8, xp=0, lvl=1, coin=0, name="Knight")
27
+ super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
28
+ end
29
+
30
+ end
31
+
32
+ class Wizard < Mobs
33
+
34
+ def initialize(str=8, agi=10, int=16, dmg=3, armor=4, hp=4, cur_hp=4, dodge=10, mana=24, cur_mana=24, xp=0, lvl=1, coin=0, name="Wizard")
35
+ super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
36
+ end
37
+
38
+ end
39
+
40
+ class Goblin < Mobs
41
+
42
+ def initialize(str=10, agi=10, int=8, dmg=3, armor=6, hp=3, cur_hp=3, dodge=20, mana=2, cur_mana=2, xp=0, lvl=1, coin=0, name="Goblin")
43
+ super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
44
+ end
45
+
46
+ end
47
+
48
+ class GiantRat < Mobs
49
+
50
+ def initialize(str=12, agi=10, int=4, dmg=3, armor=6, hp=3, cur_hp=3, dodge=10, mana=0, cur_mana=0, xp=0, lvl=1, coin=0, name="ROUS")
51
+ super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
52
+ end
53
+
54
+ end
@@ -0,0 +1,96 @@
1
+ # This file will contain the various places the player can go
2
+ # Town, Tavern, Dungeon and options in each
3
+
4
+ class Town
5
+
6
+ def initialize
7
+ # only available as an option in the Dungeon (to return to)
8
+ puts "These things always start the same way and your adventure is no exception..."
9
+ puts "You walk into town, scanning each nook and cranny. Most faces are friendly,"
10
+ puts "some are not..."
11
+ end
12
+
13
+ def choices
14
+ save_file = 'lib/save_game.txt'
15
+ move = 0
16
+ until move == "3"
17
+ begin
18
+ load_data
19
+ puts # formatting
20
+ puts bar_top
21
+ puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
22
+ puts bar_low
23
+ puts # formatting
24
+ puts "Please choose where you will head next:"
25
+ puts "[1]. Ye Old Tavern"
26
+ puts "[2]. Dungeon"
27
+ puts "[3]. Exit game"
28
+ prompt; move = gets.chomp
29
+ end while not (move == "1" or move == "2" or move == "3")
30
+ case
31
+ when move == "1"
32
+ # Put this in Tavern class???
33
+ # also Tavern should restore the cur_hp and cur_mana to max values!
34
+ puts # formatting
35
+ puts "You enter the tavern. The air is thick with smoke, but you find a place"
36
+ puts "near a window and after a bowl of hearty soup and a bit of rest, you feel"
37
+ puts "greatly replenished."
38
+ puts # formatting
39
+ restore_player
40
+ when move == "2"
41
+ Dungeon.new.choices
42
+ when move == "3"
43
+ # This needs to save the players stats before exit
44
+ # Should probably convert the read from file to restore stats to a module
45
+ exit
46
+ end
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ class Tavern
53
+
54
+ # only available as an option in the Town
55
+ # This class will essentially "heal" the player by restoring mana and hp
56
+
57
+ end
58
+
59
+ class Dungeon
60
+
61
+ # can go here from town, will spawn random encounters, etc.
62
+ def initialize
63
+ puts # formatting
64
+ puts "You have entered the dungeon! DUM DUM DUM!!"
65
+ end
66
+
67
+ def choices
68
+ move = 0
69
+ until move == "2"
70
+ begin
71
+ load_data
72
+ puts # formatting
73
+ puts bar_top
74
+ puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
75
+ puts bar_low
76
+ puts # formatting
77
+ puts "Now #{@player.name}, what will you do next?"
78
+ puts "[1]. Go deeper into the dungeon."
79
+ puts "[2]. Return to town."
80
+ prompt; move = gets.chomp
81
+ end while not (move == "1" or move == "2")
82
+ case
83
+ when move == "1"
84
+ puts # formatting
85
+ puts "You walk further into the dark, dank,"
86
+ puts "dirty, dungeon, smirking slightly"
87
+ puts "at your awesome alliteration ability."
88
+ puts # formatting
89
+ random_encounter
90
+ when move == "2"
91
+ return
92
+ end
93
+ end
94
+ end
95
+
96
+ end
@@ -0,0 +1 @@
1
+ {"role":"Wizard","xp":0,"lvl":1,"coin":0,"name":"Gizard"}
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: destiny
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kody Wilson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Role playing game with distinct classes and character development
14
+ email: kodywilson@gmail.com
15
+ executables:
16
+ - destiny
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/destiny
21
+ - lib/destiny.rb
22
+ - lib/game_mechanics.rb
23
+ - lib/mobs.rb
24
+ - lib/places.rb
25
+ - lib/save_game.json
26
+ homepage: http://rubygems.org/gems/destiny
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.2.2
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: text rpg
50
+ test_files: []