No tutto quanto e` nella stessa directory, il programma e` una battaglia navale il tentativo e` di colorare un po` il campo.
il fatto e` che nella prima scritta che sta nel main() funziona tutto a dovere, mentre nell'usare printGrid
non colora


questo e` il main del programma:
codice:
// battaglia navale, 2-10-2009

/* ancora da includere:

intelligenza artificiale
colori -> non funziona per la griglia!! indagare!!
contorni navi
nessun fuoco doppio -> fatto sia per utente che per pc

*/
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>

using namespace::std;

#include "./data/player.h"
#include "./data/boat.h"

void printGrid (bool, player);

int main()

{
  srand(time(0));
  system ("./colore.sh blu");
  cout << "Benvenuto in questo fantastico gioco di Battaglia Navale \n (ancora in fase di sviluppo - potrebbe ucciderti il gatto e svuotarti il conto in banca!) \n";
  system ("./colore.sh");
  player user;
  player pc;

  int vet[]={2,2,3,4,5};
  int tot=16;
  // sarebbe bello trovare il modo di vedere quante occorrenze di (ad esempio) x ci siano in un vettore
  // in modo da vedere subito, dal vettore boats quanti colpi sono stati azzeccati.
  pc.boatFiller(5);

  int cheat = 0, x,y,o,c = 0;
  int puntiuser = 0, puntipc = 0;
  cout << "creare le barche in automatico? [0=no 1=si']\n";
  cin >> x;
  
  if (x == 0)
  {
    cout << "\nimmetti le coordinate delle tue navi!\n";
    while (c<5)
    {
      //user.printGrid(1);
      printGrid(1,user);
      cout << "nave da " << vet[c] << "\nX: ";
      cin >> x;
      cout << "\nY: ";
      cin >> y;
      cout << "Orizzontale [1] o verticale [0]?: ";
      cin >> o;
      boat b(x-1,y-1,o,vet[c]);
      if (user.addBoat(b)) {c++;}
      else {
         system ("sh data/colore.sh rosso"); //scrive in rosso richiamando lo script colore.sh 
         cout << "\n***********************************\n";
         cout << "*valori invalidi: immetterne altri*\n";
         cout << "***********************************\n" << endl;
         system ("sh data/colore.sh"); //torna al colore di default (nero?)
       }
  
    }
  }
  else {user.boatFiller(5);}

  cout << "\n COMINCIA IL GIOCO!!! \n";
  cout << "\nLegenda:\n" << "O indica la presenza di una barca sul tuo quadrante\n" << "x indica un colpo in mare\n" <<
        "# indica una nave colpita\n";
  cout << "\n Per vincere devi totalizzare " << tot << " punti (ogni colpo a segno = 1 punto)\n";

  while (true) // ciclo infinito (si ferma quando un giocatore totalizza "tot" punti)
  {
    cout << "\nle tue navi - hai " << puntiuser << " punti\n";
    //user.printGrid(1);
    printGrid(1,user);
    cout << "\ncampo avversario - ha " << puntipc << " punti\n";    
    //pc.printGrid(cheat);
    printGrid(cheat,pc);
    
    bool controllo = 1;
    while (controllo) {
      cout << "\n dove vuoi colpire? \n";
      cout << "\nX: ";
      cin >> x;
      cout << "\nY: ";
      cin >> y;
      
      //controlla che la posizione di sparo sia valida
      if ( x <= 10 && x >= 1 && y <= 10 && y >= 1) { //controlla che lo sparo sia nel campo
        if ( pc.grid[x-1][y-1] >= 2 ) //controlla che il punto di fuoco non fosse stato precedentemente colpito
          cout << "Hai già sparato qui! Controlla la griglia!\n";
        else
          controllo=0;
      }
      
      else
        cout << "Hai sparato fuori dal campo di gioco! Inserisci valori compresi tra 1 e 10!\n"; 
      //cheat = 0;
      //if ((x==0)and(y==0)) {cheat = 1;}
    }

    if (pc.fire(x-1,y-1)) //se il colpo e' andato a segno (pc.fire controlla le navi del pc nel punto di fuoco scelto dall'utente)
      {
        cout << "Hai colpito una nave!";
        puntiuser++;
      }
    
    if (puntiuser == tot)
      {
        cout << "\n -->HAI VINTO!!!<-- \n";
        break; // "rompe" il ciclo while di gioco
      }
    
    int xpc,ypc;
    
    do 
    {
      xpc = rand()%10;
      ypc = rand()%10; }
    while (user.getGrid(xpc,ypc)<2); //sceglie punti di fuoco a caso per il pc, a condizione che non siano stati gia' colpiti
      
    if (user.fire(xpc,ypc))
      {puntipc++;
        cout << "Sei stato colpito!";}
    if (puntipc == tot)
      {
        cout << "\n -->HAI PERSO!!!<-- \n";
        break; // "rompe" il ciclo while di gioco
      }
  }

	return 0;
}

void printGrid (bool show, player gioc)
{
  cout << "   1  2  3  4  5  6  7  8  9  10\n";
  for(int i=0; i<10 ; i++ ) //scorre verticalmente
  {
    if ( i<9 ) 
      cout << " " << i+1;
    else 
      cout << i+1;
    
    for(int z=0; z<10 ; z++) //scorre orizzontalmente 
    {
      if (gioc.getGrid(z,i) == 0) //mare!
      { 
         system ("sh colore.sh blu");
         cout << " _ ";
         //system ("./colore.sh");
      }
      
      if ((gioc.getGrid(z,i) == 1) and (show == 1))  //barca
      {
         system ("sh colore.sh verde");
         cout << " O ";
        // system ("./colore.sh");
      } 
      
      if ((gioc.getGrid(z,i) == 1) and (show == 0)) //barca invisibile - campo avversario!
      {
         system ("sh colore.sh blu");
         cout << " _ ";
         //system ("./colore.sh");
      }
      
      if (gioc.getGrid(z,i) == 2) //colpo a mare
      {
         system ("sh colore.sh giallo");
         cout << " x ";
         //system ("./colore.sh");
      }
       
      if (gioc.getGrid(z,i) == 3) //colpo a segno 
      {
         system ("sh colore.sh rosso");
         cout << " # ";
         //system ("./colore.sh");
      }
      system ("sh colore.sh");
    }
    
    cout << "\n";
  }
  cout << "\n";
}
mentre questo lo script [colore.sh]:
codice:
#!/bin/bash


#BLUE=`tput setf 1`
#GREEN=`tput setf 2`
#CYAN=`tput setf 3`
#RED=`tput setf 4`
#MAGENTA=`tput setf 5`
#YELLOW=`tput setf 6`
#WHITE=`tput setf 7`

case  $1 in
   
   "rosso")
   tput setf 5
   ;;
   
   "verde")
   tput setf 2
   ;;
   
   "blu")
   tput setf 1
   ;;
   
   "ciano")
   tput setf 3
   ;;
   
   "giallo")
   tput setf 6
   ;;
   
   *)
   tput sgr0
   ;;
esac
exit #
grazie