2013-12-15 64 views
2

在這裏,我有些困難,我的計劃......我什麼都試過,但沒有什麼工作......戰艦與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:很抱歉,如果我的英語不好...我是法國人!

+0

看起來像'XBateau_deux_joueur'不存在。 – 2013-12-15 20:16:38

+0

'XBateau_deux_joueur = XBateau_deux_joueur + 1' - >'XBateau_deux_joueur + = 1' –

回答

1

您分配一個值來這裏的變量:

XBateau_deux_joueur = XBateau_deux_joueur + 1 

Python看到你的函數內這個任務,然後,因此,理解中的一個局部這個變量,而不是一個全球性的,範圍。所以這個變量並不是指你可能認爲應該引用的全局變量。因此當你在這裏引用局部變量時:

tableau_joueur[XBateau_deux_joueur][YBateau_deux_joueur] = 1 

Python在函數的本地範圍內從未見過這個變量。該名稱是未綁定的,Python會引發錯誤。如果你想引用全局變量,而不是,試試這個:任何參考變量之前,聲明爲一個全局變量(函數內):

​​

任何時候你內的值賦給一個變量一個函數,除非另有說明,否則Python將假定該變量在整個函數範圍內是局部的。

+0

我現在這樣...... T_T 回溯(最近通話最後一個): 文件「C:\用戶\馬里昂\文檔\馬里昂\ Work \ ISN \ BatailleNavale2.py「,行138,在 nombre_de_joueur() 文件」C:\ Users \ Marion \ Documents \ Marion \ Work \ ISN \ BatailleNavale2.py「,行116,在nombre_de_joueur Grille() 文件 「C:\用戶\馬裏恩\文件\馬裏恩\工作\ ISN \ BatailleNavale2.py」,第17行,在格柵 tableau_joueur [XBateau_deux_joueur] [YBateau_deux_joueur] = 1 UnboundLocalError:局部變量 'XBateau_deux_joueur' 引用分配 之前 但是,謝謝!! ^^ – user3105227