您的位置:首页 > 编程语言 > Python开发

Python 小练习_battleship

2016-06-21 15:18 393 查看
真心不容易啊................第一个自己完成的游戏,相比笨办法学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 codecademy