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