制作简单的战舰游戏

时间:2015-03-04 22:32:57

标签: python

我正在尝试实施简单的战舰游戏。这是一款与电脑相比的单人游戏。到目前为止,我只能输入我的船的位置,而我的程序没有打破大声笑。

我试图为计算机生成随机坐标,但我无法弄清楚将它们放在一起(垂直或水平)而不重叠它们的逻辑。

我仍然需要沉船的条件,当游戏结束时,我不知道如何去做。我最好(也是唯一)的过程是循环遍历每个玩家和计算机命中板的元素(为计算机和玩家记录的命中)并计算是否有5'A',3'C'和2' D'在板上。如果有,则该玩家获胜。

from random import random, randrange

def emptyBoard():
    empBoard = [ ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*'],
             ['*','*','*','*','*','*','*']]
    return empBoard

def placeMyShips(myBoard):

    for a in range(5):
        x,y = eval(input('Enter coordinate of Aircarrier: '))
        myBoard [x][y] = 'A' 

    for c in range(3):
        x1,y1 = eval(input('Enter coordinate of Cruiser: '))
        myBoard [x1][y1] = 'C'
    for d in range(2):
        x2,y2 = eval(input('Enter coordinate of Destroyer: '))
        myBoard [x2][y2] = 'D'

    print ('\tMy Fleet')
    for i in myBoard:
        print (i)

    return myBoard

def placeCompShips(compBoard):

    for a in range (5):
        x= randrange(0,5)
        y= x+1      
        compBoard[x][y]= 'A'

    for c in range (3):
        x1= randrange(0,5)
        y1= x1+1
        if compBoard [x1][y1] == '*':
            compBoard[x1][y1]= 'C'            

    for d in range (2):
        x2= randrange(0,5)
        y2= x2+1
        if compBoard [x2][y2] =='*':
        compBoard[x2][y2] = 'D'

    return compBoard

def myMoves(compBoard,myHitBoard):  
    x,y = eval(input('Enter your move as coordinate: '))
    if compBoard[x][y] == 'A':
        myHitBoard[x][y] =='A'
        print('Computer: You hit my Aircarrier')

    elif compBoard [x][y] == 'C':
        myHitBoard[x][y] =='C'
        print('Computer: You hit my Cruiser')

    elif compBoard [x][y] == 'D':
        myHitBoard[x][y] =='D'
        print('Computer: You hit my Destroyer')

    else:
        myHitBoard [x][y] = 'M'
        print('Computer: Shot was a miss')

    print ('My hits on the computer')
    for i in myHitBoard:
        print (i)

    return myHitBoard

def compMoves(myBoard,compHitBoard):

    x,y = eval(input('Enter your move as coordinate '))
    if myBoard[x][y] == 'A':          
        compHitBoard [x][y] = 'A'
        print('Player: You hit my Aircarrier')
    elif myBoard [x][y] == 'C':
        compHitBoard[x][y] =='C'
        print('Player: You hit my Cruiser')
    elif myBoard [x][y] == 'D':
        compHitBoard[x][y] =='D'
        print('Player: You hit my Destroyer')
    else:
        compHitBoard [x][y] = 'M'
        print('Player: Shot was a miss')
    return compHitBoard


def intro():
    print('BATTLESHIP')
    print('This is a one player game versus the computer')

def main():
    intro()

    placeMyShips(emptyBoard())
    placeCompShips(emptyBoard())

main()

1 个答案:

答案 0 :(得分:0)

我认为你不太可能因为它的广度而得到这个问题的好答案,但是我认为你试图对你的参数问题做的更像是:

def main():
    intro()

    my_board = placeMyShips(emptyBoard())
    my_hit_board = emptyBoard()
    comp_board = placeCompShips(emptyBoard())
    comp_hit_board = emptyBoard()

    myMoves(comp_board, my_hit_board)

还请注意我的变量名称。函数不应该使用mixedCase名称,除非它已在该项目中建立(例如,这个新项目,其他所有项目应使用lowercase_names),按PEP8