3

我正在制作战舰游戏,一切正常。但是由于我已经包含了一个回合系统,所以游戏无法正常运行。游戏有两个板(一个是隐藏的,另一个是“公共”的,对手可以看到(所以没有船)。隐藏的作品,但公共每回合都会重置,所以你看不到你之前的命中是什么。

下面的代码是针对“攻击”序列的,当然还有轮流的 while 循环。那么,您对正确实施转弯系统有何建议?我只需要从功能中获取有关“公共”板的信息。

    def napad(osebni_board):

    board = [] #this is the public board, the 'private' one is defined in another function (the board is called osebni_board)
    for x in range(0,5):
        board.append([" "] * 5)
    x=0
    while x<1 :
        napad_vrstica=streljaj_vrstica()
        napad_stolpec = streljaj_stolpec()
        osebni_board_priverjanje = list(itertools.chain(*osebni_board))

        if napad_vrstica <= len(board)-1 and napad_stolpec <= len(board[0])-1 and "S"  in osebni_board_priverjanje:
            print osebni_board_priverjanje
            if  osebni_board[napad_vrstica][napad_stolpec]=="S":
                osebni_board[napad_vrstica][napad_stolpec]="" #osebnemu boardu se element S spremeni v element H, zato, da ponovni stren ni razumljen kot zadetek
                board[napad_vrstica][napad_stolpec]="H"
                osebni_board_priverjanje = list(itertools.chain(*osebni_board))

                print True
                print "Kapitan, vase koordinate so se izkazale za tocne. Sovrazna ladja je uspesno potopljena!"
                print_board(board)
                if "S" not in osebni_board_priverjanje:
                    print_board(board)
                    print "game over"
                    break

            elif board[napad_vrstica][napad_stolpec]=="H":
                print "Ladja na koordinatah {},{} je ze bila potopljena, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)



            elif osebni_board[napad_vrstica][napad_stolpec]=="M":
                print "Na koordinate {},{} ste ze streljali, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)



            else:
                board[napad_vrstica][napad_stolpec]="M"
                osebni_board[napad_vrstica][napad_stolpec]="M"
                print "Zadetek neuspesen, kapitan {}!\n".format(ime)
                print_board(board)

        else:
            mrtvi = random.randint(100, 10000)
            print "Kapitan! Zadeli smo obalo! {} mrtvih!\nPoskusite znova!".format(mrtvi)
        x+=1

    return osebni_board_priverjanje

转弯系统:

igralec = 0
while True:
    if igralec%2==0:
        print "Na vrsti je igralec 1"
        napad_igralec_1=napad(igralec_2)

    else:
        print "Na vrsti je igralec 2"
        napad_gralec_2=napad(igralec_1)
    igralec+=1
    print igralec
4

1 回答 1

2

我不确定,因为我无法理解变量名,但是在napad函数的开头,你设置board = []了 ,这样就会删除board. 而且它看起来像是board一个局部变量,所以无论你做什么,它都会在每次函数结束时消失。如果我对您的代码理解正确,那么您似乎每次调用时都将私有板加载到公共板napad中,但如果每次您都以 开头board = [],那么公共板将没有持久状态。当你做类似的事情时board[napad_vrstica][napad_stolpec]="M",你只是在局部变量中设置一个元素,当函数结束board时它被丢弃。napad要解决所有这些问题,您需要在napad函数,用空格初始化它,然后从你的napad函数中引用该公共板(作为全局变量或通过将其作为参数传递)。

于 2012-11-22T19:19:56.100 回答