Skip to main content

Item() rundown

 The item() class holds the information of the item and also runs the item effect when it gets used. Constructor def __init__ ( self , command , name , cost , usage): self .effect = command self .name = name self .cost = cost self .usage = usage The effect holds the string name of the effect for the item,  usage holds the value of the Effect . The rest are self-explanatory. EffectHandler() def effectHandler ( self , user: PlayableCharacter , equip= True ): #learned how to specify type of parameter. if equip: if self .effect == "Def" : user.defense = user.defense + self .usage elif self .effect == "AtkPhy" or self .effect == "AtkMag" : user.attack = user.attack + self .usage else : if self .effect == "hp" : user = self .healing(user) return user This handles the effects of the item when it is used. If equip is true then it will check for the equip...

Explorer() progress

I decided to start with the explorer() method because of how central it is to the program. I quickly realized I'd need new functions for accessing specific pieces of data from the CVSs, so I made a few for detecting what region the part is in, another for fetching the region name and fetching the region z coordinate. Here is what explorer looks like now.

def explorer():
global x
global y
global z
global chapter
global region
global regionDisplay
global Lori
global Lauren
global Julius
global Marcus
menu = GameMenu()
characters = [Lori, Lauren, Julius, Marcus]
menu.update(characters)
selections = [4, 5]
#Code goes here
print(regionDisplay + ":")
print(regionDiscribe(region))
# need and area scanner for detecting nearby locations
if regionCheck(x+1,y,z) >= 0 and \
(fetchRegionZ(regionCheck(x+1,y,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x+1,y,z)) <= 5):
selections.append(1)
if regionCheck(x,y+1,z) >= 0 and \
(fetchRegionZ(regionCheck(x,y+1,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x,y+1,z)) <= 5):
selections.append(0)
if regionCheck(x-1,y,z) >= 0 and \
(fetchRegionZ(regionCheck(x-1,y,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x-1,y,z)) <= 5):
selections.append(3)
if regionCheck(x,y-1,z) >= 0 and \
(fetchRegionZ(regionCheck(x,y-1,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x,y-1,z)) <= 5):
selections.append(2)
if 0 in selections:
print("0: March north")
if 1 in selections:
print("1: March east")
if 2 in selections:
print("2: March south")
if 3 in selections:
print("3: March west")
print("4: Party")
print("5: Rest")
playerChoice = inputAndCheck("Your Call: ", selections)
if playerChoice == 0:
y += 1
if playerChoice == 1:
x += 1
if playerChoice == 2:
y -= 1
if playerChoice == 3:
x -= 1
if playerChoice == 4:
menu.displayGameMenu()
if playerChoice == 5:
rest()
region = regionCheck(x, y, z)
regionDisplay = fetchRegionDisplay(region)
#defualt iterations. temporary.
chapter += 1
os.system("cls")

    I started by importing all the global variables and initiating the GameMenu class called menu. I added all the characters to the pcList for later use when I work on GameManu class. I then put in those two print commands for the region and description. I quickly realized that I'd need a way to access and update the region ID, display name, and z values every time the player moves. So I went and created 4 new funtions: fetchRegionDisplay(), fetchRegionZ(), regionDescribe() and regionCheck().

    regionCheck() takes an x, y, and z as parameters and compares those parameters to the data in regions.csv by going down the regions list and seeing if the parameters are within the ranges for that region. Then once it finds the region it's in, it returns the region ID.

def regionCheck(x, y, z):
file = open("regions.csv")
fileReader = csv.reader(file)
targetRegion = -1
regions = []
for line in fileReader:
regions.append(line)
file.close()
for line in regions:
if line == []:
continue
if ((int(line[2]) <= x) and (int(line[3]) >= x)) and ((int(line[4]) <= y) and (int(line[5]) >= y)):
targetRegion = int(line[0])
break

return targetRegion
 fetchRegionZ() takes the region ID as a parameter and returns the z from the CSV.
def fetchRegionZ(regionID):
file = open("regions.csv")
fileReader = csv.reader(file)
regions = []
for line in fileReader:
if line == []:
continue
regions.append(line)
file.close()
return int(regions[regionID][7])

fetchRegionDisplay() takes the region ID as a parameter as well and returns the display name of the region.

def fetchRegionDisplay(regionID):
file = open("regions.csv")
fileReader = csv.reader(file)
regions = []
for line in fileReader:
if line == []:
continue
regions.append(line)
file.close()
return regions[regionID][1]

