I'm trying to create a Battleship-like program except with bones placed inside a backyard instead. The user will have to guess the row and column location of the bones (just like in battleship).
I want the program to read the lines of code from a text file and using these values to plot them on my grid (without modifying the text file). I'm not sure how to go about it though.
Here's what the text file consists:
12 12 4 4
0 7 0 8 0 9 0 10
2 4 3 4 5 4 6 4
0 0 1 0 2 0 3 0
11 11 10 11 9 11 8 11
Line 1 contains the width (12) and the height (12) of the grid, the number of bones (4) and the length of our bones (4). Lines 2 to 5 contain the location of our 4 bones in the following format:
<cell1_row> <cell1_col> <cell2_row> <cell2_col> <cell3_row> <cell3_col><cell4_row> <cell4_col>
So far, I have the basic structure of what it's supposed to look like but I'm missing some core functions.
I want to know how to read the game data from the text file and use it in my program.
def getData(gameFile):
"""Pulling our bone information from the game text file"""
file = open (gameFile, 'r')
gameData = [line.strip('\n').split(' ') for line in file.readlines()]
Not sure if this is how to use it correctly^. Below is what I've started working on!
#variables
bones = list()
backyardWidth = 12
backyardHeight = 12
numOfBones = 4
boneLength = 4
gameFile = "FBI_the_Game_Data_2.txt"
def createBackyard(aWidth, aHeight):
""" Create and return an empty "backyard" of aWidth by aHeight."""
aBackyard = [ [ " . " for i in range(backyardWidth) ] for j inrange(backyardHeight) ]
return aBackyard
def displayBackyard(aBackyard, aWidth, aHeight):
"""Creates a backyard with no bones."""
print("\nThere are 4 bones, each are 4 cells long, buried in this backyard! Can you find them?")
aString = " "
for column in range(0, aWidth):
aString = aString + str(column) + " "
if len(str(column)) == 1 :
aString += " "
print(aString)
for row in range(0, aHeight):
print(unpack(aBackyard, row))
def unpack(aBackyard, row):
""" Helper function.
Unpack a particular row of the backyard, i.e., make a string out of it.
"""
aString = ""
for i in range(backyardWidth):
aString += aBackyard[row][i]
# Add a column (from 1 to aHeight) to the right of a backyard row
aString = aString + " " + str(row)
return aString
# main
print("""Welcome to Fast Bone Investigation (FBI) the game.
In this game, we dig out bones from Mrs. Hudson's backyard!""")
# Create backyards
displayedBackyard = createBackyard(backyardWidth, backyardHeight)
# Display the backyard
app_on = True
while app_on:
displayBackyard(displayedBackyard, backyardWidth, backyardHeight)
choice = input(("""\nTo do so, please, enter the row and the column number of a cell in which you suspect a bone is buried
(e.g., 0 3 if you suspect that part of a bone is buried on the first row at the 4th column).
Enter -1 to quit: """))
# if user enters nothing
if len( choice ) == 0 :
print("***You have not entered anything. You need to enter a valid row and the column number!\n")
elif len( choice ) == 1 :
print("***You have entered only 1 value. You need to enter a valid row and the column number!\n")
elif choice == "-1":
app_on = False
# if the user enters any alphabet
elif choice.isalpha( ):
print("***You have entered %s. You need to enter a valid row and the column number!\n" %choice)
elif "." in choice :
print("***You have entered %s. You need to enter a valid row and the column number!\n" %choice)
else:
userGuess = int(choice)
if userGuess > backyardHeight or backyardWidth or userGuess < 0:
print("You needed to enter a row and column number of a cell that is within the backyard!\n")
## Unfinished Beeswax
## elif choice ==
## print("****HIT!!!!****")
else:
print("****OOPS! MISSED!****")
print("\nWasn't it fun! Bye!")
At the start of the program, all bones should now be buried and cannot be seen by the player. Then, as the game executes, the player is asked to guess where the bones are buried by entering the row number and the column number of a cell in the backyard. If a bone section is indeed buried at this cell, this section of the bone displays a “ B ” in this cell.
Here is a sample of what the program does:
