본문 바로가기

컴퓨터 언어/python

Python 8. Battleship game

# 5 x 5의 그리드에서 한 군데에 타겟(Battle ship)이 숨어있고

4회 안에 Battleship을 찾지 못하면 missed로 게임이 끝나는 게임을 제작해보겠습니다.

Row : 줄 , Col : 열을 입력해서 체킹하는 방식을 쓸 것입니다.

 

problem1)

'board'라는 변수를 만들고 빈 리스트를 할당해주세요

board=[]

 

 

#우리는 초기화면이 다음과 같이 5X5 그리드로 보이게 하고 체킹하면 O가 X표시가 되는 방식을 이용할 겁니다

OOOOO

OOOOO

OOOOO

OOOOO

OOOOO

 

problem2) 5x5 그리드를 “O"로 채워보는 방식을 씁시다

board 안은 다음과 같이 채워지도록 할 겁니다.

[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]

 

1. range() 구문을 통해 5회 반복합니다 hint: for 문과 range 를 동시에 쓰면 됩니다.

2. .append() 구문을 이용해 5개의 리스트가 만들어지도록 합시다. 여기서 O는 알파벳이고 숫자가 아닙니다.

board = []
for i in range(5):
  board.append(['O'] * 5)
print board

"""[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]"""

 

 

problem3)

board_in 이라는 매개변수를 가지는 print_board 함수를 정의합니다.

for문을 통해 board의 row를 접근해 출력하는 함수를 만들어 냅니다. ->  for row in board:

print_board(board)를 통해 제대로 작성되었는지 확인해봅시다.

board = []
for i in range(5):
  board.append(['O'] * 5)

def print_board(board_in):
    for row in board:
        print row

print_board(board)


"""
['O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O']"""

 

 

 

#아직은 ‘O','O','O','O','O' 로 출력이되고 있습니다. 이것들을 예쁘게 출력하려면 어떻게 해야할까요?

 

letters = ['a', 'b', 'c', 'd']

print " ".join(letters)

print "---".join(letters)

위의 문장을 사용하면 결합 되는 방식을 조절 할 수 있습니다.

 

problem4)

for 반복문 안에 “ ”과 .join을 이용해 각각의 행의 연결이 자연스럽게 해봅시다

board = []
for i in range(5):
  board.append(['O'] * 5)

def print_board(board_in):
    for row in board:
        print " ".join(row)
        
print_board(board)


"""
O O O O O
O O O O O
O O O O O
O O O O O
O O O O O"""

 

 

#이제 배틀쉽을 숨겨볼 때가 왔습니다

from random import randint

coin = randint(0, 1)

dice = randint(1, 6)

coin 에 0~1까지의 정수중 하나가 랜덤하게 들어간다

dice 에 1~6까지의 정수중 하나가 랜덤하게 들어간다는 뜻입니다

 

problem5)

random_row, random_col 이라는 함수를 정의하고 그 함수는 각각은 행과 열의 범위 안에서의 랜덤 정수를 반환하는 형식 randint(0, len(board_in) - 1)을 반환하기만 하면 됩니다.(매개변수는 board 만들어가면 되겠죠)

board = []
for i in range(5):
  board.append(['O'] * 5)

def print_board(board_in):
    for row in board:
        print " ".join(row)


from random import randint
def random_row(board):
    return randint(0,len(board)-1)
def random_col(board):
    return randint(0,len(board)-1)

random_row(board)
random_col(board)


print_board(board)

 

 

#number = raw_input("Enter a number: ") # 숫자입력

if int(number) == 0: # 입력한 숫자를 정수로 변환

print "You entered 0“

 

problem6)

guess_row,guess_col 이라는 변수를 만들고,

사용자가 입력해서 배틀쉽이 있을거라 생각되는  행,열이 저장되게 해봅시다.

 

int(raw_input("Guess Row: "))

int(raw_input("Guess Col: "))

이걸 이용하면 되겠죠?

board = []
for i in range(5):
  board.append(['O'] * 5)

