Python Forum
Python BattleShips Random Ship placement
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python BattleShips Random Ship placement
#1
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")
Reply
#2
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.
Reply
#3
(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
99 percent of computer problems exists between chair and keyboard.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Getting a ship to move in pygame djwilson0495 2 3,552 Dec-09-2020, 11:03 AM
Last Post: djwilson0495
  Window Color/Adding a ship kleeklee 2 4,561 May-29-2020, 01:30 AM
Last Post: kleeklee
  Pygame Class Sprite Placement Confusion TheHumbleIdiot 2 3,518 Sep-11-2018, 02:19 PM
Last Post: TheHumbleIdiot
  Battleships Program must display how many ships are left after each turn FnaticPutin 1 3,101 Oct-24-2017, 03:21 PM
Last Post: Windspar

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020