Python学习笔记(5),Battleship 游戏
生活随笔
收集整理的這篇文章主要介紹了
Python学习笔记(5),Battleship 游戏
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.建立“海洋”:一個(gè)5*5的網(wǎng)格,每個(gè)格子里面的元素均為‘O’,可以使用list來產(chǎn)生5個(gè)O,
board=[]
for item in range(5):board.append(['O']*5)
print board
但是這樣顯示的結(jié)果是一行,并非我們想要的 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循環(huán)來換行: board=[] for item in range(5):board.append(['O']*5) def print_board(board):for row in board:print row print_board(board)
但是這也是很不美觀,如果能把引號(hào)和方括號(hà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)結(jié)果明顯好了很多: 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.最終,以及測(cè)試: 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放在所有錯(cuò)誤的這個(gè)else里面,因?yàn)槿绻谒拇芜€進(jìn)入錯(cuò)誤,則游戲輸了
但是這樣顯示的結(jié)果是一行,并非我們想要的 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循環(huán)來換行: board=[] for item in range(5):board.append(['O']*5) def print_board(board):for row in board:print row print_board(board)
結(jié)果是已經(jīng)分行了:
['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']但是這也是很不美觀,如果能把引號(hào)和方括號(hà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)結(jié)果明顯好了很多: 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. 藏戰(zhàn)艦,找戰(zhàn)艦:
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有區(qū)別,兩者都是內(nèi)置函數(shù) 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: #如果猜的和隨機(jī)給予的位置相同,則游戲成功print "Congratulations! You sank my battleship"else:if guess_row not in range(5) or \guess_col not in range(5): #如果猜的數(shù)字不在范圍內(nèi),則報(bào)錯(cuò)print "Oops, that's not even in the ocean."elif board[guess_row][guess_col]=='X': #如果猜過了,則報(bào)錯(cuò)print "You guessed that one already."else:print "You missed my battleship!"board[guess_row][guess_col]="X" #把一個(gè)list的某一個(gè)元素改成另一個(gè)元素,則利用list[i][j]來print_board(board)3.最終,以及測(cè)試: 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放在所有錯(cuò)誤的這個(gè)else里面,因?yàn)槿绻谒拇芜€進(jìn)入錯(cuò)誤,則游戲輸了
4.可以根據(jù)需要把游戲變得復(fù)雜一點(diǎn),
比如增加一艘船,但是兩艘船的位置又不能重合;
有如將其變成兩個(gè)人的游戲;
又如將船的尺寸變大,此時(shí)要考慮船身其中一點(diǎn)在在海洋里,另一點(diǎn)又在海洋外;
總結(jié)
以上是生活随笔為你收集整理的Python学习笔记(5),Battleship 游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android12及所有版本解决没有sy
- 下一篇: websocket python爬虫_p