IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Bataille Navale : sélection par IA


Sujet :

Free Pascal

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut Bataille Navale : sélection par IA
    Bonjour à tous !

    Donc en tant qu'élève ingénieur, je dois rendre un projet d'info.

    Comme vous avez du le comprendre, j'ai décidé de programmer une bataille navale en pascal

    Ma méthode est simple, je stocke les coordonnées de chaque bateau, leur nom, leur taille, et s'ils sont coulés, dans un tableau de record.

    Pour l'IA, j'utilise une base de donnée qui est en fait une matrice du même type que la grille de jeu, et lorsqu'on touche un bateau, la case correspondante dans la BDD reçoit la valeur 1.

    Et voici quelques extraits du programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    program bataille_navale;
     
    uses crt;
     
    const   LMAX=10; //Nombre maximal de lignes dans la grille
    		CMAX=10; //Nombre maximal de colonnes dans la grille
            TMAX=5; //Taille maximale des bateaux
    		NBBAT=5; //Nombre de bateaux
     
    type	t_element=0..3; //Elements de la grille
    		t_coord=array[1..TMAX] of integer; //Forme des coordonnées
    		t_mat=array[1..LMAX,1..CMAX] of t_element; //Les éléments de la grille sont des entiers de 0 à 3
    {0:case vide, 1:bateau pas touché, 2:case vide tirée, 3:bateau touché}
    		t_bat=	record //Type des bateaux
    				nom:string; //Stocke le nom du bateau
    				coule:boolean; //Stocke si le bateau est coulé ou non
    				taille:integer; //Stocke la taille du bateau
    				x,y:t_coord; //Abscisses-Ordonnées du bateau
    				end;
    		t_nav=array[1..NBBAT] of t_bat;//Tableau contenant les bateaux (Flotte)
     
    { Fonctions booléennes de test :
    voisin(x1,y1,x2,y2): rend TRUE si la case 2 est autour de la 1
    existe(x,y): rend TRUE si la case est dans la grille de jeu
    coule: rent TRUE si le bateau est coulé }
    procedure selectIA(var x,y:integer;var m,bdd:t_mat;var N:t_nav); //selection de la case à tirer à partir de la base de données par IA
    var i,j,k,l:integer;
    begin		
    randomize;
    for i:=1 to LMAX do //On parcourt bdd
    	for j:=1 to CMAX do
    		if(bdd[i,j]<>0) //La case C de la bdd est un bateau
    			and not (existe(x,y)) //La case C n'a pas encore été trouvée
    				and not (coule(m,N,m[i,j])) then //Le bateau considéré n'est pas coulé
    			begin
    			for k:=i-1 to i+1 do //On tourne autour de C
    				for l:=j-1 to j+1 do
    					if(m[k,l]<>0) //La case autour de C n'a pas été tirée
    						and(existe(l,k)) //La case existe
    							and (voisin(j,i,l,k)) then //La case est voisine
    							begin
    							if(i-k=1)
    								or (i-k=-1)then //vertical
    								begin
    									repeat
    									if(i-k=1) then //(haut)
    										begin
    										if(random(2)=1) then y:=k-1
    										else y:=i+1;
    										end
    									else //(bas)
    										begin
    										if(random(2)=1) then y:=k+1
    										else y:=i-1;
    										end;
    									x:=l;
    									until (existe(x,y)) 
    										and (bdd[y,x]=0);
    								end
    							else //horizontal
    								begin
    									repeat
    									if(j-l=1) then //(gauche)
    										begin
    										if(random(2)=1) then x:=l-1
    										else x:=j+1;
    										end
    									else //(droite)
    										begin
    										if(random(2)=1) then x:=l+1
    										else x:=j-1;
    										end;
    									y:=k;
    									until (existe(x,y)) 
    										and (bdd[y,x]=0);
    								end;
    							end;
    			end;
    end;
    Voilà la part qui pose problème ! Donc si vous avez une solution, ce serait sympa de me sortir de ce me**ier


    Vous trouverez aussi en pièce jointe le programme complet si vous arrivez pas à lire

    Merci d'avance,

    JM
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Editeur de texte qui fait la sélection par colonne
    Par wodel dans le forum Windows XP
    Réponses: 5
    Dernier message: 10/11/2010, 13h45
  2. aide pour jeu de la bataille navale
    Par Jeannot Alpin dans le forum Delphi
    Réponses: 17
    Dernier message: 19/11/2006, 20h33
  3. bataille navale
    Par keenurives dans le forum C
    Réponses: 7
    Dernier message: 21/11/2005, 12h15
  4. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 21h22
  5. Couleur de sélection par défaut
    Par sicard_51 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/04/2003, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo