Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒号战列舰,轮流重置棋盘_Python_Loops_Return - Fatal编程技术网

Python 巨蟒号战列舰,轮流重置棋盘

Python 巨蟒号战列舰,轮流重置棋盘,python,loops,return,Python,Loops,Return,我正在做一个战舰游戏,一切正常。但是由于我加入了一个回合制,游戏并没有按它应该的那样运行。游戏有两个棋盘(一个是隐藏的,另一个是“公开的”——对手可以看到的棋盘(因此没有船只)。隐藏的棋盘可以工作,但是公众会重置每一个回合,所以你看不到你以前的命中率 下面的代码用于“攻击”序列,当然还有回合的while循环。 那么,你有什么建议来正确实施turn系统呢?我只需要从函数中获取有关“公共”板的信息 def napad(osebni_board): board = [] #this

我正在做一个战舰游戏,一切正常。但是由于我加入了一个回合制,游戏并没有按它应该的那样运行。游戏有两个棋盘(一个是隐藏的,另一个是“公开的”——对手可以看到的棋盘(因此没有船只)。隐藏的棋盘可以工作,但是公众会重置每一个回合,所以你看不到你以前的命中率

下面的代码用于“攻击”序列,当然还有回合的while循环。 那么,你有什么建议来正确实施turn系统呢?我只需要从函数中获取有关“公共”板的信息

    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

我不确定,因为我不能理解变量名,但是在
napad
函数的开头,您设置了
board=[]
,因此这将擦除
板中的任何内容。而且它看起来像
是一个局部变量,因此无论你做什么,每次函数结束时它都会消失。如果我正确理解你的代码,似乎你每次调用
napad
时都在将私有板加载到公共板中,但是如果每次执行此操作时,您都从
board=[]
开始,然后公用板将没有持续状态。当您执行
board[napad_vrstica][napad_stolpec]=“M”之类的操作时
,您只需在局部变量
board
中设置一个元素,当
napad
函数结束时,该元素将被丢弃。要解决所有这些问题,您需要在
napad
函数之外创建一次公共板,用空格初始化它,然后引用该公共板(作为全局变量或作为参数传入)你可以试着把变量名翻译成英文吗?有趣的是:用另一种语言读代码……但是英语会有帮助。代替把它称为全局变量,我会说把板作为第二个参数传递给<代码> NAPAD < /代码>。但是如果我把板作为第二个PAR。ameter,作为turn while循环的第二个参数,我应该写什么呢?另外,我试图在napad之外创建board=[]。。它是持久的,但只有一个实例。因此两个攻击都显示在一个板上,而不是两个不同的公共板上。。。
    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