regionDescirbe() was also added to randomize the description of the region each time it's called. Fortunately, it accommodates regions with more than 3 options, so I'll probably add more descriptions for each region so it's not as repetitive.

def regionDiscribe(regionID):
file = open("descriptions.csv")
fileReader = csv.reader(file)
regions = []
for line in fileReader:
if line == []:
continue
regions.append(line)
file.close()
choice = int(random.random() * 10)
while choice >= len(regions[regionID]):
choice = int(random.random() * 10)
return regions[regionID][choice]

Then I continued work on explorer(), adding the functionality to move around the map. This was accomplished by first calling regionCheck() to make sure there is a location and also fetchRegionZ()  to make sure there isn't a lot of change in z. If both of those conditions I met I added the value to the selections list. (0 = North, 1 = East, 2 = South, 3 = West, 4 = Rest, 5 = Menu)

selections = [4, 5]
#Code goes here
print(regionDisplay + ":")
print(regionDiscribe(region))
# need and area scanner for detecting nearby locations
if regionCheck(x+1,y,z) >= 0 and \
(fetchRegionZ(regionCheck(x+1,y,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x+1,y,z)) <= 5):
selections.append(1)
if regionCheck(x,y+1,z) >= 0 and \
(fetchRegionZ(regionCheck(x,y+1,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x,y+1,z)) <= 5):
selections.append(0)
if regionCheck(x-1,y,z) >= 0 and \
(fetchRegionZ(regionCheck(x-1,y,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x-1,y,z)) <= 5):
selections.append(3)
if regionCheck(x,y-1,z) >= 0 and \
(fetchRegionZ(regionCheck(x,y-1,z))-fetchRegionZ(region) <= 5 and
fetchRegionZ(region)-fetchRegionZ(regionCheck(x,y-1,z)) <= 5):
selections.append(2)

Then I printed the options available and asked what the player wanted to do. Once they inputted a value I update the position values accordingly or call the function for the action they'd like to take.

if 0 in selections:
print("0: March north")
if 1 in selections:
print("1: March east")
if 2 in selections:
print("2: March south")
if 3 in selections:
print("3: March west")
print("4: Party")
print("5: Rest")
playerChoice = inputAndCheck("Your Call: ", selections)
if playerChoice == 0:
y += 1
if playerChoice == 1:
x += 1
if playerChoice == 2:
y -= 1
if playerChoice == 3:
x -= 1
if playerChoice == 4:
menu.displayGameMenu()
if playerChoice == 5:
rest()
region = regionCheck(x, y, z)
regionDisplay = fetchRegionDisplay(region)

With all this implemented we get out the first glimpse of actual gameplay:

I forgot to put a period between those two sentences in the description.
I'll grammar-check those when I add more descriptions to the game.
    I was (and still am) ecstatic when I got to see and move around in the game for the first time. I'm hyped to keep going!

Comments

Popular posts from this blog

Shop() run down

 This class is responsible for running the shop and creating the Item() objects. Constructor: def __init__ ( self ): self .items = [] f = open ( "items.csv" ) fReader = csv.reader(f) for line in fReader: if line == []: continue self .items.append(Item(line[ 2 ] , line[ 0 ] , int (line[ 1 ]) , int (line[ 3 ]))) f.close() When the class is called the class list items are filled with Item() objects created by opening items.csv and taking the data in there to instantiate the items. Then we close the file. WhoIsShopping(): def whoIsShopping ( self , squad : list ): counter = 0 choices = [] print ( "Who is shopping?" ) for member in squad: if member.level > 0 : print ( str (counter) + ": " + member.displayName) choices.append(counter) counter += 1 selection = inputAndCheck( "Selection: " , choices) return squad[selection] T...

Flow Charts are Born

Flow charts weren't that difficult to make. I honestly already had a decent idea of how my program would run, so this was really taking what was on my mind and putting it into a graphic. For those who don't know, I'm using a common key for software design for all of the flow charts: Source:  https://www.zenflowchart.com/flowchart-symbols First I have the simplest of my flow charts: theInstaller.py Flow chart. Then I made the Flow chart for theMain.py: Finally, I decided to include 2 flow charts for the important subprocess in the game: Explore() and runCombat(). For all of these, I used color codes to help subdivide the pieces of the code into their smaller loops or different paths. I'll be using these flow charts a lot to point out where exactly I'm at in the game as I go along with this blog.