Juego de los barcos

JaVinci
06 de Julio del 2005
Os dejo una versión muy cutre para que os sirva de base si tenéis que hacer el juego de los barquitos en C++. No hay control de errores, los barcos pueden solaparse, en fin, es muy cutre, pero me aburría y lo hice en 10 minutos (literalmente)... A lo mejor a alguien le puede servir.

Un saludo:

JaVinci





#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream.h>

#define PLAYER_1 0
#define PLAYER_2 1

#define TAM 10

char Tableros[2][TAM][TAM];
bool eog=false;


void InicializaTableros(){

int i,j,k;

for(i=0;i<2;i++){
for(j=0;j<TAM;j++){
for(k=0;k<TAM;k++){
Tableros[i][j][k]='-';
}
}
}
}


void MuestraTableros(){

int i,j;

for(i=0;i<TAM;i++){
for(j=0;j<TAM;j++){
cout << Tableros[PLAYER_1][i][j];
}
cout << " ";
for(j=0;j<TAM;j++){
cout << Tableros[PLAYER_2][i][j];
}
cout << endl;
}
}


void ColocaBarco(int lng, int x, int y, int orient, int jugador){

int i;

switch(orient){

case 'o':
for(i=0;i<lng;i++){
Tableros[jugador][x-1][y-1-i]='O';
}
break;

case 'e':
for(i=0;i<lng;i++){
Tableros[jugador][x-1][y-1+i]='O';
}
break;

case 's':
for(i=0;i<lng;i++){
Tableros[jugador][x-1+i][y-1]='O';
}
break;

case 'n':
for(i=0;i<lng;i++){
Tableros[jugador][x-1-i][y-1]='O';
}
break;
}
}


void ColocaPiezas(int jugador){

int x1=-1,y1=-1;
int x2=-1,y2=-1;
int x3=-1,y3=-1;
int x4=-1,y4=-1;

char orientacion1=' ';
char orientacion2=' ';
char orientacion3=' ';
char orientacion4=' ';

cout << endl << "***************" << endl;
if(jugador==PLAYER_1){
cout << "** JUGADOR 1 **" << endl;
}
else{
cout << "** JUGADOR 2 **" << endl;
}
cout << "***************" << endl << endl;

cout << endl << "El de 4 (x): ";
cin >> x4;
cout << "El de 4 (y): ";
cin >> y4;
cout << "El de 4 (n-s-e-o): ";
cin >> orientacion4;

ColocaBarco(4,x4,y4,orientacion4,jugador);

cout << endl << "El de 3 (x): ";
cin >> x3;
cout << "El de 3 (y): ";
cin >> y3;
cout << "El de 3 (n-s-e-o): ";
cin >> orientacion3;

ColocaBarco(3,x3,y3,orientacion3,jugador);

cout << endl << "El de 2 (x): ";
cin >> x2;
cout << "El de 2 (y): ";
cin >> y2;
cout << "El de 2 (n-s-e-o): ";
cin >> orientacion2;

ColocaBarco(2,x2,y2,orientacion2,jugador);

cout << endl << "El de 1 (x): ";
cin >> x1;
cout << "El de 1 (y): ";
cin >> y1;

ColocaBarco(1,x1,y1,'n',jugador);

}


void CompruebaFinDeJuego(int jugador){

int i,j;

bool quedaAlgoVivo=false;
for(i=0;i<TAM;i++){
for(j=0;j<TAM;j++){
if(Tableros[jugador][i][j]=='O') quedaAlgoVivo=true;
}
}
if(!quedaAlgoVivo) eog=true;

}


void Dispara(int jugador){

int x,y;

cout << endl << "***************" << endl;
if(jugador==PLAYER_1){
cout << "** JUGADOR 1 **" << endl;
}
else{
cout << "** JUGADOR 2 **" << endl;
}
cout << "***************" << endl << endl;

cout << "Disparo (x): ";
cin >> x;
cout << "Disparo (y): ";
cin >> y;

switch(jugador){

case PLAYER_1:
switch(Tableros[PLAYER_2][x-1][y-1]){
case '-':
Tableros[PLAYER_2][x-1][y-1]=' ';
cout << endl << "AGUA" << endl << endl;
break;
case 'O':
Tableros[PLAYER_2][x-1][y-1]='*';
cout << endl << "TOCADO" << endl << endl;
CompruebaFinDeJuego(PLAYER_2);
break;
}
break;
case PLAYER_2:
switch(Tableros[PLAYER_1][x-1][y-1]){
case '-':
Tableros[PLAYER_1][x-1][y-1]='·';
cout << endl << "AGUA" << endl << endl;
break;
case 'O':
Tableros[PLAYER_1][x-1][y-1]='*';
cout << endl << "TOCADO" << endl << endl;
CompruebaFinDeJuego(PLAYER_1);
break;
}
break;
}
}


void main(void){

InicializaTableros();

MuestraTableros();

ColocaPiezas(PLAYER_1);
ColocaPiezas(PLAYER_2);

MuestraTableros();

while(!eog){
Dispara(PLAYER_1);
MuestraTableros();
if(eog){
cout << endl << "GANA EL JUGADOR 1" << endl << endl;
break;
}
Dispara(PLAYER_2);
MuestraTableros();
if(eog){
cout << endl << "GANA EL JUGADOR 2" << endl << endl;
break;
}
}
}