Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- os.system("cls")
- class Gamestate:
- def __init__(self):
- self.rooms = {}
- self.import_rooms()
- self.prototype = {}
- self.import_prototypes()
- self.commands = {}
- self.make_commands()
- self.items = {}
- self.make_items()
- # so im cheating the game by giving the player 99999 dollars... but its for me making the game...
- self.player = Player(name="blank", health=100, damage=15, location=1, work_experiance=0, money=99999, items={})
- self.get_player_room()
- self.configure_rooms()
- self.import_items()
- self.entities = {}
- self.make_entities()
- self.import_entities()
- def configure_room_items(self):
- # print(self.prototype["Ammo"])
- for room in self.rooms.keys():
- if self.rooms[room].general_location == "Gun Store":
- for item in self.rooms[room].items:
- if item.name == "Ammo":
- item.ammo = self.prototype["Ammo"].ammo
- # print(self.prototype["Ammo"].ammo)
- # print(item)
- def import_prototypes(self):
- ammo_prototype = Prototype(name="Ammo", ammo=40)
- self.prototype[ammo_prototype.name] = ammo_prototype
- def load_weapon(self, user_input):
- x = 0
- for item in self.player.items:
- item_name = self.items[item].name.lower().split()
- print(item_name)
- # if a user wants to attack an entity
- def attack(self, user_input):
- # check if players location has an entity
- if self.player.location.entity != None:
- # if entity is in location, here i check if the user entered the entites name
- entity_split = self.player.location.entity.name.lower().split()
- x = 0
- for word in user_input:
- for name in entity_split:
- if word == name:
- x += 1
- # this if statement confirms if the user entered the entities name
- if x == len(entity_split):
- # where the attack gets setup, printing the entity stats player stats etc
- # because the player entered attack entity it removes health from player and entity before the leave == False loop starts
- self.player.location.entity.health -= self.player.damage
- self.player.health -= self.player.location.entity.damage
- while True:
- while self.player.health >= 0:
- if self.player.location.entity.health <= 0:
- print("\nCongrats :) you have killed %s" % (self.player.location.entity.name))
- # self.player.location.entity = None
- break
- print("\nYour attacking %s!" % (self.player.location.entity.name))
- print("\n[Attack]")
- print("\n[Entity Stats]")
- print("Entity Name: %s" % (self.player.location.entity.name))
- print("Entity Health: %d" % (self.player.location.entity.health))
- print("Entity Damage: %d" % (self.player.location.entity.damage))
- print("\n[Player Stats]")
- print("Health: %d" % (self.player.health))
- print("Damage: %d" % (self.player.damage))
- # check first if the entities health is >= 0
- attack_input = input("\nAttack Command: ").lower().split()
- if "attack" in attack_input:
- # if the user attacked, it prints you attacked entity, and then removing health from both player and entity
- print("\nYou have attacked %s" % (self.player.location.entity.name))
- self.player.location.entity.health -= self.player.damage
- self.player.health -= self.player.location.entity.damage
- if "leave" in attack_input:
- print("\nYou have left the fight")
- break
- if self.player.health <= 0:
- break
- else:
- break
- # if no entity in location, print error
- else:
- print("\nThere are no entities in this room you can attack")
- def import_entities(self):
- # importing entites into locations
- for room in self.rooms.keys():
- if self.rooms[room].rname == "Pizza Place Kitchen":
- pizza_cook = self.entities["Pizza Cook"]
- self.rooms[room].entity = pizza_cook
- if self.rooms[room].rname == "Pizza Place Lobby":
- pizza_manager = self.entities["Pizza Manager"]
- self.rooms[room].entity = pizza_manager
- if self.rooms[room].rname == "Gun Store Floor":
- gun_store_manager = self.entities["Gun Store Manager"]
- self.rooms[room].entity = gun_store_manager
- if self.rooms[room].rname == "Grocery Store Produce Section":
- grocery_store_manager = self.entities["Grocery Store Manager"]
- self.rooms[room].entity = grocery_store_manager
- def make_entities(self):
- self.entities = {
- "Pizza Cook": Entity(name="Pizza Cook", health=100, damage=5, type="citizen", money=30, items=[]),
- "Pizza Manager": Entity(name="Pizza Manager", health=100, damage=10, type="citizen", money=100, items=[]),
- "Gun Store Manager": Entity(name="Gun Store Manager", health=100, damage=10, type="citizen", money=200,
- items=[]),
- "Grocery Store Manager": Entity(name="Grocery Store Manager", health=100, damage=12, type="citizen",
- money=30, items=[])}
- def eat_food(self, user_input):
- for item in self.player.items:
- item_split = item.name.lower().split()
- x = 0
- for word in user_input:
- for name in item_split:
- if word == name:
- x += 1
- if x == len(item_split):
- if item.type == "Food":
- self.player.health += item.health
- print("\nYou ate %s your health has increased by %d" % (item.name, item.health))
- self.player.items.remove(item)
- def print_items(self, user_input):
- if self.player.location.items != None:
- print("\n[%s Items]" % (self.player.location.general_location))
- print("-" * 50)
- for item in self.player.location.items:
- # item = self.player.location.items[item]
- if item.type == "Gun":
- print("Name: %s\tDamage: %d\tPrice: %d" % (item.name, item.damage, item.price))
- if item.type == "Food":
- print("Name: %s\tHealth: %d\tPrice: %d" % (item.name, item.health, item.price))
- if item.type == "Ammo":
- print("Name: %s\tAmount: %d\tPrice: %d" % (item.name, item.ammo, item.price))
- print("-" * 50)
- def import_items(self):
- for room in self.rooms.keys():
- if self.rooms[room].general_location == "Gun Store":
- self.rooms[room].items = {}
- ak47 = self.items["ak47"]
- ar15 = self.items["ar15"]
- ammo = self.items["ammo"]
- # self.rooms[room].items.append(ak47)
- # self.rooms[room].items.append(ar15)
- # self.rooms[room].items.append(ammo)
- # print(self.rooms[room].items)
- self.rooms[room].items = {ak47: ak47, ar15: ar15, ammo: ammo}
- # room_items = self.rooms.items
- # self.rooms.items = []
- # room_items = self.rooms.items
- # room_items.append(ak47)
- # room_items.append(ar15)
- # room_items.append(ammo)
- if self.rooms[room].general_location == "Grocery Store":
- carrots = self.items["carrots"]
- fish = self.items["fish"]
- salad = self.items["salad"]
- self.rooms[room].items = {carrots: carrots, fish: fish, salad: salad}
- if self.rooms[room].general_location == "Pizza Place":
- cheese_pizza = self.items["cheese pizza"]
- hawaiian_pizza = self.items["hawaiian pizza"]
- self.rooms[room].items = {cheese_pizza: cheese_pizza, hawaiian_pizza: hawaiian_pizza}
- def make_items(self):
- self.items = {"ak47": Item(name="AK-47", price=700, damage=55, type="Gun", ammo=0),
- "ar15": Item(name="AR-15", price=500, damage=45, type="Gun", ammo=0),
- "ammo": Item(name="Ammo", price=20, type="Ammo", ammo=40),
- "carrots": Item(name="Carrots", price=2, health=3, type="Food"),
- "fish": Item(name="Fish", price=10, health=15, type="Food"),
- "salad": Item(name="Salad", price=5, health=10, type="Food"),
- "cheese pizza": Item(name="Cheese Pizza", price=12, health=15, type="Food"),
- "hawaiian pizza": Item(name="Hawaiian Pizza", price=15, health=15, type="Food")}
- def work(self, user_input):
- if self.player.location.general_location == "Pizza Place":
- if self.player.work_experiance >= 0:
- work_shift = 60
- print("\n[Work]")
- print("you just made $%d today" % work_shift)
- self.player.money += work_shift
- work_experiance = 5
- print("you gained %d work experiance" % work_experiance)
- self.player.work_experiance += work_experiance
- if self.player.location.general_location == "Gun Store":
- if self.player.work_experiance >= 40:
- work_shift = 100
- print("\n[Work]")
- print("you just made $%d today" % work_shift)
- self.player.money += work_shift
- work_experiance = 20
- print("you gained %d work experiance" % work_experiance)
- self.player.work_experiance += work_experiance
- else:
- print("\nsorry you need atleast 40 work experiance to work here")
- if self.player.location.general_location == "Hospital":
- if self.player.work_experiance >= 500:
- work_shift = 250
- print("\n[Work]")
- print("you just made $%d today" % work_shift)
- self.player.money += work_shift
- work_experiance = 50
- print("you gained %d work experiance" % work_experiance)
- self.player.work_experiance += work_experiance
- if self.player.location.general_location == "Bank":
- if self.player.work_experiance >= 120:
- work_shift = 150
- print("\n[Work]")
- print("you just made $%d today" % work_shift)
- self.player.money += work_shift
- work_experiance = 30
- print("you gained %d work experiance" % work_experiance)
- self.player.work_experiance += work_experiance
- if self.player.location.general_location == "Grocery Store":
- if self.player.work_experiance >= 15:
- work_shift = 80
- print("\n[Work]")
- print("you just made $%d today" % work_shift)
- self.player.money += work_shift
- work_experiance = 20
- print("you gained %d work experiance" % work_experiance)
- self.player.work_experiance += work_experiance
- def print_player_stats(self):
- print("\n[Player Stats]")
- print("Name: %s\nHealth: %d\nDamage: %d\nWork experiance: %d\nMoney: %d" % (
- self.player.name, self.player.health, self.player.damage, self.player.work_experiance, self.player.money))
- if len(self.player.items) != 0:
- print("\n[Player Items]")
- print("-" * 50)
- for item in self.player.items.keys():
- if self.player.items[item].type == "Gun":
- print("Name: %s\tDamage: %d" % (self.player.items[item].name, self.player.items[item].damage))
- if self.player.items[item].type == "Food":
- print("Name: %s\tHealth: %d" % (self.player.items[item].name, self.player.items[item].health))
- if self.player.items[item].type == "Ammo":
- print("Name: %s\tAmount: %d" % (self.player.items[item].name, self.player.items[item].ammo))
- print("-" * 50)
- def print_stats(self):
- print("\nin the print stats method")
- def buy_item(self, user_input):
- item = None
- if self.player.location.items != None:
- for location_item in self.player.location.items:
- location_item_name = location_item.name.lower().split()
- for word in user_input:
- for name in location_item_name:
- if word == name:
- item = location_item
- if self.player.money >= item.price:
- if item in self.player.items:
- print("\nyou have this item already")
- for player_item in self.player.items:
- if player_item.name == item.name:
- if item.name == "Ammo":
- player_item.ammo += item.ammo
- self.player.items[item.name] = item
- def make_commands(self):
- self.commands = {
- "go": Commands(name="go", function=self.going_places, type="movement", description="To go to places"),
- "north": Commands(name="go", function=self.going_places, type="movement",
- description="To move to a north room"),
- "stats": Commands(name="stats", function=self.print_stats, type="verbosity",
- description="the print the stats of something"),
- "player": Commands(name="player", function=self.print_player_stats, type="verbosity",
- description="to print the players stats"),
- "work": Commands(name="work", function=self.work, type="work", description="to try and work a job"),
- "items": Commands(name="items", function=self.print_items, type="verbosity",
- description="To view the items of someone or someplace"),
- "buy": Commands(name="buy", function=self.buy_item, type="purchase", description="To buy an item")}
- def configure_rooms(self):
- # configure north south east and west
- for room in self.rooms.keys():
- exits = []
- nsew = self.rooms[room].nsew
- for number in nsew:
- exits.append(int(number))
- self.rooms[room].nsew = exits
- for room in self.rooms.keys():
- north = self.rooms[room].nsew[0]
- south = self.rooms[room].nsew[1]
- east = self.rooms[room].nsew[2]
- west = self.rooms[room].nsew[3]
- self.rooms[room].north = north
- self.rooms[room].south = south
- self.rooms[room].east = east
- self.rooms[room].west = west
- # working on exits now
- for room in self.rooms.keys():
- exits = []
- for exit in self.rooms[room].exits:
- exits.append(int(exit))
- self.rooms[room].exits = exits
- def going_places(self, user_input):
- if "north" in user_input:
- if self.player.location.north != 0:
- for room in self.rooms.keys():
- if self.player.location.north == self.rooms[room].rnum:
- self.player.location = self.rooms[room]
- if "south" in user_input:
- if self.player.location.south != 0:
- for room in self.rooms.keys():
- if self.player.location.south == self.rooms[room].rnum:
- self.player.location = self.rooms[room]
- if "east" in user_input:
- if self.player.location.east != 0:
- for room in self.rooms.keys():
- if self.player.location.east == self.rooms[room].rnum:
- self.player.location = self.rooms[room]
- if "west" in user_input:
- if self.player.location.west != 0:
- for room in self.rooms.keys():
- if self.player.location.west == self.rooms[room].rnum:
- self.player.location = self.rooms[room]
- # lets see if the user entered a room name instead of north south east or west
- if self.player.location.north != 0:
- for room in self.rooms.keys():
- if self.player.location.north == self.rooms[room].rnum:
- room_name = self.rooms[room].rname.lower().split()
- x = 0
- for word in user_input:
- for name in room_name:
- if word == name:
- x += 1
- if x == len(room_name):
- self.player.location = self.rooms[room]
- if self.player.location.south != 0:
- for room in self.rooms.keys():
- if self.player.location.south == self.rooms[room].rnum:
- room_name = self.rooms[room].rname.lower().split()
- x = 0
- for word in user_input:
- for name in room_name:
- if word == name:
- x += 1
- if x == len(room_name):
- self.player.location = self.rooms[room]
- if self.player.location.east != 0:
- for room in self.rooms.keys():
- if self.player.location.east == self.rooms[room].rnum:
- room_name = self.rooms[room].rname.lower().split()
- x = 0
- for word in user_input:
- for name in room_name:
- if word == name:
- x += 1
- if x == len(room_name):
- self.player.location = self.rooms[room]
- if self.player.location.west != 0:
- for room in self.rooms.keys():
- if self.player.location.west == self.rooms[room].rnum:
- room_name = self.rooms[room].rname.lower().split()
- x = 0
- for word in user_input:
- for name in room_name:
- if word == name:
- x += 1
- if x == len(room_name):
- self.player.location = self.rooms[room]
- # lets assume the user wanted to enter an exit location
- if self.player.location.exits[0] != 0:
- for exit in self.player.location.exits:
- for room in self.rooms.keys():
- if exit == self.rooms[room].rnum:
- exit_name = self.rooms[room].rname.lower().split()
- x = 0
- for word in user_input:
- for name in exit_name:
- if word == name:
- x += 1
- if x == len(exit_name):
- self.player.location = self.rooms[room]
- general_name = self.rooms[room].general_location.lower().split()
- z = 0
- for word in user_input:
- for name in general_name:
- if word == name:
- z += 1
- if z == len(general_name):
- self.player.location = self.rooms[room]
- def get_player_room(self):
- for room in self.rooms.keys():
- if self.player.location == self.rooms[room].rnum:
- self.player.location = self.rooms[room]
- def take_input(self):
- user_input = input("\nCommand: ").lower().split()
- self.going_places(user_input)
- if "player" in user_input:
- self.print_player_stats()
- if "work" in user_input:
- self.work(user_input)
- if "items" in user_input:
- self.print_items(user_input)
- if "buy" in user_input:
- self.buy_item(user_input)
- if "eat" in user_input:
- self.eat_food(user_input)
- if "attack" in user_input:
- self.attack(user_input)
- if "load" in user_input:
- self.load_weapon(user_input)
- def do_look(self):
- # printing out the current room
- print("\n[Location]")
- print("Room name: %s" % (self.player.location.rname))
- print("Room description: %s" % (self.player.location.rdesc))
- if self.player.location.entity != None:
- print("\n[Location Entities]")
- print(self.player.location.entity.name)
- # print the exits of leaving general location
- if self.player.location.exits[0] != 0:
- print("\n[Exits]")
- for room in self.rooms.keys():
- for exit in self.player.location.exits:
- if exit == self.rooms[room].rnum:
- print("%s: %s" % (self.rooms[room].general_location, self.rooms[room].rname))
- # print the room exits
- print("\n[Room Exits]")
- if self.player.location.north != 0:
- for room in self.rooms.keys():
- if self.player.location.north == self.rooms[room].rnum:
- print("North: %s" % (self.rooms[room].rname))
- if self.player.location.south != 0:
- for room in self.rooms.keys():
- if self.player.location.south == self.rooms[room].rnum:
- print("South: %s" % (self.rooms[room].rname))
- if self.player.location.east != 0:
- for room in self.rooms.keys():
- if self.player.location.east == self.rooms[room].rnum:
- print("East: %s" % (self.rooms[room].rname))
- if self.player.location.west != 0:
- for room in self.rooms.keys():
- if self.player.location.west == self.rooms[room].rnum:
- print("West: %s" % (self.rooms[room].rname))
- def import_rooms(self):
- f = open("rooms.txt", "r")
- lines = f.readlines()
- loop = 0
- while loop <= len(lines) - 1:
- self.rooms[lines[loop + 1]] = Room(rnum=int(lines[loop]), rname=lines[loop + 1].strip("\n"),
- rdesc=lines[loop + 2].strip("\n"),
- general_location=lines[loop + 3].strip("\n"),
- nsew=lines[loop + 4].split(), exits=lines[loop + 5].split())
- loop += 6
- class Item:
- def __init__(self, name, health=None, price=None, damage=None, type=None, ammo=None):
- self.name = name
- self.health = health
- self.price = price
- self.damage = damage
- self.type = type
- self.ammo = ammo
- class Commands:
- def __init__(self, name, function, type, description):
- self.name = name
- self.function = function
- self.type = type
- self.description = description
- class Player:
- def __init__(self, name, health, damage, location, work_experiance, money, items):
- self.name = name
- self.health = health
- self.damage = damage
- self.location = location
- self.work_experiance = work_experiance
- self.money = money
- self.items = items
- class Room:
- def __init__(self, rnum=None, rname=None, rdesc=None, general_location=None, nsew=None, north=None, south=None,
- east=None, west=None, exits=None, items=None, type=None, entity=None):
- self.rnum = rnum
- self.rname = rname
- self.rdesc = rdesc
- self.general_location = general_location
- self.nsew = nsew
- self.north = north
- self.south = south
- self.east = east
- self.west = west
- self.exits = exits
- self.items = items
- self.type = type
- self.entity = entity
- class Entity:
- def __init__(self, name, health, damage, type, money, items):
- self.name = name
- self.health = health
- self.damage = damage
- self.type = type
- self.money = money
- self.items = items
- class Prototype:
- def __init__(self, name, ammo=None, price=None):
- self.name = name
- self.ammo = ammo
- self.price = price
- gamestate = Gamestate()
- def game_over():
- print("\nGame Over! You have died :(")
- os.system("exit")
- def main():
- gamestate.player.name = input("\nWhats your name?\nName: ")
- print("\nThank you for playing my game %s" % (gamestate.player.name))
- while True:
- if gamestate.player.health <= 0:
- game_over()
- break
- gamestate.do_look()
- # gamestate.initiate_values()
- gamestate.take_input()
- # what configure room items are, is so every item remains the same value or atleast the items i want to stay the same value
- gamestate.configure_room_items()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement