Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import random
- os.system('cls')
- """ Single Player BattleShip Game Info:
- Boards have 100 cells in 10 rows numbered A0 through J9
- (chose to use 0-9 instead of traditional 1-10 to simplify code)
- Cells will have 3 states:
- "-" = empty or unknown
- "O" = filled
- "X" = bombed
- "@" = known hit
- players have 7 ships in their fleet:
- Aircraft Carrier (5 cells)
- Battleship (4 cells)
- Cruiser (3 cells)
- Destroyer 1 (2 cells)
- Destroyer 2 (2 cells)
- Submarine 1 (1 cell)
- Submarine 2 (1 cell)
- """
- def initialize_player(player_board): #initialize blank Player game board
- player_board = {
- "A0":"-","A1":"-","A2":"-","A3":"-","A4":"-","A5":"-","A6":"-","A7":"-","A8":"-","A9":"-",
- "B0":"-","B1":"-","B2":"-","B3":"-","B4":"-","B5":"-","B6":"-","B7":"-","B8":"-","B9":"-",
- "C0":"-","C1":"-","C2":"-","C3":"-","C4":"-","C5":"-","C6":"-","C7":"-","C8":"-","C9":"-",
- "D0":"-","D1":"-","D2":"-","D3":"-","D4":"-","D5":"-","D6":"-","D7":"-","D8":"-","D9":"-",
- "E0":"-","E1":"-","E2":"-","E3":"-","E4":"-","E5":"-","E6":"-","E7":"-","E8":"-","E9":"-",
- "F0":"-","F1":"-","F2":"-","F3":"-","F4":"-","F5":"-","F6":"-","F7":"-","F8":"-","F9":"-",
- "G0":"-","G1":"-","G2":"-","G3":"-","G4":"-","G5":"-","G6":"-","G7":"-","G8":"-","G9":"-",
- "H0":"-","H1":"-","H2":"-","H3":"-","H4":"-","H5":"-","H6":"-","H7":"-","H8":"-","H9":"-",
- "I0":"-","I1":"-","I2":"-","I3":"-","I4":"-","I5":"-","I6":"-","I7":"-","I8":"-","I9":"-",
- "J0":"-","J1":"-","J2":"-","J3":"-","J4":"-","J5":"-","J6":"-","J7":"-","J8":"-","J9":"-",
- }
- return player_board
- def initialize_computer(computer_board):#initialize blank Computer game board
- computer_board = {
- "A0":"-","A1":"-","A2":"-","A3":"-","A4":"-","A5":"-","A6":"-","A7":"-","A8":"-","A9":"-",
- "B0":"-","B1":"-","B2":"-","B3":"-","B4":"-","B5":"-","B6":"-","B7":"-","B8":"-","B9":"-",
- "C0":"-","C1":"-","C2":"-","C3":"-","C4":"-","C5":"-","C6":"-","C7":"-","C8":"-","C9":"-",
- "D0":"-","D1":"-","D2":"-","D3":"-","D4":"-","D5":"-","D6":"-","D7":"-","D8":"-","D9":"-",
- "E0":"-","E1":"-","E2":"-","E3":"-","E4":"-","E5":"-","E6":"-","E7":"-","E8":"-","E9":"-",
- "F0":"-","F1":"-","F2":"-","F3":"-","F4":"-","F5":"-","F6":"-","F7":"-","F8":"-","F9":"-",
- "G0":"-","G1":"-","G2":"-","G3":"-","G4":"-","G5":"-","G6":"-","G7":"-","G8":"-","G9":"-",
- "H0":"-","H1":"-","H2":"-","H3":"-","H4":"-","H5":"-","H6":"-","H7":"-","H8":"-","H9":"-",
- "I0":"-","I1":"-","I2":"-","I3":"-","I4":"-","I5":"-","I6":"-","I7":"-","I8":"-","I9":"-",
- "J0":"-","J1":"-","J2":"-","J3":"-","J4":"-","J5":"-","J6":"-","J7":"-","J8":"-","J9":"-",
- }
- return computer_board
- def initialize_hit(hit_board):#initialize blank board to displayer player shots
- hit_board = {
- "A0":"-","A1":"-","A2":"-","A3":"-","A4":"-","A5":"-","A6":"-","A7":"-","A8":"-","A9":"-",
- "B0":"-","B1":"-","B2":"-","B3":"-","B4":"-","B5":"-","B6":"-","B7":"-","B8":"-","B9":"-",
- "C0":"-","C1":"-","C2":"-","C3":"-","C4":"-","C5":"-","C6":"-","C7":"-","C8":"-","C9":"-",
- "D0":"-","D1":"-","D2":"-","D3":"-","D4":"-","D5":"-","D6":"-","D7":"-","D8":"-","D9":"-",
- "E0":"-","E1":"-","E2":"-","E3":"-","E4":"-","E5":"-","E6":"-","E7":"-","E8":"-","E9":"-",
- "F0":"-","F1":"-","F2":"-","F3":"-","F4":"-","F5":"-","F6":"-","F7":"-","F8":"-","F9":"-",
- "G0":"-","G1":"-","G2":"-","G3":"-","G4":"-","G5":"-","G6":"-","G7":"-","G8":"-","G9":"-",
- "H0":"-","H1":"-","H2":"-","H3":"-","H4":"-","H5":"-","H6":"-","H7":"-","H8":"-","H9":"-",
- "I0":"-","I1":"-","I2":"-","I3":"-","I4":"-","I5":"-","I6":"-","I7":"-","I8":"-","I9":"-",
- "J0":"-","J1":"-","J2":"-","J3":"-","J4":"-","J5":"-","J6":"-","J7":"-","J8":"-","J9":"-",
- }
- return hit_board
- def error(): #if I screwed up
- print "D10D3, your code sucks again"
- quit()
- def display_board(board): #displays selected board neatly
- print " 0 1 2 3 4 5 6 7 8 9"
- print " ____________________"
- print "A |"+" "+board["A0"]+" "+board["A1"]+" "+board["A2"]+" "+board["A3"]+" "+board["A4"]+" "+board["A5"]+" "+board["A6"]+" "+board["A7"]+" "+board["A8"]+" "+board["A9"]+"|"
- print "B |"+" "+board["B0"]+" "+board["B1"]+" "+board["B2"]+" "+board["B3"]+" "+board["B4"]+" "+board["B5"]+" "+board["B6"]+" "+board["B7"]+" "+board["B8"]+" "+board["B9"]+"|"
- print "C |"+" "+board["C0"]+" "+board["C1"]+" "+board["C2"]+" "+board["C3"]+" "+board["C4"]+" "+board["C5"]+" "+board["C6"]+" "+board["C7"]+" "+board["C8"]+" "+board["C9"]+"|"
- print "D |"+" "+board["D0"]+" "+board["D1"]+" "+board["D2"]+" "+board["D3"]+" "+board["D4"]+" "+board["D5"]+" "+board["D6"]+" "+board["D7"]+" "+board["D8"]+" "+board["D9"]+"|"
- print "E |"+" "+board["E0"]+" "+board["E1"]+" "+board["E2"]+" "+board["E3"]+" "+board["E4"]+" "+board["E5"]+" "+board["E6"]+" "+board["E7"]+" "+board["E8"]+" "+board["E9"]+"|"
- print "F |"+" "+board["F0"]+" "+board["F1"]+" "+board["F2"]+" "+board["F3"]+" "+board["F4"]+" "+board["F5"]+" "+board["F6"]+" "+board["F7"]+" "+board["F8"]+" "+board["F9"]+"|"
- print "G |"+" "+board["G0"]+" "+board["G1"]+" "+board["G2"]+" "+board["G3"]+" "+board["G4"]+" "+board["G5"]+" "+board["G6"]+" "+board["G7"]+" "+board["G8"]+" "+board["G9"]+"|"
- print "H |"+" "+board["H0"]+" "+board["H1"]+" "+board["H2"]+" "+board["H3"]+" "+board["H4"]+" "+board["H5"]+" "+board["H6"]+" "+board["H7"]+" "+board["H8"]+" "+board["H9"]+"|"
- print "I |"+" "+board["I0"]+" "+board["I1"]+" "+board["I2"]+" "+board["I3"]+" "+board["I4"]+" "+board["I5"]+" "+board["I6"]+" "+board["I7"]+" "+board["I8"]+" "+board["I9"]+"|"
- print "J |"+" "+board["J0"]+" "+board["J1"]+" "+board["J2"]+" "+board["J3"]+" "+board["J4"]+" "+board["J5"]+" "+board["J6"]+" "+board["J7"]+" "+board["J8"]+" "+board["J9"]+"|"
- print " ----------------------"
- def shipname(ship): #convert ships cell to ship name
- shipname = ""
- if ship == 1:
- shipname = "Aircraft Carrier (5 cells)"
- elif ship == 2:
- shipname = "BattleShip (4 cells)"
- elif ship == 3:
- shipname = "Cruiser (3 cells)"
- elif ship == 4:
- shipname = "Destroyer 1 (2 cells)"
- elif ship == 5:
- shipname = "Destroyer 2 (2 cells)"
- elif ship == 6:
- shipname = "Submarine 1 (1 cell)"
- elif ship == 7:
- shipname = "Submarine 2 (1 cell)"
- else:
- error()
- return shipname
- def player_setup(board): #Player places his ships
- for i in range (1,8):
- while True:
- os.system('cls')
- intro_banner()
- ships = [5,4,3,2,2,1,1] #cell size of each of the ships
- ship_length = ships[i-1]
- display_board(board)
- print "-= PLAYER BOARD SETUP =-"
- print ""
- print " For each selection, first choose the top left ship position,"
- print " then choose to fill to the right or down"
- print " Where would you like to place %s" % shipname(i)
- choice = choose_cell() #player chooses coordinate
- while True:
- direction = raw_input (' Fill in ship across or down? (A or D)> ')
- direction.lower()
- if direction == 'a':
- break
- elif direction == 'd':
- break
- else:
- print " Please enter A or D"
- selection = generate_selection(choice,ship_length,direction)
- test = test_selection(selection,board)
- if test == True:
- board = write_ship(selection,board)
- break
- else:
- print ""
- print " That ship won't fit there, choose another spot"
- raw_input (' <Press a Enter to select again>')
- return board
- def AI_setup(board): #AI places ships
- for i in range (1,8):
- while True:
- ships = [5,4,3,2,2,1,1] #cell size of each of the ships (+1 to help for/next iteration)
- ship_length = ships[i-1]
- choice = choose_cell_AI() #Computer chooses coordinate
- dir_pos = ["a","d"] #possible orientations: Across or Down
- direction = random.choice(dir_pos)
- selection = generate_selection(choice,ship_length,direction)
- test = test_selection(selection,board)
- if test == True:
- board = write_ship(selection,board)
- print "Generating game boards..."
- break
- else:
- print "Generating game boards..."
- return board
- def choose_cell(): #Asks player for cell choice, returns value
- while True:
- row = raw_input (' What Row? (A-J)> ')
- row = row.upper()
- letters = "ABCDEFGHIJ"
- if row in letters:
- break
- else:
- print " Please type a letter from A to J"
- raw_input (' <Press a Enter to select again>')
- while True:
- column = raw_input(' What Column? (0-9)> ')
- #column = int(column)
- numbers = '0,1,2,3,4,5,6,7,8,9'
- if column in numbers:
- break
- else:
- print " Please type a number from 1 to 10"
- raw_input (' <Press a Enter to select again>')
- choice = ""
- choice = choice + row + column
- return choice
- def choose_cell_AI(): #Generates random cell choice, returns value
- letters = ["A","B","C","D","E","F","G","H","I","J"]
- numbers = ["0","1","2","3","4","5","6","7","8","9"]
- row = random.choice(letters)
- column = random.choice(numbers)
- choice = ""
- choice = choice + row + column
- return choice
- def generate_selection(choice,ship_length,direction): #Generates list of selected cells to place ship
- selection = [choice]
- if direction == 'a':
- #across stuff
- for i in range(1,ship_length):
- addrow = choice[0]
- addnum = choice[1]
- addnum = int(addnum)
- addnum += i
- addnum = str(addnum)
- addselect = ""
- addselect = addselect + addrow + addnum
- selection.append(addselect)
- else:
- #down stuff
- for i in range(1,ship_length):
- addrow = ord(choice[0]) #translates the letter into and ascii number
- addrow += (i) #iterates it by 1
- addrow = chr(addrow) #translates it back into a letter!
- addnum = choice[1]
- addselect = ""
- addselect = addselect + addrow + addnum
- selection.append(addselect)
- return selection
- def test_selection(selection,board): #checks if all cells for selected ship placement are allowed
- test = False
- badcell = False
- for i in range(0,len(selection)): #creates loop based on length of selection
- if selection[i] in board:
- if board[selection[i]] == "-":
- fnord = "fnord"
- else:
- badcell = True
- else:
- badcell = True
- if badcell == True:
- test = False
- else:
- test = True
- return test
- def test_shot(selection,board): #checks if shot is valid
- test = False
- badcell = False
- for i in range(0,len(selection)): #creates loop based on length of selection
- if selection[i] in board:
- if board[selection[i]] == "-":
- fnord = "fnord"
- elif board[selection[i]] == "O":
- fnord = "fnord"
- elif board[selection[i]] == "X":
- badcell = True
- elif board[selection[i]] == "@":
- badcell = True
- else:
- badcell = True
- else:
- badcell = True
- if badcell == True:
- test = False
- else:
- test = True
- return test
- def write_ship(selection,board): #writes the (now checked) ship selection to the board
- writecell = 0
- for i in range(0,len(selection)): #creates loop based on length of selection
- board[selection[i]] = "O"
- return board
- def intro_banner(): #fancy graphics
- print"""
- ______ ___ _____ _____ _ _____ _____ _ _ ___________
- | ___ \/ _ \_ _|_ _| | | ___/ ___| | | |_ _| ___ \
- | |_/ / /_\ \| | | | | | | |__ \ `--.| |_| | | | | |_/ /
- | ___ \ _ || | | | | | | __| `--. \ _ | | | | __/
- | |_/ / | | || | | | | |____| |___/\__/ / | | |_| |_| |
- \____/\_| |_/\_/ \_/ \_____/\____/\____/\_| |_/\___/\_|
- Ver 0.5 by D10D3
- """
- def did_anyone_win(p_board,c_board):
- o_count_player = 0
- o_count_computer = 0
- for i in range(0,10):
- loop = i
- loop = str(loop)
- index_A = "A" + loop
- index_B = "B" + loop
- index_C = "C" + loop
- index_D = "D" + loop
- index_E = "E" + loop
- index_F = "F" + loop
- index_G = "G" + loop
- index_H = "H" + loop
- index_I = "I" + loop
- index_J = "J" + loop
- #check player board for "O"s
- if p_board[index_A] == "O":
- o_count_player += 1
- elif p_board[index_B] == "O":
- o_count_player += 1
- elif p_board[index_C] == "O":
- o_count_player += 1
- elif p_board[index_D] == "O":
- o_count_player += 1
- elif p_board[index_E] == "O":
- o_count_player += 1
- elif p_board[index_F] == "O":
- o_count_player += 1
- elif p_board[index_G] == "O":
- o_count_player += 1
- elif p_board[index_H] == "O":
- o_count_player += 1
- elif p_board[index_I] == "O":
- o_count_player += 1
- elif p_board[index_J] == "O":
- o_count_player += 1
- #check computer board for "O"s
- if c_board[index_A] == "O":
- o_count_computer += 1
- elif c_board[index_B] == "O":
- o_count_computer += 1
- elif c_board[index_C] == "O":
- o_count_computer += 1
- elif c_board[index_D] == "O":
- o_count_computer += 1
- elif c_board[index_E] == "O":
- o_count_computer += 1
- elif c_board[index_F] == "O":
- o_count_computer += 1
- elif c_board[index_G] == "O":
- o_count_computer += 1
- elif c_board[index_H] == "O":
- o_count_computer += 1
- elif c_board[index_I] == "O":
- o_count_computer += 1
- elif c_board[index_J] == "O":
- o_count_computer += 1
- else:
- fnord = "fnord"
- if o_count_player == 0:
- winner = "computer"
- elif o_count_computer == 0:
- winner = "player"
- else:
- winner = "null"
- return winner
- def win():
- print "You Win!"
- while True:
- again = raw_input (' Play Again? Y or N> ')
- again.lower
- if again == "y":
- break
- elif again == "n":
- print "Thanks for playing!"
- quit()
- else:
- print " Enter Y or N"
- def lose():
- print "You Lose!"
- while True:
- again = raw_input (' Play Again? Y or N> ')
- again.lower
- if again == "y":
- break
- elif again == "n":
- print "Thanks for playing!"
- quit()
- else:
- print " Enter Y or N"
- def man_or_ran(player_board): #choose manual or random player board setup
- while True: #choose manual or random player ship placement
- print ""
- print ' Would you like to place your ships manually or randomly?'
- setup = raw_input(' <M>anual or <R>andom? > ')
- setup.lower()
- if setup == 'm':
- player_board = player_setup(player_board)
- break
- elif setup == 'r':
- player_board = AI_setup(player_board)
- break
- else:
- print " Please enter M or R"
- return player_board
- #***INITIALIZE AND SETUP***
- os.system('cls')
- intro_banner()
- player_board = {}
- computer_board = {}
- hit_board = {}
- player_board = initialize_player(player_board)
- computer_board = initialize_computer(computer_board)
- hit_board = initialize_hit(hit_board)
- player_board = man_or_ran(player_board)
- computer_board = AI_setup(computer_board)
- #***BEGIN GAME LOOP***
- while True:
- while True: #did anyone win? if so play again?
- winner = did_anyone_win(player_board,computer_board)
- if winner == "player":
- win()
- os.system('cls')
- intro_banner()
- player_board = {}
- computer_board = {}
- hit_board = {}
- player_board = initialize_player(player_board)
- computer_board = initialize_computer(computer_board)
- hit_board = initialize_hit(hit_board)
- player_board = man_or_ran(player_board)
- computer_board = AI_setup(computer_board)
- break
- elif winner == "computer":
- lose()
- os.system('cls')
- intro_banner()
- player_board = {}
- computer_board = {}
- hit_board = {}
- player_board = initialize_player(player_board)
- computer_board = initialize_computer(computer_board)
- hit_board = initialize_hit(hit_board)
- player_board = man_or_ran(player_board)
- computer_board = AI_setup(computer_board)
- break
- else:
- fnord = "fnord"
- break
- os.system('cls')
- intro_banner()
- print "-= PLAYER SHIPS =-"
- print ""
- display_board(player_board)
- print ""
- print "-= Enemy =-"
- display_board(hit_board) #Show the player where they have shot(and hit) so far
- print ""
- #Player Attack
- while True:
- print " Choose A Cell to Attack!"
- target = choose_cell() #player chooses coordinate
- shooting = [target]
- test = test_shot(shooting,computer_board)
- print ""
- if test == True:
- if computer_board[target] == "-":
- computer_board[target] = "X"
- hit_board[target] = "X"
- print " You didn't hit anything."
- break
- else:
- computer_board[target] = "@"
- print "You hit and enemy ship!"
- hit_board[target] = "@"
- break
- else:
- print ""
- print " That is not a valid target!"
- raw_input (' <Press a Enter to select again>')
- #Computer Attack
- while True:
- target = choose_cell_AI() #AI chooses coordinate
- shooting = [target]
- test = test_shot(shooting,player_board)
- if test == True:
- if player_board[target] == "-":
- player_board[target] = "X"
- print " Computer attacks %s and misses" % target
- raw_input (' <Press a Enter to continue>')
- break
- else:
- player_board[target] = "@"
- print " Computer attacks %s and hits!" % target
- raw_input (' <Press a Enter to continue>')
- break
- else:
- fnord = "fnord"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement