Skip to content

Instantly share code, notes, and snippets.

@tempox
Created June 25, 2013 02:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tempox/5855569 to your computer and use it in GitHub Desktop.
Save tempox/5855569 to your computer and use it in GitHub Desktop.
Just run the program either in python or the command line. Then answer the questions. Hopefully the code works this is my first time uploading code to github.
import random
import time
import pickle
## Initial constants
initial_human = 100
human = initial_human
human_dead = 0
initial_beast = 25
beast = initial_beast
beast_dead = 0
accuracy_beast = 0.75
accuracy_human = 0.35
attack_speed_human = 1.0
attack_speed_beast = 0.9
crit_multi_human = 2.0
crit_multi_beast = 2.0
block_chance = 0.1
walk_speed = 1.0
armor_human = 0.0
armor_beast = 0.0
experience = 0
area = 1
level = 1
kills = 0
gold = 0
gold_chance = 0
level_increase_human = level
level_increase_beast = kills
upgrade = 1
area_advance = 0
start = time.time()
x_pos = 0
y_pos = 0
monster_probablity = 0.20
## function for the beast attack
def beast_attack_roll(level,accuracy_beast,crit_multi_beast,human,human_dead,x_pos,y_pos,armor_beast):
human_dead = 0
beast_attack = random.random()
weapon_beast = random.uniform(1,3+random.uniform(1,((x_pos**2 + y_pos**2)**(1.0/2.0))*(level))) + random.uniform(1,3+random.uniform(1,((x_pos**2 + y_pos**2)**(1.0/2.0))*(level)))*random.uniform(0,area)
if (weapon_beast >= 2.0*(level+3)) and (beast_attack >= accuracy_beast):
print "The beast made a critical hit!"
print ""
weapon_beast = crit_multi_beast*weapon_beast
print "The Beast Attacks!"
print ""
deflection_human = (weapon_beast*armor_beast/100.0)
if deflection_human > 0.01:
print "The human deflected ",deflection_human, "damage."
print ""
if beast_attack >= accuracy_beast:
print "The attack does", abs((weapon_beast) - deflection_human), "damage."
print ""
time.sleep(attack_speed_beast)
block_roll = random.random()
if block_chance >= block_roll:
print "The attack was blocked!"
print ""
else:
human = human -abs((weapon_beast) - (weapon_beast*armor_beast/100.0))
if human <= 0:
human_dead = 1
else:
print "The human has ",human," life left."
print ""
else:
print "The attack misses."
print ""
time.sleep(attack_speed_beast)
return (human,human_dead)
## function for the human attack
def human_attack_roll(level,accuracy_human,crit_multi_human,beast,beast_dead,armor_human):
beast_dead = 0
human_attack = random.random()
weapon_human = (random.uniform(1,6 + level) + random.uniform(1,6 + level)*random.uniform(0,area))*upgrade
if (weapon_human >= 2*(6+level)) and (human_attack >= accuracy_human):
print "The human made a critical hit!"
print ""
weapon_human = crit_multi_human*weapon_human
print "The Human Attacks!"
print ""
deflection_beast = (weapon_human*armor_human/100.0)
if deflection_beast > 0.01:
print "The beast deflected ",deflection_beast, "damage."
print ""
if human_attack >= accuracy_human:
print "The attack hits does", abs((weapon_human) - deflection_beast), "damage."
print ""
time.sleep(attack_speed_human)
beast = beast - abs((weapon_human) - deflection_beast)
if beast <= 0:
beast_dead = 1
else:
print "The beast has ",beast," life left."
print ""
else:
print "The attack misses."
print ""
time.sleep(attack_speed_human)
return (beast,beast_dead)
## function for obtaining experience from a kill
def get_experience(kills,experience,beast,initial_beast,crit_multi_beast,accuracy_beast,level_increase_beast,x_pos,y_pos,armor_beast,level):
kills = kills + 1
xp_increase = random.random()*((x_pos**2 + y_pos**2)**(1.0/2.0))*level
print "The beast gives ",xp_increase, "experience."
print ""
experience = experience + xp_increase
print "The human has ",experience," experience."
print ""
beast = initial_beast + level_increase_beast
intial_beast = beast
accuracy_beast = accuracy_beast - 0.003
crit_multi_beast = crit_multi_beast + 0.003
armor_beast = armor_beast + 0.03
return (experience,beast,initial_beast,accuracy_beast,crit_multi_beast,kills,armor_beast)
##displaces a map of the local area with respect to a town
def show_map(x_pos,y_pos):
if (x_pos ==0) and (y_pos == 0):
length = 2.0*((x_pos**2 + y_pos**2)**(1.0/2.0)) + 5
local_map_town = [[0 for i in range(int(round(length)))] for j in range(int(round(length)))]
local_map_town[int((length-1.0)/2.0)][int((length-1.0)/2.0)] = 2
print "The local map. (1 is the human || 2 is a town)"
print ""
for row in local_map_town:
print row
print ""
else:
length = 2.0*((x_pos**2 + y_pos**2)**(1.0/2.0)) + 5
X_pos = (x_pos + int((length-1.0)/2.0))
Y_pos = (y_pos + int((length-1.0)/2.0))
local_map_town = [[0 for i in range(int(round(length)))] for j in range(int(round(length)))]
local_map_town[int((length-1.0)/2.0)][int((length-1.0)/2.0)] = 2
local_map_town[Y_pos][X_pos] = 1
print "The local map. (1 is the human || 2 is a town)"
print ""
for row in local_map_town:
print row
print ""
## function for leveling up the human. It increases base stats.
def level_up(gold,kills,experience,level,human,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human,level_increase_human):
while (experience >= (1.5*level**2)):
level = level + 1
print ""
print "~~~/**\/LEVELUP\/**\~~~"
print "The human's level is ", level
print ""
human = initial_human + level_increase_human
initial_human = human
accuracy_human = accuracy_human - 0.005
attack_speed_human = attack_speed_human - 0.009
gold_chance = gold_chance + 0.03
block_chance = block_chance + 0.01
crit_multi_human = crit_multi_human + 0.005
walk_speed = walk_speed - 0.003
armor_human = armor_human + 0.03
save_character(character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human)
return gold,kills,experience,level,human,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human
## function for saving the character data
def save_character(character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human):
print "Saving Character Data."
print ""
with open(character_name,"wb") as save_file:
pickle.dump((human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human),save_file)
save_file.close()
print "Complete!"
print ""
print ""
## function for loading the data
def load_character():
character_name = raw_input("What is the human's name? ")
print ""
with open(character_name,"rb") as save_file:
human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human = pickle.load(save_file)
save_file.close()
return character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human
## function for obtaining loot for a recent kill
def get_loot(gold_chance,gold):
roll = random.random()
print "The human is collecting loot."
print ""
time.sleep(1)
if gold_chance >= roll:
print "The human collected gold!"
print ""
print ""
gold = gold + 1
else:
print "The human found nothing."
print ""
print ""
return gold
## function for late game advancement
def area_advancement(area_advance,area,kills,level_increase_human,level_increase_beast):
area_advance = area_advance + (50 + area**area)
if kills == area_advance:
area = area + 1
print "The human travels to area ",area,"."
print ""
time.sleep(2*walk_speed)
level_increase_human = random.uniform(1,level)
level_increase_beast = random.uniform(1,kills)
return (area,level_increase_human,level_increase_beast)
## function for the initial start screen
def start_game(human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human):
loading = 1
while(loading == 1):
print "Loading..."
time.sleep(1)
print ""
print " $$$$$$\ $$\ "
print "$$ __$$\ $$ | "
print "$$ / \__|$$\ $$\ $$\ $$$$$$\ $$$$$$\ $$$$$$$ | $$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ "
print "\$$$$$$\ $$ | $$ | $$ |$$ __$$\ $$ __$$\ $$ __$$ |$$ __$$\ $$ __$$\ $$ __$$\ $$ __$$\ "
print " \____$$\ $$ | $$ | $$ |$$ / $$ |$$ | \__|$$ / $$ |$$$$$$$$ |$$ | \__|$$$$$$$$ |$$ | \__| "
print "$$\ $$ |$$ | $$ | $$ |$$ | $$ |$$ | $$ | $$ |$$ ____|$$ | $$ ____|$$ | "
print "\$$$$$$ |\$$$$$\$$$$ |\$$$$$$ |$$ | \$$$$$$$ |\$$$$$$$\ $$ | \$$$$$$$\ $$ | "
print " \______/ \_____\____/ \______/ \__| \_______| \_______|\__| \_______|\__| "
print ""
print "Alpha Version"
print ""
print ""
save_load = raw_input("New character or Load a game? ")
if (save_load == "load") or (save_load == "Load") or (save_load == "l"):
print ""
print "Loading old character."
print ""
character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human = load_character()
loading = 0
else:
print ""
print "Starting new character."
print ""
character_name = raw_input("What is the human's name? ")
for i in range(5):
print ""
time.sleep(0.1)
print "A battered human fighter sits in a dark corner of a pub, drifting into a dream."
print ""
time.sleep(1)
print "."
print ""
time.sleep(1)
print ".."
print ""
time.sleep(2)
print "..."
print ""
time.sleep(3)
loading = 0
return character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human
## function for the decision of each turn. Current options (shop, travel, character, explore, leave)
def movement_human(area,kills,level,experience,gold,x_pos,y_pos,human):
repeat = 0
monster_roll = random.random()
while(repeat == 0):
if (x_pos == 0) and (y_pos == 0):
print ""
print "The human is in a town."
print ""
answer = raw_input("What is the human's next move? (shop, travel, character, explore, leave): ")
print ""
if(answer == "shop"):
print "The human is traveling back to town."
print ""
time.sleep(((x_pos**2 + y_pos**2)**(1.0/2.0))*walk_speed)
x_pos = 0
y_pos = 0
store_answer = raw_input("Where would like to shop at? (store, upgrade, pub): ")
print ""
if (store_answer == "store") or (store_answer == "shop"):
print "The human is traveling to the store."
print ""
time.sleep(((x_pos**2 + y_pos**2)**(1.0/2.0))*walk_speed)
if gold >= 10:
gold = gold - 10
human = human + level_increase
repeat = 1
else:
print "Not enough gold!"
print ""
repeat = 1
if store_answer == "upgrade":
print "The human is traveling to the store."
print ""
time.sleep(((x_pos**2 + y_pos**2)**(1.0/2.0))*walk_speed)
if gold >= 100:
gold = gold - 100
upgrade = upgrade + 2
repeat = 1
else:
print "Not enough gold!"
print ""
repeat = 1
if (store_answer == "pub"):
print "The human crawls to town's pub to drink."
print ""
time.sleep(10 + ((x_pos**2 + y_pos**2)**(1.0/2.0))*walk_speed)
human = initial_human
area = 1
repeat = 1
print ""
print "Burp!"
print ""
time.sleep(5)
if (store_answer == "fight") or (store_answer == "outside"):
repeat = 1
while((answer == "travel") or (answer == "t")):
monster_roll = random.random()
travel_answer = raw_input("Where will the human go? (north, east, south, west, stay): ")
print ""
if (travel_answer == "west") or (travel_answer == "east") or (travel_answer == "north") or (travel_answer == "south") or (travel_answer == "w") or (travel_answer == "a") or (travel_answer == "s") or (travel_answer == "d") :
if (travel_answer == "west") or (travel_answer == "a"):
x_pos = x_pos - 1
travel_answer = "west"
if (travel_answer == "east") or (travel_answer == "d"):
x_pos = x_pos + 1
travel_answer = "east"
if (travel_answer == "north") or (travel_answer == "w"):
y_pos = y_pos - 1
travel_answer = "north"
if (travel_answer == "south") or (travel_answer == "s"):
y_pos = y_pos + 1
travel_answer = "south"
print "The human wanders",travel_answer, ", deeper into the forest."
print ""
time.sleep(walk_speed)
if (monster_roll >= 0.25) or (x_pos == 0) and (y_pos == 0):
repeat = 1
answer = 0
else:
print "There seems to be nothing here."
print ""
print ""
monster_roll = 0
if (travel_answer == "stay"):
x_pos = x_pos
y_pos = y_pos
answer = 0
repeat = 1
monster_roll = 0
if (answer == "character") or (answer == "c"):
elapsed = (time.time() - start)
print ""
print "The human got to area", area
print "The human has ", human, "life."
print "Killed", kills, "beasts."
print "The human was level", level
print "Current experience: ", experience
difference = (1.5*level**2) - experience
print "Experience to next level", difference
print gold, "gold was collected."
print ""
if (answer == "explore") or (answer == "e"):
show_map(x_pos,y_pos)
if (answer == "leave"):
human = -1
answer = 0
repeat = 1
monster_roll = 0
break
return (x_pos,y_pos,monster_roll,human)
## function for the exit screen
def human_death():
elapsed = (time.time() - start)
print ""
print "The highest area reached was ", area
print "killed", kills, "beasts."
print "The human was level", level
print "with", experience, "experience."
print gold, "gold was collected."
print "The human wandered the forest for ", elapsed/60, "minutes."
print ""
time.sleep(1)
print "."
print ""
time.sleep(1)
print ".."
print ""
print "The human awakes in a dimmly lit pub."
###########################################################################################################################################################################
###########################################################################################################################################################################
##Actual running of programs
character_name,human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human = start_game(human,gold,kills,experience,level,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human)
while(human > 0):
x_pos,y_pos,monster_roll,human = movement_human(area,kills,level,experience,gold,x_pos,y_pos,human)
if (x_pos == 0) and (y_pos == 0):
print ""
print "The human is arriving to a town."
print ""
continue
if (monster_roll >= 0.25):
print ""
print "A level",kills,"beast appears."
print ""
time.sleep(0.2)
print ""
while(beast > 0):
if human_dead == 1:
break
human,human_dead = beast_attack_roll(level,accuracy_beast,crit_multi_beast,human,human_dead,x_pos,y_pos,armor_beast)
if human_dead == 1:
break
beast, beast_dead = human_attack_roll(level,accuracy_human,crit_multi_human,beast,beast_dead,armor_human)
if beast_dead == 1:
print ""
print "The beast has been killed!"
print ""
experience,beast,initial_beast,accuracy_beast,crit_multi_beast,kills,armor_beast = get_experience(kills,experience,beast,initial_beast,crit_multi_beast,accuracy_beast,level_increase_beast,x_pos,y_pos,armor_beast,level)
gold,kills,experience,level,human,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human = level_up(gold,kills,experience,level,human,initial_human,accuracy_human,attack_speed_human,gold_chance,block_chance,crit_multi_human,walk_speed,armor_human,level_increase_human)
gold = get_loot(gold_chance,gold)
area,level_increase_human,level_increase_beast = area_advancement(area_advance,area,kills,level_increase_human,level_increase_beast)
beast_dead = 0
break
if human_dead == 1:
break
human_death()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment