PROJET ISN 2014-2015

Bataille navale avec IA


 

SEANCE D'ISN DU 18/12/14


 

Lors de la première séance nous avons effectué des recherches sur le jeu et nottamment ses règles .


 

1/ Règles du jeu


 

Bateaux1 porte-avion ( 5cases )

1 croiseur ( 4 cases )

1 contre-torpilleurs ( 3 cases )

1 sous-marin ( 3 cases )

1 torpilleur ( 2 cases )


 

Grille de jeu1 a 10 horizontalement

A a J verticalement

- Point blanc quand rien n'est touché

- Point rouge quand bateau est touché



 

RèglesDeux joueurs qui s'affrontent , chacun place ses bateaux sur la grille et ils jouent chacun leur tour le but étant de couler la flotte ennemie.


 

1ere phasefaire la grille et pouvoir y interagir

 

 

Conclusion : Cette séance nous a permis d’en apprendre plus sur le jeu et ainsi réfléchir à plusieurs façon de le créer.

Il va donc falloir modéliser deux grilles de jeu disponibles à l’écran , une pour le joueur sur laquelle il va placer ses bateaux et une autre sur laquelle il pourra choisir son tir , et voir les emplacements de ses tirs précédents .

Problèmes rencontrés:

 

Comment modéliser les grilles de jeu ? 

Comment écrire des lettres et des chiffres ? 

Comment créer les bateaux , et comment pouvoir les placer manuellement ? 

Comment faire en sorte que le programme comprenne que ce sont des bateaux et non de simples carrés ? 

Comment faire comprendre au programme que les grilles sont les espaces du jeu et ainsi assigner des fonctions aux différentes cases ?

Comment pouvoir tirer , et donc faire jouer les joueurs chacun leur tour ?

(Comment pouvoir créer un adversaire artificielle qui va jouer différement à chaque partie ? ) Si possible en fonction du temps.

Comment afficher les tirs de l'adversaire sur la grille principale du joueur ?

Comment faire disparaître les bateaux lorsqu'ils ont reçu le nombre de tirs suffisant à les détruire ? 

Une fois que tous les bâteaux d'un joueur sont détruit comment afficher "Victoire"/"Défaite" à l'écran ? 

 

 

 

__________________________________________________________________________________________________________________

Travail en binôme (03/01/2015)

 

Problèmes rencontrés :

Comment modéliser les grilles de jeu ?

Voici la première étape fondamentale de notre bataille navale : la grille.

Programme processing

Voici ce que cela donne :

Problèmes résolus :

Nous avons réussi à faire la grille à l'aide de la commande line() , nous aurions pu aussi utiliser une commande permettant de faire un tableau .

 

__________________________________________________________________________________________________________________

 

Travail en binôme  (21/01/2015)

Problème rencontré :  

Comment écrire des lettres et des chiffres ?

 

Processing ->  Ajout des lettres et des chiffres à la première grille 

 

Résultat de notre travail : 

 

Problème Résolu : 

Nous avons utiliser une fonction déjà intégrée à processing dans l'onglet "Tools" puis "Create Font" nous avons donc choisit la police d'écriture puis la taille de la police.

 

__________________________________________________________________________________________________________________

 

SEANCE D'ISN DU 22/12/14 (TRAVAIL SEUL : AYMERIC)

Problème encontré : 

Après avoir modéliser la première grille de jeu , j'ai remarqué que sa taille était trop importante et qu'elle prenait plus de la moitié de la fenêtre j'ai donc décidé de refaire la grille à une taille approprié , pour pouvoir faire plus tard faire la deuxième 

 

 

 

La grille n'est pas totalement terminée il reste la dixième ligne à créer ,  il faudra replacer tous les caractères et changer leur police qui est actuellement trop élevée .

Dans cette séance j'ai aussi retravaillé le code en général de façon à ce que sa lecture soir plus clair :

 

PFont lettrechiffre;
 
 
 
void setup (){
  size(1600,700); // Permet de modifier la longueur et largeur de la fenêtre
  
  //Codage des lignes verticales 
 line(40,50,590,50);
  line(40,50,40,590);
  line(40,590,590,590); 
  line(590,590,590,50);
  line(95,50,95,590);
  line(150,50,150,590);
  line(205,50,205,590);
  line(260,50,260,590);
  line(315,50,315,590);
  line(370,50,370,590);
  line(425,50,425,590);
  line(480,50,480,590);
  line(535,50,535,590);
  line(590,50,590,590);
  
  //Codage des lignes horizontales 
  line(40,110,590,110);
  line(40,170,590,170);
  line(40,230,590,230);
  line(40,290,590,290);
  line(40,350,590,350);
  line(40,410,590,410);
  line(40,470,590,470);
  line(40,530,590,530);
  line(40,590,590,590);
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   lettrechiffre = loadFont ("Arial-Black-48.vlw"); // Permet au programme de reconnaître la police utilisé
 textFont (lettrechiffre, 48);
 
 
 
void draw () {
  //Ajout des différents caractères 
  text("A" , 80, 40);
  text("B" , 145, 40);
  text("C" , 210, 40);
  text("D" , 275, 40);
  text("E" , 340, 40);
  text("F" , 405, 40);
  text("G" , 460, 40);
  text("H" , 525, 40);
  text("I" , 600, 40);
  text("J" , 655, 40);
  text("1" , 15, 100);
  text("2" , 15, 165);
  text("3" , 15, 220);
  text("4" , 15, 275);
  text("5" , 15, 340);
  text("6" , 15, 395);
  text("7" , 15, 460);
  text("8" , 15, 515);
  text("9" , 15, 575);
  text("1" ,3, 635);
}
 
 
__________________________________________________________________________________________________________________
 
Travail en bînome :  28/01/2015
 
Problèmes rencontrés : Comment modéliser des bâteaux et pouvoir les déplacer à l'aide de la souris ?
 
Nous avons modeliser la seconde grille et on a aussi modéliser les bateaux (5,4,3 et 2 cases).
On a programmé sur un autre ordinateur et lorsqu'on l'a lancé sur l'ordinateur d'Aymeric la fênetre était coupée.
Nous allons donc vérifier demain si nous rencontrons le même problème sur les ordinateurs du lycée et si oui le regler.
__________________________________________________________________________________________________________________
Travail en bînome : 03/02/2015
 
Problèmes rencontrés :    Pour pouvoir créer les bateaux de façon aléatoire sur nos grilles , le professeur nous à conseiller de créer deux tableaux à deux dimensions qui remplaceraient nos grilles actuelles .
 
On s'est donc inspiré d'un site internet pour créer les tableaux : 
 
int largeurColonne = 550/colonnes;
  int hateurRangee = 550/rangees;
   
  fill(50); // Ajout de couleur
  for(int i=0 ; i < colonnes ; i++){ 
    for(int j=0 ; j < rangees ; j++){ 
      int x = i*largeurColonne;
      int y = j*hateurRangee;
      rect( x+60 , y+60 , largeurColonne-1 , hateurRangee-1 );
    }
  }
 
Ces lignes de codes permettent de faire la 1ère grille , nous avons donc reproduit ce code pour faire la deuxième en changeant seulement les valeurs.
 
 
Notre prochaine étape sera de créer les bâteaux de manière aléatoire .
 

__________________________________________________________________________________________________________________

 
Travail en bînome : 14/02/2015
 
Problèmes rencontrés : Afin de faire nos bateaux de façon aléatoire et que lorsque l'on clique sur une case le programme affiche "Touché" ou "Essaye encore" , nous avons dû revoir tout notre programme afin d'assigner des valeurs aux cases de notre tableau. 
 
Durant 10 jours, nous avons travaillé sur le programme afin de remédier à ce problème et nous avons réussi à créer un tableau à deux dimensions mais nous n'arrivons pas à affecter des valeurs spécifiques pour le void mousePressed() à chaque case de celui-ci.
Le problème vient de l'affectation des valeurs aux cases du tableau. 
Suite à ça on a créé un tableau à deux dimensions de 11*11 pour nous permettre d'afficher les lettres et les chiffres .
 
//Déclaration des valeurs
int colonnes = 11;
int rangees = 11;
PFont lettrechiffre;        // Permet l'utilisation de la police de base processing
 float value = random(0,2); // Affecter chiffre entre 0 et 2 
 
int[][] tableau ; // tableau 2D
 
void setup(){
        size(600,600);
        smooth(); // Dessiner des formes géométriques et donc des carrés dans notre cas .
        noStroke();  // Permet de différencier les cases.
        tableau= new int[colonnes][rangees]; // Les cases du tableau prennent comme valeur 0 , la valeur de base.
 
Nous avons donc utilisé le tableau précédent( de notre ancienne version du programme ) en changeant la taille du tableau par width et height pour qu'il prenne tout l'écran .
 
int largeurColonne = width/colonnes;
int hauteurRangees = height/rangees;
 
Puis on a utilisé la méthode void mousePressed () pour que lorsqu'on clique sur une case le programme affiche un message . 
 
void mousePressed () {
  if(value < 1) {
   println("Essaye encore") ;
  } else  println("Touché");
 
 
Nous  n'avons pas pu assigner des valeurs aléatoires aux cases  donc chaque clique de souris indique "Touché" dans la console processing .         On a voulu déclarer les valeurs cases par cases : 
 
tableau[5][5] = 0 ; 
 
Mais le programme affiche toujours "Touché" même sur les coordonnées de cette case .
__________________________________________________________________________________________________________________
 
 
Conclusion : 
 
Nous n'avons donc pas pu terminer le programme , suite à un problème qui nous a bloqué dans l'avancement du programme : l'affectation des valeurs qui coïncide avec le void mousePressed(). 
Si nous avions réussi à assigner des valeurs aux cases nous aurions pu donc placer les bâteaux de manière non aléatoire et donc afficher en fonction des cases cliquées "Touché" , "Essaye encore" ou "Coulé".