Python Forum
Python BattleShips Random Ship placement - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Game Development (https://python-forum.io/forum-11.html)
+--- Thread: Python BattleShips Random Ship placement (/thread-5588.html)



Python BattleShips Random Ship placement - FnaticPutin - Oct-12-2017

Hello. I recently started to code a battleship game in python and after debugging, I wanted to see if I could write a piece of code that places the ship in a random location each time I run the game. I shall place the code below, and if anyone could help me it would be much appreciated. If anyone has any ideas on how to improve the general code. I'm following a set of challenges along with this in order to learn how to create games in python because it's part of my coursework for school. The ship seems to spawn at the same location every time which is 2,3. Can someone help?

import random
store =
for x in range(9):
store.append(random.randint (0, 8))
for y in range(9):
store.append(random.randint (0, 8))

#Setup Global Variables------------------

torpedos = 30
theSea = [["_" for i in range(9)] for j in range(9)] #2D list 9x9
theSea[1][2] = "S" #Place the ship in position x,y
ships = 1 #How many ships to find

#Define procedures and functions --------------------------------

def displayGrid():
print()
print(" 1 2 3 4 5 6 7 8 9 ") #display column headings
for y in range(0,9):
print((y+1), " " , end="") #print without new line
for x in range(0,9):
if (theSea[x] [y] =="S"):
print("_", " " , end="") #hide the ship
else:
print(theSea[x][y] , " " , end="") #print contents of array
print() #next line
print()

#begin main thread -------------------------------------------------
name = input("What is your name:")
print("Welcome to BATTLESHIPS!" + name)
print("An enemy ship is hidden somewhere at sea")
print("You only have 10 torpedos to find it!")

while ships > 0 and torpedos > 0:

displayGrid()

print()

print("You have " +str(torpedos) + " torpedos left.")

print("Target coordinates, Captain?")

refx = int(input("Enter the x coordinate: "))
refy = int(input("Enter the y coordinate: "))

refx = refx -1 #computers count from 0
refy = refy -1 #this could be done with fewer lines

if (theSea[refx][refy] == "S"):
theSea[refx][refy] = "X"
print(" DIRECT HIT, CAPTAIN!")
ships = ships - 1
else:
theSea[refx][refy] = "M"
print("You missed...")

torpedos = torpedos -1
input() #wait for user to press enter before redrawing grid

if ships == 0:
print("Huzah! You sunk all the ships.")
else:
print("You ran out of torpedos" + name)

print("GAME OVER")


RE: Python BattleShips Random Ship placement - j.crater - Oct-12-2017

Hello and welcome! Your project looks nice and I am glad you shared it with us =) However, please, edit your post and put your code in Python code tags. That will make your code readable and make it easier for others to help you.
You can find instructions here.


RE: Python BattleShips Random Ship placement - Windspar - Oct-13-2017

(Oct-12-2017, 07:35 AM)FnaticPutin Wrote: Hello. I recently started to code a battleship game in python and after debugging, I wanted to see if I could write a piece of code that places the ship in a random location each time I run the game. I shall place the code below, and if anyone could help me it would be much appreciated. If anyone has any ideas on how to improve the general code. I'm following a set of challenges along with this in order to learn how to create games in python because it's part of my coursework for school. The ship seems to spawn at the same location every time which is 2,3. Can someone help?

import random
store =
for x in range(9):
store.append(random.randint (0, 8))
for y in range(9):
store.append(random.randint (0, 8))

#Setup Global Variables------------------

torpedos = 30
theSea = [["_" for i in range(9)] for j in range(9)] #2D list 9x9
theSea[1][2] = "S" #Place the ship in position x,y
ships = 1 #How many ships to find

#Define procedures and functions --------------------------------

def displayGrid():
print()
print(" 1 2 3 4 5 6 7 8 9 ") #display column headings
for y in range(0,9):
print((y+1), " " , end="") #print without new line
for x in range(0,9):
if (theSea[x][y] =="S"):
print("_", " " , end="") #hide the ship
else:
print(theSea[x][y] , " " , end="") #print contents of array
print() #next line
print()

#begin main thread -------------------------------------------------
name = input("What is your name:")
print("Welcome to BATTLESHIPS!" + name)
print("An enemy ship is hidden somewhere at sea")
print("You only have 10 torpedos to find it!")

while ships > 0 and torpedos > 0:

displayGrid()

print()

print("You have " +str(torpedos) + " torpedos left.")

print("Target coordinates, Captain?")

refx = int(input("Enter the x coordinate: "))
refy = int(input("Enter the y coordinate: "))

refx = refx -1 #computers count from 0
refy = refy -1 #this could be done with fewer lines

if (theSea[refx][refy] == "S"):
theSea[refx][refy] = "X"
print(" DIRECT HIT, CAPTAIN!")
ships = ships - 1
else:
theSea[refx][refy] = "M"
print("You missed...")

torpedos = torpedos -1
input() #wait for user to press enter before redrawing grid

if ships == 0:
print("Huzah! You sunk all the ships.")
else:
print("You ran out of torpedos" + name)

print("GAME OVER")

This is your code. Not just copy and paste.
The reason it always show up is because you told it to.
theSea[1][2] = "S" #Place the ship in position x,y