Python 小练习_battleship
真心不容易啊................第一個自己完成的游戲,相比笨辦法學python里面的直接照著例子寫游戲來理解,這個游戲的接近20的steps,太補充基礎知識了
雖然是小游戲,但是過程中還是大量查詢了stackoverflow上和百度上面別人的代碼,隨后補基礎
我們主要來看注釋吧
from random import randint?????????? #從random模塊中引入randint功能
board = []?????????????????????????????????????? #創建一個空list,作為地圖基礎
for x in range(5):??????????????????????????? #通過for循環,創建一個5×5的范圍地圖,這一步非常重要,for循環來控制循環數量,激活append的功能!
??? board.append(["O"] * 5)
def print_board(board):????????????????? #這里的row,其實就是5×5里面里面的每個item,就是['O','O','O','O','O']
??? for row in board:??????????????????????? #在整個地圖list內,有5個這樣的item
??????? print " ".join(row)??????????????????? #在每個item內,每2個元素間添加空格
print "Let's play Battleship!"?????????? #運行程序后開始的第一句話
print_board(board)??????????????????????? #顯示地圖
def random_row(board):???????????????? #這一步是定義隨機產生戰艦的位置行坐標
??? return randint(0, len(board) - 1)? #位置的坐標是從0到4.??????? ?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):????????????????????????#這句是計算一個猜了幾次,最多只能猜4次
??? guess_row = int(raw_input("Guess Row:"))?????#以下2句是要求玩家輸入位置坐標,這個功能不僅是提供了輸入功能,同時,非常重要的是,他控制了for turn這個歷遍
??? guess_col = int(raw_input("Guess Col:"))??????#不是一次性歷遍4次,而是一次歷遍完了以后,再輸入,再進行次數累加,避免了一口氣歷遍完range(4)的情況!
??? if guess_row == ship_row and guess_col == ship_col:?? #判斷猜測坐標和實際船坐標是否一致
??????? print "Congratulations! You sunk my battleship!"
??????? break????????????????????????????????????????????????????????????????????????????#一個簡單的break,但是功能是在玩家猜對后直接跳出循環,而不用在猜對的情況下還繼續玩滿4次
??? else:
????????if guess_row not in range(5) or guess_col not in range(5):? #避免猜測范圍超出地圖限制 ,這里的 not in寫法,記一下,基礎知識需要補齊
??????????? 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"???? #這句非常重要,將你猜測的坐標值,賦給"X",只能寫.....="X",而不能寫"X"=.....? 因為這是將X 賦值給坐標
??? print "Turn", turn + 1 #Print (turn + 1) here!?? #打印當前測試的次數
??? print_board(board)??????????????????????????????????????? #再次顯示地圖(包含X的地圖)
??? if turn == 3:?????????????????????????????????????????????????? #如果turn等于3(也就是猜測次數是4的時候),游戲結束
??????? print "Game Over"
最后的最后,程序里面判斷猜測坐標是否在地圖內,還把負數給涵蓋了,比我自己寫的更加嚴謹。
??????? if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
總結
以上是生活随笔為你收集整理的Python 小练习_battleship的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用好谷歌等搜索引擎?
- 下一篇: Leetcode 317. Shorte