Created
June 25, 2013 02:58
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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