Skip to content

Instantly share code, notes, and snippets.

@pry0cc
Last active August 29, 2015 14:02
Show Gist options
  • Save pry0cc/f657c5b57fa1251d0528 to your computer and use it in GitHub Desktop.
Save pry0cc/f657c5b57fa1251d0528 to your computer and use it in GitHub Desktop.
class Dice
def initialize(type)
@type = type
end
def roll
case @type
when 4
return rand(4) + 1
when 6
return rand(6) + 1
when 12
return rand(12) + 1
end
end
end
class Player
attr_accessor :skill
attr_accessor :strength
def initialize(name)
@name = name
@skill = 10
@strength = 10
end
def acc_state(state, player, strength_m, skill_m)
if state.downcase == "won"
@strength = player.get_strength + strength_m
@skill = player.get_skill + skill_m
elsif state.downcase == "lost"
@strength = player.get_strength - strength_m
if player.get_skill > 0
@skill = player.get_skill - skill_m
else
@skill = player.get_skill
end
elsif state == 1
end
end
def strength(roll)
@strength = @strength + roll.round
end
def get_strength
return @strength
end
def skill(roll)
@skill = @skill + roll.round
end
def get_skill
return @skill
end
def get_name
return @name
end
end
class Greeting < Player
def initialize(player)
@player = player
end
def greeting(player)
puts "Hello! Welcome to something awesome."
puts "What would you like #{player} to be called? :"
@choice = gets.chomp
end
def get_name
return @choice
end
end
def roll_dice(player)
temp_dice12 = Dice.new(12)
temp_dice12_roll = temp_dice12.roll
temp_dice4 = Dice.new(4)
temp_dice4_roll = temp_dice4.roll
puts "#{player.get_name} rolled a 12 sided dice, and scored #{temp_dice12_roll}"
puts "#{player.get_name} rolled a 4 sided dice, and scored #{temp_dice4_roll}"
return (temp_dice12_roll / temp_dice4_roll)
end
def assign_attr(player)
player.strength(roll_dice(player))
puts "#{player.get_name} has a strength of #{player.get_strength}"
puts ""
player.skill(roll_dice(player))
puts "#{player.get_name} has a skill of #{player.get_skill}"
puts ""
end
class Arena
def initialize(player1, player2)
@player1 = player1
@player2 = player2
end
def qualify(player)
game_dice = Dice.new(6)
@roll = game_dice.roll
puts "#{player.get_name} rolled a #{@roll}"
return @roll
end
end
# Function to create the attribute modifiers
def modifier_create(player1, player2, attr)
case attr.downcase
when "strength"
p1 = player1.get_strength
p2 = player2.get_strength
if p1 > p2
diff = p1 - p2
elsif p1 < p2
diff = p2 - p1
elsif p1 == p2
diff = 0
end
when "skill"
p1 = player1.get_skill
p2 = player2.get_skill
if p1 > p2
diff = p1 - p2
elsif p1 < p2
diff = p2 - p1
elsif p1 == p2
diff = 0
end
end
return diff / 5.0
end
# Function to write data to file
def store_data(player1, player2, filename)
local_data = File.open(filename, "w")
local_data.puts "Overwritten at #{Time.now}"
local_data.puts "-------------------------------------"
local_data.puts "Player 1 Name : #{player1.get_name}"
local_data.puts "Player 1 Strength : #{player1.get_strength}"
local_data.puts "Player 1 Skill: #{player1.get_skill}"
local_data.puts "-------------------------------------"
local_data.puts "Player 2 Name : #{player2.get_name}"
local_data.puts "Player 2 Strength : #{player2.get_strength}"
local_data.puts "Player 2 Skill: #{player2.get_skill}"
end
def battle(player1, player2, draw_count, round_counter)
local_arena = Arena.new(player1, player2)
player1_roll1 = local_arena.qualify(player1)
player2_roll1 = local_arena.qualify(player2)
if player1_roll1 > player2_roll1
puts "#{player1.get_name} wins round #{round_counter}!"
puts ""
return player1
elsif player2_roll1 > player1_roll1
puts "#{player2.get_name} wins round #{round_counter}!"
puts ""
return player2
elsif player1_roll1 == player2_roll1
puts "There was a Draw round #{round_counter}!"
puts ""
return draw_count
end
end
## Get name for player 1 and assigns it to an object and a variable
greeting1 = Greeting.new("Player 1")
greeting1.greeting("Player 1")
player_1 = Player.new(greeting1.get_name)
puts "Player 1 Added as #{player_1.get_name}!"
## Gets name for player 2 and assigns it to an object and a variable
greeting2 = Greeting.new("Player 2")
greeting2.greeting("Player 2")
player_2 = Player.new(greeting2.get_name)
puts "Player 2 Added as #{player_2.get_name}!"
## Determines and Assigns strength and skill atrributes to both players
assign_attr(player_1)
assign_attr(player_2)
draw_count = Player.new("Draw!")
# Creates strength modifier for both players
strength_modifier = modifier_create(player_1, player_2, "strength")
puts "Strength Modifier = #{strength_modifier}"
# Creates skill modifier for both players
skill_modifier = modifier_create(player_1, player_2, "skill")
puts "Skill Modifier = #{skill_modifier}"
# Writes data to file named 'savedat.dat'
store_data(player_1, player_2, "savedat.dat")
# Repeats the battle 10 ten times
# 10.times { battle(player_1, player_2) }
sleep 2
#ruby_arena = Arena.new(player_1, player_2)
#ruby_arena.fight
round_no = 1
100000000.times {
battle_winner = battle(player_1, player_2, draw_count, round_no)
battle_looser = player_2 if battle_winner == player_1
battle_looser = player_1 if battle_winner == player_2
battle_winner.acc_state("won", battle_winner, strength_modifier, skill_modifier) unless battle_winner == draw_count
battle_looser.acc_state("lost", battle_looser, strength_modifier, skill_modifier) unless battle_winner == draw_count
puts "#{player_1.get_name} is winning!!!" if player_1.get_strength > player_2.get_strength
puts "#{player_2.get_name} is winning!!!" if player_2.get_strength > player_1.get_strength
puts ""
puts "#{player_1.get_name} has a strength of #{player_1.get_strength.round(2)}"
puts "#{player_1.get_name} has a skill of #{player_1.get_skill.round(2)}"
puts "#{player_2.get_name} has a strength of #{player_2.get_strength.round(2)}"
puts "#{player_2.get_name} has a skill of #{player_2.get_skill.round(2)}"
puts ""
puts "#{player_2.get_name} DIED A MISERABLE DEATH" if player_2.get_strength <= 0
puts "#{player_1.get_name} takes victory!!!!" if player_2.get_strength <= 0
puts "#{player_1.get_name} DIED A MISERABLE DEATH" if player_1.get_strength <= 0
puts "#{player_2.get_name} takes victory on round number #{round_no}!!!" if player_1.get_strength <= 0
exit if player_2.get_strength <= 0 || player_1.get_strength <= 0
round_no += 1
sleep 0.01
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment