texugo-engine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,65 @@
1
+ require_relative 'shop'
2
+
3
+ class Player
4
+ attr_accessor :name, :strength, :endurance, :agility, :intelligence, :life, :magic, :level, :experience, :inventory, :spells, :armour, :weapon, :gold, :area, :position, :maps, :party, :visited
5
+
6
+ def initialize (name, strength, endurance, agility, intelligence, level = 1, experience = 0, gold = 0)
7
+ @name = name
8
+ @strength = strength
9
+ @endurance = endurance
10
+ @agility = agility
11
+ @intelligence = intelligence
12
+ @life = endurance * 10
13
+ @magic = intelligence * 3
14
+ @experience = experience
15
+ @level = level
16
+ @inventory = ['potion']
17
+ @spells = ['fire']
18
+ @weapon = []
19
+ @armour = []
20
+ @gold = gold
21
+ @area = []
22
+ @position = []
23
+ @maps = []
24
+ @party = []
25
+ @visited = []
26
+ end
27
+
28
+ def armour_rating
29
+ initial_rating = 0
30
+ self.armour.each do |armour|
31
+ initial_rating += (armour.rating)
32
+ end
33
+ return initial_rating
34
+ end
35
+
36
+ def attribute
37
+ {:strength => strength, :endurance => endurance, :agility => agility, :intelligence => intelligence}.each do |attribute, value|
38
+ puts 'Your ' + attribute.to_s.capitalize + ' is ' + value.to_s
39
+ end
40
+ end
41
+ end
42
+
43
+
44
+
45
+ def experience(player, exp)
46
+ player.exp += exp
47
+ end
48
+
49
+ def level_up?(player)
50
+ if player.experience >= 50 *player.level * player.level
51
+ player.level += 1
52
+ player.strength += 1
53
+ player.endurance += 1
54
+ player.agility += 1
55
+ player.intelligence += 1
56
+ puts ''
57
+ puts "#{player.name} LEVEL UP!"
58
+ puts''
59
+ if player == $player
60
+ player.attribute
61
+ player.life = player.endurance * 10
62
+ player.magic = player.intelligence * 3
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,120 @@
1
+ require_relative 'commands'
2
+ require_relative 'timer'
3
+ require_relative 'monsters'
4
+
5
+ def rand_monster
6
+ roll = (rand($player.level * 2) + 1)
7
+ return Ghoul.new if roll <= 2
8
+ return Spector.new if roll > 2 && roll <= 4
9
+ return Imp.new if roll > 4 && roll <= 6
10
+ return Orc.new if roll > 6 && roll <= 8
11
+ return Troll.new if roll > 8 && roll <= 10
12
+ return Siren.new if roll > 10 && roll <= 12
13
+ return Undead.new if roll > 12
14
+ end
15
+
16
+
17
+ def fight(monster = rand_monster, player = $player)
18
+ @monster = monster
19
+ action = ''
20
+ puts''
21
+ puts @monster.name.to_s + ' Approaches'
22
+ puts ''
23
+
24
+ puts @monster.name.to_s + "'s life is " + @monster.life.to_s
25
+ puts 'Your life is ' + player.life.to_s
26
+ puts 'You have ' + player.magic.to_s + ' magic'
27
+ puts''
28
+ until @monster.life <= 0
29
+ break if player.life <= 0
30
+ puts''
31
+ timer
32
+ action = ''
33
+ while true
34
+ puts 'What would you like to do?'
35
+ action = gets.chomp
36
+ if Commands_fight.include? action
37
+ send(action)
38
+ break unless action == 'inventory'
39
+ else puts 'please enter a recognized command'
40
+ end
41
+ end
42
+ break if @monster.life <= 0
43
+ timer
44
+ if player.party.length > 0
45
+ player.party.each do |char|
46
+ if (char.life != 0) && (char.life < (char.endurance*2)) && (char.magic >= char.intelligence)
47
+ puts "#{char.name} casts heal."
48
+ heal(char)
49
+ puts ''
50
+ elsif char.life == 0
51
+ break
52
+ else
53
+ hit(char, @monster)
54
+ end
55
+ end
56
+ end
57
+ break if @monster.life <= 0
58
+ puts''
59
+ timer
60
+ hit_chance = rand(player.party.length + 1)
61
+ if hit_chance == 0
62
+ puts @monster.name.to_s + ' lunges at you!'
63
+ if player.agility * (rand(6) + 1) <= player.agility * 4
64
+ damage = (@monster.strength * (rand(6)+1) - player.armour_rating)
65
+ unless damage < 0
66
+ puts 'and hits you!'
67
+ player.life -= damage
68
+ end
69
+ puts 'Your armour absorbs the blow' if damage <= 0
70
+ else
71
+ puts 'but the swing misses'
72
+ end
73
+ else
74
+ defender = player.party[hit_chance - 1]
75
+ puts @monster.name.to_s + " lunges at #{defender.name}!"
76
+ if defender.agility * (rand(6) + 1) <= defender.agility * 4
77
+ damage = (@monster.strength * (rand(6)+1) - defender.armour_rating)
78
+ unless damage < 0
79
+ puts "and hits #{defender.name}!"
80
+ defender.life -= damage
81
+ end
82
+ puts "#{defender.name}'s armour absorbs the blow" if damage <= 0
83
+ else
84
+ puts 'but the swing misses'
85
+ end
86
+ end
87
+ timer
88
+ puts''
89
+ puts @monster.name.to_s.capitalize + "'s life is " + @monster.life.to_s
90
+ puts ''
91
+ player.party.each do |char|
92
+ puts "#{char.name}'s life is #{char.life}"
93
+ end
94
+ puts 'Your life is ' + player.life.to_s
95
+ puts "You have #{player.magic} magic left"
96
+ break if player.life <=0
97
+ end
98
+ timer
99
+ if @monster.life <= 0
100
+ puts ''
101
+ puts @monster.name.to_s + "'s lifeless body hits the ground with a thud" unless @monster.class == Spector
102
+ puts 'The Spectral form disipates' if @monster.class == Spector
103
+ player.experience += @monster.experience
104
+ puts 'total experience is ' + player.experience.to_s
105
+ puts 'current level is ' + player.level.to_s
106
+ loot
107
+ gold = (rand(4) * (@monster.experience / 3))
108
+ player.gold += gold
109
+ puts 'gained ' + gold.to_s + ' gold'
110
+ puts 'total gold is ' + player.gold.to_s
111
+ level_up?(player)
112
+ player.party.each do |char|
113
+ char.experience += @monster.experience if char.life > 0
114
+ level_up?(char)
115
+ end
116
+ timer
117
+ end
118
+ puts ''
119
+ puts ''
120
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'monsters'
2
+
3
+ class Ridge_dale
4
+ attr_accessor :name, :locations, :visit, :fightchance, :monsters
5
+
6
+ def initialize(name = 'Ridgedale', locations = {}, visit = 0, fight_chance = 8, monsters = 1)
7
+ @name = name
8
+ @locations = locations
9
+ @visit = visit
10
+ @fightchance = fight_chance
11
+ @monsters = monsters
12
+ end
13
+
14
+ def introduction
15
+ end
16
+
17
+ def look
18
+ end
19
+
20
+ def monster
21
+ return Human.new('Mugger')
22
+ end
23
+ end
24
+
25
+ class RidgedaleWeapons
26
+ end
27
+
28
+ class RidgedaleArmour
29
+ end
30
+
31
+ class RidgedaleItems
32
+ end
33
+
34
+ class RidgedaleInn
35
+ end
36
+
37
+ class GrandChurch
38
+ end
39
+
40
+ class RidgedaleTavern
41
+ end
42
+
43
+ Ridgedale = Ridge_dale.new
@@ -0,0 +1,144 @@
1
+ def shop
2
+ puts ''
3
+ puts '=' * 50
4
+ puts 'SHOP'.center(50)
5
+ puts '='*50
6
+ puts 'Welcome Adventurer!'
7
+ timer
8
+
9
+ @items = {'potion' => 50, 'mana' => 70, 'rejuvinate' => 350, 'xpotion' => 150}
10
+ @weapons = {'club' => 50, 'sword' => 150, 'axe' => 400, 'claymore' => 800}
11
+ @spells = {'heal' => 100 , 'holy' => 200, 'flame' => 500}
12
+ @armour = {Hat.name => 200, Leather.name => 500, Gloves.name => 175, Shield.name => 375, Shoes.name => 225}
13
+ def buy
14
+ inventory = [self.weapons, self.items, self.spells, self.armour]
15
+ puts 'What would you like to purchase?'
16
+ puts ''
17
+ puts '-'*10
18
+ puts 'items'.center(10)
19
+ puts '-'*10
20
+ @items.each_key do |key|
21
+ puts key.to_s + ' - ' + @items[key].to_s + ' gold'
22
+ end
23
+ puts '-'*10
24
+ puts 'spells'.center(10)
25
+ puts '-'*10
26
+ @spells.each_key do |key|
27
+ puts key.to_s + ' - ' + @spells[key].to_s + ' gold'
28
+ end
29
+ puts '-'*10
30
+ puts 'weapons'.center(10)
31
+ puts '-'*10
32
+ @weapons.each_key do |key|
33
+ puts "#{key.to_s.upcase} - #{@weapons[key].to_s} gold"
34
+ puts "Damage rating: #{Weapon_id[key].damage.to_s}"
35
+ end
36
+ puts '-'*10
37
+ puts 'armour'
38
+ puts '-'*10
39
+ @armour.each_key do |key|
40
+ puts "#{key.to_s.upcase} - #{@armour[key].to_s} gold"
41
+ puts "Defense rating: #{Armour_id[key].rating.to_s}"
42
+ puts "Armour type: #{Armour_id[key].type.to_s}"
43
+ end
44
+ puts ''
45
+ purchase = ''
46
+ while true
47
+ purchase = gets.chomp
48
+ break if purchase == 'back'
49
+ if(@items.include? purchase) || (@weapons.include? purchase) || (@spells.include? purchase) || (@armour.include? purchase)
50
+ inventory.each do |invtry|
51
+ if (invtry.each_key.include? purchase) && (Player1.gold >= invtry[purchase])
52
+ Player1.inventory << purchase if @items.include? purchase
53
+ Player1.inventory << Weapon_id[purchase] if @weapons.include? purchase
54
+ Player1.inventory << Armour_id[purchase] if @armour.include? purchase
55
+ Player1.spells << purchase if @spells.include? purchase
56
+ Player1.gold -= invtry[purchase]
57
+ elsif (invtry.each_key.include? purchase) && (Player1.gold < invtry[purchase])
58
+ puts 'You do not have enough gold'
59
+ end
60
+ end
61
+ puts ''
62
+ puts 'you have ' + Player1.gold.to_s + ' left.'
63
+ puts ''
64
+ puts 'Would you like anything else?'
65
+ puts ''
66
+ else
67
+ puts 'No such item in inventory'
68
+ end
69
+ end
70
+ end
71
+
72
+ def sell
73
+ sell = ''
74
+ while true
75
+ puts 'what would you like to sell?'
76
+ invtry = []
77
+ Player1.inventory.each do |item|
78
+ unless (item.class == Weapon) || (item.class == Armour)
79
+ invtry << item
80
+ puts item.to_s + ' - ' + (@items[item]/2).to_s
81
+ else (item.class == Weapon) || (item.class == Armour)
82
+ invtry << item.name
83
+ puts item.name.to_s + ' - ' + (@weapons[item.name]/2).to_s if item.class == Weapon
84
+ puts item.name.to_s + ' - ' + (@armour[item.name]/2).to_s if item.class == Armour
85
+ end
86
+ end
87
+ puts ''
88
+ sell = gets.chomp
89
+ puts ''
90
+ break if sell == 'back'
91
+ if (invtry.include? sell) && (@items.has_key? sell)
92
+ Player1.inventory.delete_at(Player1.inventory.index(sell))
93
+ Player1.gold += (@items[sell] / 2)
94
+ elsif (invtry.include? sell) && (@weapons.has_key? sell)
95
+ Player1.inventory.delete_at(Player1.inventory.index(Weapon_id[sell]))
96
+ temp = []
97
+ Player1.inventory.each do |item|
98
+ (temp << item) if (item == Weapon_id[sell])
99
+ end
100
+ Player1.weapon.delete_at 0 if temp.length == 0
101
+ Player1.gold += (@weapons[sell] / 2)
102
+ elsif (invtry.include? sell) && (@armour.has_key? sell)
103
+ Player1.inventory.delete_at(Player1.inventory.index(Armour_id[sell]))
104
+ temp = []
105
+ Player1.inventory.each do |item|
106
+ (temp << item) if (item == Armour_id[sell])
107
+ end
108
+ Player1.armour.delete_at(Player1.armour.index(sell).to_i) if temp.length == 0
109
+ Player1.gold += (@armour[sell] / 2)
110
+ else
111
+ puts 'No such item in your inventory'
112
+ puts ''
113
+ end
114
+ puts ''
115
+ puts 'You now have ' + Player1.gold.to_s + ' gold.'
116
+ end
117
+ end
118
+
119
+ shop_options = ['buy', 'sell']
120
+ response = ''
121
+ while true
122
+ puts 'What would you like to do? (buy or sell)'
123
+ puts ''
124
+ inventory
125
+ puts 'your spells: ' +Player1.spells.to_s
126
+ puts 'your weapon: ' + Player1.weapon[0].name.to_s unless Player1.weapon.length == 0
127
+ puts 'your weapon: ' + Player1.weapon.to_s if Player1.weapon.length == 0
128
+ puts ''
129
+ puts 'Your gold: ' + Player1.gold.to_s
130
+ puts ''
131
+ response = gets.chomp
132
+ puts ''
133
+ break if response == 'leave'
134
+ if shop_options.include? response
135
+ send(response)
136
+ else
137
+ puts 'Please enter a valid option'
138
+ end
139
+
140
+ end
141
+ puts '='*50
142
+ puts ''
143
+ puts '='*50
144
+ end
@@ -0,0 +1,53 @@
1
+
2
+ def fire(offense = $player, defense = @monster)
3
+ puts 'not enough magic' if offense.magic < 3
4
+ damage = offense.intelligence * (rand(6)+ 1)
5
+ if offense.magic >= 3 && (defense.class != Ghoul && defense.class != Undead)
6
+ defense.life -= damage
7
+ offense.magic -= 3
8
+ end
9
+ if offense.magic >= 3 && (defense.class == Ghoul || defense.class == Undead)
10
+ defense.life -= damage * 2
11
+ offense.magic -= 3
12
+ end
13
+ end
14
+
15
+ def heal(user = $player)
16
+ puts 'not enough magic' if user.magic < user.intelligence
17
+ if user.magic >= user.intelligence
18
+ user.life += user.intelligence*user.intelligence*2
19
+ user.magic -= user.intelligence
20
+ end
21
+ if user.life > user.endurance * 10
22
+ user.life = user.endurance * 10
23
+ end
24
+ end
25
+
26
+ def holy(offense = $player, defense = @monster)
27
+ puts 'not enough magic' if offense.magic < 15
28
+ if defense.class == Undead && offense.magic >= 20
29
+ defense.life = (defense.life/3)
30
+ offense.magic -= 20
31
+ elsif defense.class == Bal && offense.magic >= 20
32
+ defense. life -= offense.intelligence * (rand(6)+1) * 3
33
+ else
34
+ puts 'The spell has no effect'
35
+ end
36
+ end
37
+
38
+ def flame(offense = $player, defense = @monster)
39
+ puts 'not enough magic' if offense.magic < 20
40
+ damage = offense.intelligence * (rand(6)+1) * 3
41
+ if offense.magic >= 3 && (defense.class != Ghoul && defense.class != Undead)
42
+ defense.life -= damage
43
+ offense.magic -= 3
44
+ end
45
+ if offense.magic >= 3 && (defense.class == Ghoul || defense.class == Undead)
46
+ defense.life -= damage * 2
47
+ offense.magic -= 3
48
+ end
49
+ end
50
+
51
+ Spells_price = {'heal' => 100 , 'holy' => 200, 'flame' => 500}
52
+
53
+
@@ -0,0 +1,12 @@
1
+ def timer(num=1)
2
+ i = 0
3
+ until i >= num
4
+ g = 0
5
+ h = []
6
+ while g <= 1000
7
+ h << ' ' * (h.length * g)
8
+ g += 1
9
+ end
10
+ i+= 1
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+
2
+ class Weapon
3
+ attr_accessor :name, :damage
4
+
5
+ def initialize (name, damage)
6
+ @name = name
7
+ @damage = damage
8
+ end
9
+ end
10
+
11
+ Club = Weapon.new('club', 5)
12
+ Sword = Weapon.new('sword', 10)
13
+ Axe = Weapon.new('axe', 15)
14
+ Claymore = Weapon.new('claymore',20)
15
+
16
+ Weapon_id = {'club' => Club, 'sword' => Sword , 'axe' => Axe , 'claymore' => Claymore }
17
+ Weapons_price = {'club' => 50, 'sword' => 500, 'axe' => 1000, 'claymore' => 2000}