def print_board(board_in):
    for row in board:
        print " ".join(row)


from random import randint
def random_row(board):
    return randint(0,len(board)-1)
def random_col(board):
    return randint(0,len(board)-1)

random_row(board)
random_col(board)

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

 

 

problem7) 컴퓨터가 만들어낸 랜덤 행,렬, 숨겨놓은 배틀쉽의 위치를 먼저 알 수 있도록 해봅시다. 이는 우리가 제대로 코드를 작성했는지 안했는지를 계속 체킹하면서코드를 작성하기 위함입니다.

 

ship_row, ship_col을 출력하고 그 다음에 guess_row, guess_col을 입력을 받도록 진행해주세요

from random import randint

board = []

for x in range(0, 5):
  board.append(["O"] * 5)

def print_board(board):
  for row in board:
    print " ".join(row)

def random_row(board):
  return randint(0, len(board) - 1)

def random_col(board):
  return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
# Add your code below!
print ship_row
print ship_col

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

 

 

problem8) 만약에 컴퓨터가 만든 임의의 배틀쉽의 위치와 사용자가 입력한 값이 같으면

"Congratulations! You sank my battleship!"

이 출력 되도록 합시다

 

guess row와 ship,row가 같고 guess_col 과 ship_col 이 같은 조건이라고 하면 되겠죠?

from random import randint

board = []

for x in range(0, 5):
  board.append(["O"] * 5)

def print_board(board):
  for row in board:
    print " ".join(row)

def random_row(board):
  return randint(0, len(board) - 1)

def random_col(board):
  return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
# Add your code below!
print ship_row
print ship_col

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

if guess_row==ship_row and guess_col==ship_col:
    print "Congratulations! You sank my battleship!"

 

 

#print board[2][3]#2차원의 행렬의 경우에는 2번재 행에 3번째 열의 값을 출력하겠다.

 

problem9) else구문을 이용해서 틀렸을 경우에는 "You missed my battleship!"이라고 표기하고 추정한 곳 guess_row,guess_coll의 위치의 값은 O에서 X로 변경해봅시다.

 

from random import randint

board = []

for x in range(0, 5):
  board.append(["O"] * 5)

def print_board(board):
  for row in board:
    print " ".join(row)

def random_row(board):
  return randint(0, len(board) - 1)

def random_col(board):
  return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
# Add your code below!
print ship_row
print ship_col

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

if guess_row==ship_row and guess_col==ship_col:
    print "Congratulations! You sank my battleship!"
else:
    print  "You missed my battleship!"
    board[guess_row][guess_col] = "X"
    print_board(board)


"""
1
3
Guess Row: 3
Guess Col: 3
You missed my battleship!
O O O O O
O O O O O
O O O O O
O O O X O
O O O O O"""

 

#최종+ 3회 한도두기

from random import randint

board = []

for x in range(0, 5):
  board.append(["O"] * 5)

def print_board(board):
  for row in board:
    print " ".join(row)

print_board(board)

def random_row(board):
  return randint(0, len(board) - 1)

def random_col(board):
  return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
print ship_row
print ship_col

for turn in range(4):
  print "Turn", turn + 1
  guess_row = int(raw_input("Guess Row: "))
  guess_col = int(raw_input("Guess Col: "))

  if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
    break
  else:
    if guess_row not in range(5) or \
      guess_col not in range(5):
      print "Oops, that's not even in the ocean."
    elif board[guess_row][guess_col] == "X":
      print( "You guessed that one already." )
    else:
      print "You missed my battleship!"
      board[guess_row][guess_col] = "X"
    if (turn == 3):
      print "Game Over"
    print_board(board)

'컴퓨터 언어 > python' 카테고리의 다른 글

Python 10. Class  (0) 2020.07.20
파이썬 기초 4  (0) 2020.07.15
Python 7. LOOP  (0) 2020.07.15
파이썬 기초1  (0) 2020.07.15
Python 5: List + Dictinaray + for루프  (0) 2020.07.14