Python学习笔记(5),Battleship 游戏
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Python学习笔记(5),Battleship 游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            1.建立“海洋”:一個5*5的網格,每個格子里面的元素均為‘O’,可以使用list來產生5個O,
board=[]
for item in range(5):board.append(['O']*5)
print board
但是這樣顯示的結果是一行,并非我們想要的 5*5: [['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']]
可以使用for循環來換行: board=[] for item in range(5):board.append(['O']*5) def print_board(board):for row in board:print row print_board(board)
 
但是這也是很不美觀,如果能把引號和方括號去掉就更好了,python可以使用 .join的方法: letters = ['a', 'b', 'c', 'd']print " ".join(letters)
print "---".join(letters) 可以分別打出 a b c d,以及 a---b---c---d board=[] for item in range(5):board.append(['O']*5) def print_board(board):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
 
 
3.最終,以及測試: from random import randintboard = []for x in range(5):board.append(["O"] * 5)def print_board(board):for row in board:print " ".join(row)print "Let's play Battleship!" 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# Everything from here on should go in your for loop! # Be sure to indent four spaces! for Turn in range(4):print "Turn: "Turn+1 #由于range(4)是從0~3,因此第n輪需要顯示的是n+1guess_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 sunk my battleship!"break #如果贏了就退出else:if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):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"# Print (turn + 1) here!print_board(board)if Turn==3:print "Game Over" #game over放在所有錯誤的這個else里面,因為如果第四次還進入錯誤,則游戲輸了
 
                        
                        
                        但是這樣顯示的結果是一行,并非我們想要的 5*5: [['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']]
可以使用for循環來換行: board=[] for item in range(5):board.append(['O']*5) def print_board(board):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']但是這也是很不美觀,如果能把引號和方括號去掉就更好了,python可以使用 .join的方法: letters = ['a', 'b', 'c', 'd']print " ".join(letters)
print "---".join(letters) 可以分別打出 a b c d,以及 a---b---c---d board=[] for item in range(5):board.append(['O']*5) def print_board(board):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
2. 藏戰艦,找戰艦:
from random import randintboard = []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) guess_row = int(raw_input("Guess Row:")) #input和rawinput有區別,兩者都是內置函數 guess_col = int(raw_input("Guess Col:"))print ship_row print ship_col# Write your code below! if guess_row==ship_row and guess_col==ship_col: #如果猜的和隨機給予的位置相同,則游戲成功print "Congratulations! You sank my battleship"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" #把一個list的某一個元素改成另一個元素,則利用list[i][j]來print_board(board)3.最終,以及測試: from random import randintboard = []for x in range(5):board.append(["O"] * 5)def print_board(board):for row in board:print " ".join(row)print "Let's play Battleship!" 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# Everything from here on should go in your for loop! # Be sure to indent four spaces! for Turn in range(4):print "Turn: "Turn+1 #由于range(4)是從0~3,因此第n輪需要顯示的是n+1guess_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 sunk my battleship!"break #如果贏了就退出else:if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):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"# Print (turn + 1) here!print_board(board)if Turn==3:print "Game Over" #game over放在所有錯誤的這個else里面,因為如果第四次還進入錯誤,則游戲輸了
4.可以根據需要把游戲變得復雜一點,
比如增加一艘船,但是兩艘船的位置又不能重合;
有如將其變成兩個人的游戲;
又如將船的尺寸變大,此時要考慮船身其中一點在在海洋里,另一點又在海洋外;
 
總結
以上是生活随笔為你收集整理的Python学习笔记(5),Battleship 游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Android12及所有版本解决没有sy
- 下一篇: 【Codeforces Round #4
