战舰与Python

时间:2013-12-15 20:10:28

标签: python

在这里,我的程序遇到了一些困难......我尝试了一切,但没有任何作用......

这是我的代码:

import random

XBateau_un_joueur = 0
YBateau_un_joueur = 0
XBateau_deux_joueur = 1
YBateau_deux_joueur = 1
XBateau_un_IA = 0
YBateau_un_IA = 0
XBateau_deux_IA = 1
YBateau_deux_IA = 1

def Grille(): #définition du tableau qui servira de grille
    tableau_joueur = [(0,)*taille]*taille

    for i in range(taille):
        tableau_joueur[i] = list(tableau_joueur[i])
    tableau_joueur[XBateau_deux_joueur][YBateau_deux_joueur] = 1
    tableau_joueur[XBateau_un_joueur][YBateau_un_joueur] = 1

   if XBateau_un_joueur == XBateau_deux_joueur and YBateau_un_joueur == YBateau_deux_joueur :
        XBateau_deux_joueur = XBateau_deux_joueur + 1
        YBateau_deux_joueur = YBateau_deux_joueur + 1

        if XBateau_deux_joueur > taille - 1 :
           XBateau_deux_joueur = XBateau_deux_joueur - 2

        if YBateau_deux_joueur > taille - 1 :
           YBateau_deux_joueur = YBateau_deux_joueur - 2

    tableau_IA = [(0,)*taille]*taille

    for j in range(taille):
        tableau_IA[j] = list(tableau_IA[j])
    tableau_IA[XBateau_un_IA][YBateau_deux_IA] = 1
    tableau_IA[XBateau_deux_IA][YBateau_deux_IA] = 1

    if XBateau_un_IA and YBateau_un_IA == XBateau_deux_IA and YBateau_deux_IA :
        XBateau_deux_IA = XBateau_deux_IA + 1
        YBateau_deux_IA = YBateau_deux_IA + 1

        if XBateau_deux_IA > taille - 1 :
           XBateau_deux_IA = XBateau_deux_IA - 2

        if YBateau_deux_joueur > taille - 1 :
           YBateau_deux_IA = YBateau_deux_IA - 2

    print tableau_joueur
    print tableau_IA

def tour_IA():
    compteur_de_point_IA = 0

    for tour_IA in range (0, 3):

        print "L'ennemi nous attaque Capitain !"
        x = int(random.randint(0, taille - 1))
        y = int(random.randint(0, taille - 1))

        if ((x == XBateau_un_joueur) and (y == YBateau_un_joueur)) or ((x == XBateau_deux_joueur) and (y == YBateau_deux_joueur)) :
            compteur_de_point_IA = compteur_de_point_IA + 8
            print "Arg ! Cette raclure de fond de calle nous a coulé en vaisseau... prenez garde !"

        else:

           if (x == XBateau_un_joueur) or (y == YBateau_un_joueur) or (x == XBateau_deux_joueur) or (y == YBateau_deux_joueur) :
                compteur_de_point_IA = compteur_de_point_IA + 1
                print "nous sommes en vue de l'ennemi Cap'tain ! Faite attention !"

            else:
                print "A l'eau ! Il nous a raté !"
    print "Voici les points marqué par l'ennemis :", compteur_de_point_IA

    # tour du joueur IRL

def tour_joueur():
    list_resultat = []
    List_tot = []
    print " C'est à vous d'attaquer"

    for tour_joueur in range (0, 3):
        compteur_de_point_joueur = 0
        print "En attente des ordres, lattitude du tir mon capitain ?"
        print "(colone)"
        x = int(input())
        print "longitude du tir ?"
        print "(ligne)"
        y = int(input())

        if ((x == XBateau_un_IA) and (y == YBateau_un_IA)) or ((x == XBateau_deux_IA) and (y == YBateau_deux_IA)) :
            compteur_de_point_joueur = compteur_de_point_joueur + 8
            print "Aarrrr ! Navire ennemi envoyé par le fond Cap'tain!"
            print "Vous marqué 8 points supplémentaires !! Bien joué!"

    else:

          if (x == XBateau_un_IA) or (y == YBateau_un_IA) or (x == XBateau_deux_IA) or (y == YBateau_deux_IA):
            compteur_de_point_joueur = compteur_de_point_joueur + 1
            print "L'ennemis est en vue ! Pas mal boucanier !"
            print "Vous marqué 1 point supplémentaire !!"

          else:
            print "Mille sabords !!! Raté !!! Recommencez marins d'eau douce !"
        print "Voici votre total de point marqué :", compteur_de_point_joueur
        print " "
        list_resultat.append(compteur_de_point_joueur)
        print list_resultat[0]
    print 



def nombre_de_joueur() :
    print "Combien de joueur êtes vous ?"
    nombre = int(input())
    print "Vent dans les voiles !! Vent dans les voiles !!"
    for k in range(0, nombre) :
        Grille()
        tour_joueur()
        print " "
        print " "
        tour_IA()




taille = int(input("Veuillez saisir la taille du champs de bataille matelot !"))

XBateau_un_joueur = random.randint(0, taille - 1)#bateau n°1 du joueur
YBateau_un_joueur = random.randint(0, taille - 1)
XBateau_deux_joueur = random.randint(0, taille - 1)#bateau n°2 du joueur
YBateau_deux_joueur = random.randint(0, taille - 1)

XBateau_un_IA = random.randint(0, taille - 1)#bateau n°1 de l'IA
YBateau_un_IA = random.randint(0, taille - 1)
XBateau_deux_IA = random.randint(0, taille - 1)#bateau n°2 de l'IA
YBateau_deux_IA = random.randint(0, taille - 1)


nombre_de_joueur()

这就是shell:

Traceback (most recent call last):
  File "C:\Users\Marion\Documents\Marion\Work\ISN\BatailleNavale2.py", line 138, in <module>
    nombre_de_joueur()
  File "C:\Users\Marion\Documents\Marion\Work\ISN\BatailleNavale2.py", line 116, in nombre_de_joueur
    Grille()
  File "C:\Users\Marion\Documents\Marion\Work\ISN\BatailleNavale2.py", line 17, in Grille
    tableau_joueur[XBateau_deux_joueur][YBateau_deux_joueur] = 1
UnboundLocalError: local variable 'XBateau_deux_joueur' referenced before assignment

所以,如果你有一个想法..

PS:对不起,如果我的英语不好......我是法国人!

1 个答案:

答案 0 :(得分:1)

您在此处为变量赋值:

XBateau_deux_joueur = XBateau_deux_joueur + 1

Python在您的函数中看到此赋值,然后,因此,在本地范围内而不是全局范围内理解此变量。因此,变量不会引用您可能认为应该引用的全局变量。因此,当您在此处引用局部变量时:

tableau_joueur[XBateau_deux_joueur][YBateau_deux_joueur] = 1

Python在函数的本地范围之前从未见过这个变量。该名称未绑定,Python抛出错误。如果你想改为引用全局变量,试试这个:在对变量的任何引用之前,将它声明为全局变量(在函数内):

def Grille(): #définition du tableau qui servira de grille
    global XBateau_deux_joueur
    . . .

每次为函数中的变量赋值时,Python都会假定变量在整个函数的范围内是局部的,除非另有说明。