Skip to main content
 首页 » 编程设计

python之Python战舰

2025年05月04日8lyj

这里我的程序有一些困难......我尝试了一切但没有任何效果......

这是我的代码:

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() 

这是外壳:

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:抱歉,如果我的英语不好...我是法国人!

请您参考如下方法:

您正在为此处的变量赋值:

XBateau_deux_joueur = XBateau_deux_joueur + 1 

Python 在您的函数中看到此赋值,因此,在局部范围内而不是全局范围内理解此变量。所以这个变量没有引用你可能认为它应该引用的全局变量。因此,当您在此处引用局部变量时:

tableau_joueur[XBateau_deux_joueur][YBateau_deux_joueur] = 1 

Python 以前从未在函数的局部范围内见过这个变量。名称未绑定(bind),Python 会抛出错误。如果您想改为引用全局变量,请尝试以下操作:在引用该变量之前,将其声明为全局变量(在函数内):

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

任何时候您在函数内为变量赋值时,Python 都会假定该变量在整个函数的范围内是局部的,除非另有说明。