[Source C#] Juego: Hundir la flota v0.3

Iniciado por Dryken, 5 Diciembre 2012, 21:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Dryken

Como llevo poco tiempo con C#, cosa de 1 mes y pico, pues que mejor para aprender que ponerte hacer una aplicación,  ¿aplicación? prefiero los videojuegos, pues venga, hago un juego ¿sobre que? pues ya que estoy con los arrays me pongo a hacer algo que tenga que ver, venga va, el juego de hundir los barquitos. Así es como ha surgido la cosa.

Notas:
- Muestra en el mapa del J1 los 0 con agua, 1 con barcos y 2 con barcos hundidos
- 1 jugador contra la máquina
- Sólo permite colocar 6 barcos de una única casilla


Update v0.1 - 2/12/12
-------------------------------
- Añadidas estadísticas de juego
- Validación de la colocación y del ataque (mejorado)
- Cuando destruyes un barco, puedes volver a atacar (como en el parchís)
- Alternación de rondas entre J1 y J2 cada vez que das en agua...hasta destruir los 6 barcos
- Evitada la colocación de más de un barco en la misma casilla (se eliminaba el barco anterior)
- Ahora puedes elegir entre colocar los barcos automáticamente o manualmente.

Update v0.2 - 12/12/12
----------------------------------
- Mejorado el diseño de los mapas
- Asignación de identidades con carácteres. B = Barco. A = Agua. X = Hundido.- = Desconocido
- Marcado en el mapa donde se haya atacado en agua para no volver a dar en la misma posición
- Se ocultan los barcos del J2, sin embargo permanecen en la misma posición
- Optimizado el sistema de elección aleatoria
- Si atacas a una posición ya atacada anteriormente pierdes turno
- Creado un menú principal
- Se muestra el turno del usuario con su nombre introducido al iniciar
- Ahora puedes indicar en opciones con cuantos barcos quieres jugar en el mapa. Igual nº para J1 y J2.

Update v0.3 - 02/02/13
----------------------------------
- Ordenado todo el código por POO
- Arreglado problema al dar J1 a J2 en pos de barco hundido(X) deberia perder turno
- Solucionado problema al cargar los barcos de forma manual de J1    
- Agregada notificacion de "cargando barcos..." para avisar del tiempo   
- Pequeños cambios en el diseño
- Permite agregar nombre al jugador 2 (máquina)
- Al colocar los barcos manualmente, se muestran en el mapa los barcos que vayas introduciendo
- Solucionado lo de colocar barco en pos ya coloc antes (colocación manual)
- Agregada la opción de activar efectos de sonido






Descargar Proyecto Completo

https://mega.co.nz/#!Z09x2ITI!KxleE3AQDo9O-NgI1JyL33mOKBRRwu3qUHcpCPiDH14

http://www.mediafire.com/download.php?9onxw63bbklne5b

Descargar sólo Ejecutable

https://mega.co.nz/#!okNwnB5Z!PhOglj7hC3Oz-5R9_1S0p22JGfcMCd3k1JX__vrfR4A

http://www.mediafire.com/?cpocl71xwyb22yb


Principal.cs
Código (csharp) [Seleccionar]

using System;
using System.IO;
using System.Threading;

namespace Hundir_la_Flota{
public class Program{    

public static void Main(string[] args){

ColocacionDeBarcos colocBarcos = new ColocacionDeBarcos();
Turnos turnos = new Turnos();
System.Media.SoundPlayer player = new System.Media.SoundPlayer();

Console.Title = "Hundir la flota 0.3";
bool validar = false, volverAtras = true, sonido = false;
int opcion1 = 0, opcion2 = 0, opcion3 = 0, barcosIniciales = 6;
string nombreJ1 = null, nombreJ2 = null;

do{ // Validación del menu principal
if(sonido == true){
player.SoundLocation = ".\\sonido\\FondoDeUnaCueva.wav";
player.Play();
}
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("#############################");
Console.SetCursorPosition(24, 12);Console.Write("#    #");
Console.SetCursorPosition(24, 13);Console.Write("# Selecciona una categoría: #");
Console.SetCursorPosition(24, 14);Console.Write("#    #");
Console.SetCursorPosition(24, 15);Console.Write("# (1)  Comenzar            #");
Console.SetCursorPosition(24, 16);Console.Write("# (2)  Opciones            #");
Console.SetCursorPosition(24, 17);Console.Write("# (3)  Salir               #");
Console.SetCursorPosition(24, 18);Console.Write("# Versión 0.3 #");
Console.SetCursorPosition(24, 19);Console.Write("#    #");
Console.SetCursorPosition(24, 20);Console.Write("#############################\n\n");
for(int i=0; i<=79; i++){
Console.Write("_");
}
for(int i=0; i<=79; i++){
  Console.Write("=");
  Thread.Sleep(8);
}
Console.Write(">>> ");
validar = int.TryParse(Console.ReadLine(), out opcion1);

switch(opcion1){
case 1:
do{ // Validación del menú secundario
if(sonido == true){
player.SoundLocation = ".\\sonido\\MenuOpciones.wav";
player.Play();
}
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("Introduce tu nombre: ");
nombreJ1 = Console.ReadLine();
while(nombreJ1.Length>7){ // Validación en el nombre de J1
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("Pon un nombre más corto: ");
nombreJ1 = Console.ReadLine();
}
turnos.setNombreJ1(nombreJ1);
colocBarcos.setNombreJ1(nombreJ1);
Console.SetCursorPosition(24, 13);Console.Write("Coloca tus embarcaciones\n");
Console.SetCursorPosition(24, 14);Console.Write("------------------------\n");
Console.SetCursorPosition(24, 15);Console.Write("(1)  Automáticamente\n");
Console.SetCursorPosition(24, 16);Console.Write("(2)  Manualmente\n");
Console.SetCursorPosition(24, 18);Console.Write(">>> ");
validar = int.TryParse(Console.ReadLine(), out opcion2);
}while(opcion2!=1 && opcion2!=2);
switch(opcion2){
case 1:
colocBarcos.colocacionBarcosAutomatJ1();
    break;
    case 2:
    colocBarcos.colocacionBarcosManualJ1();
      break;
}
colocBarcos.colocacionBarcosAutomatJ2();

turnos.setTablero1(colocBarcos.getTableroJ1());
turnos.setTablero2(colocBarcos.getTableroJ2());
turnos.setPosJ2(colocBarcos.getPosJ2());
turnos.setBarcosJ1(colocBarcos.getBarcosJ1());
turnos.setBarcosJ2(colocBarcos.getBarcosJ2());

do{ // Cambia el turno de J1 a J2 y viceversa
do{ // Vuelve a tirar J1 si hunde un barco
turnos.introducirFila();
turnos.introducirColumna();
turnos.realizarComprobacionesJ1();
}while(colocBarcos.getTableroJ2()[turnos.getFila()-1,turnos.getColumna()-1] == (char)'X' && turnos.getRepetirTirada() == true);

do{ // Vuelve a tirar J2 si hunde un barco
turnos.ataqueAlAzarDeJ2();
turnos.realizarComprobacionesJ2();
}while(colocBarcos.getTableroJ1()[turnos.getFila()-1,turnos.getColumna()-1] == (char)'X' && turnos.getRepetirTirada() == true);

if(turnos.getBarcosJ1() == 0){
Console.Write("Has perdido la partida. La próxima vez será.");
Console.ReadKey();
break;
}

}while(turnos.getBarcosJ2() != 0); // Si todos los barcos enemigos están hundidos, se acabó la partida
Console.Write("Has ganado la partida. Enhorabuena!!");
break;
case 2:
 do{
if(sonido == true){
player.SoundLocation = ".\\sonido\\FondoDeUnaCueva.wav";
player.Play();
}
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("(1)  Elegir cantidad de barcos\n");
Console.SetCursorPosition(24, 12);Console.Write("(2)  Poner nombre al jugador 2\n");
Console.SetCursorPosition(24, 13);Console.Write("(3)  Activar efectos de sonido\n");
Console.SetCursorPosition(24, 14);Console.Write("(4)  Volver al menú\n");
Console.SetCursorPosition(24, 16);Console.Write(">>> ");
validar = int.TryParse(Console.ReadLine(), out opcion2);
switch(opcion2){
case 1:
do{
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("¿Con cuántos barcos quieres jugar? (Máx 30)");
Console.SetCursorPosition(24, 13);Console.Write(">>> ");
validar = int.TryParse(Console.ReadLine(), out barcosIniciales);
}while(barcosIniciales<1 || barcosIniciales>30);
colocBarcos.setBarcosIniciales(barcosIniciales);
Console.SetCursorPosition(24, 15);Console.Write("Cambios guardados correctamente!");
Thread.Sleep(1250);
break;
case 2:
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("Introduce el nombre de tu oponente ");
Console.SetCursorPosition(24, 13);Console.Write(">>> ");
nombreJ2 = Console.ReadLine();
while(nombreJ2.Length>7){
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("Pon un nombre más corto");
Console.SetCursorPosition(24, 13);Console.Write(">>> ");
nombreJ2 = Console.ReadLine();
}
turnos.setNombreJ2(nombreJ2);
Console.SetCursorPosition(24, 15);Console.Write("Nombre guardado correctamente!");
Thread.Sleep(1250);
break;
case 3:
colocBarcos.menu();
Console.SetCursorPosition(24, 11);Console.Write("¿Qué desea hacer?");
Console.SetCursorPosition(24, 12);Console.Write("-----------------");
Console.SetCursorPosition(24, 13);Console.Write("(1)  Activar efectos de sonido ");
Console.SetCursorPosition(24, 14);Console.Write("(2)  Desactivar efectos de sonido (defecto)");
Console.SetCursorPosition(24, 16);Console.Write(">>> ");
validar = int.TryParse(Console.ReadLine(), out opcion3);
if(opcion3 == 1){
DirectoryInfo DIR = new DirectoryInfo(".\\sonido");
if (!DIR.Exists){
Console.SetCursorPosition(24, 18);Console.Write("Error. No se encuentra la carpeta 'sonido'.");
Thread.Sleep(1750);
}else{
sonido = true;
Console.SetCursorPosition(24, 18);Console.Write("Sonido activado correctamente!");
Thread.Sleep(1250);
}
}else if(opcion3 == 2){
sonido = false;
Console.SetCursorPosition(24, 18);Console.Write("Sonido desactivado correctamente!");
Thread.Sleep(1250);
}
turnos.setSonido(sonido);
colocBarcos.setSonido(sonido);
break;
case 4:
volverAtras = false;
break;
}
 }while(volverAtras == true);
break;
case 3:
break;
}
}while(opcion1!=3);
}
}
}




ColocacionDeBarcos.cs
Código (csharp) [Seleccionar]

using System;
using System.IO;
using System.Threading;

namespace Hundir_la_Flota{
public class ColocacionDeBarcos{

Program ppal = new Program();
System.Media.SoundPlayer player = new System.Media.SoundPlayer();

private bool validar = false, sonido = false;
private int[,] tableroJ1 = new int[6,8], tableroJ2 = new int[6,8], posJ2 = new int[6,8];
private int fila = 0, columna = 0, colocarBarco = 1; // Fil + Colum = Agua (0)  || Barco (1)  || Hundido (2)
private int barcosIniciales = 6, barcosJ1 = 0, barcosJ2 = 0;
private string nombreJ1 = null;

public int[,] getTableroJ1(){            
return tableroJ1;
}

public int[,] getTableroJ2(){
return tableroJ2;
}

public int[,] getPosJ2(){
return posJ2;
}

public int getBarcosJ1(){
return barcosJ1;
}

public int getBarcosJ2(){
return barcosJ2;
}

public void setBarcosIniciales(int barcosIniciales){
this.barcosIniciales = barcosIniciales;
}

public void setNombreJ1(string nombreJ1){
this.nombreJ1 = nombreJ1;
}

public void setSonido(bool sonido){
this.sonido = sonido;
}

public void colocacionBarcosAutomatJ1(){
menu();
Console.Write("\n\n Cargando barcos");

for(int i=0;i<barcosIniciales;i++){
Random h = new Random();
int hfila = h.Next(1,6), hcolumna = h.Next(1,8);
fila=hfila; columna=hcolumna;
if(tableroJ1[fila-1,columna-1] != colocarBarco){
tableroJ1[fila-1,columna-1] = colocarBarco;
barcosJ1++;
Console.Write(".");
}else{
i--;
}
}
Console.Write("Listo!");
Thread.Sleep(1500);
}

public void colocacionBarcosManualJ1(){
   for(int i=0;i<barcosIniciales;i++){
    do{
menu2();
Console.SetCursorPosition(30, 11);Console.Write("Barquito velero "+(i+1));
Console.SetCursorPosition(30, 12);Console.Write("-----------------");
Console.SetCursorPosition(30, 14);Console.Write("Fila: ");
validar = int.TryParse(Console.ReadLine(), out fila);
}while(fila<1 || fila>6);

do{
menu2();
Console.SetCursorPosition(30, 11);Console.Write("Barquito velero "+(i+1));
Console.SetCursorPosition(30, 12);Console.Write("-----------------");
Console.SetCursorPosition(30, 14);Console.Write("Fila: "+fila);
Console.SetCursorPosition(30, 15);Console.Write("Columna: ");
validar = int.TryParse(Console.ReadLine(), out columna);
}while(columna<1 || columna>10);

if(tableroJ1[fila-1,columna-1] != (char)'B'){
tableroJ1[fila-1,columna-1] = colocarBarco;  
barcosJ1++;
if(sonido == true){
player.SoundLocation = ".\\sonido\\ColocarBarco.wav";
player.Play();
}
menu2();
Console.SetCursorPosition(30, 11);Console.Write("Barquito velero "+(i+1));
Console.SetCursorPosition(30, 12);Console.Write("-----------------");
Console.SetCursorPosition(30, 14);Console.Write("Fila: "+fila);
Console.SetCursorPosition(30, 15);Console.Write("Columna: "+columna);
Console.SetCursorPosition(30, 17);Console.Write("Barco "+(i+1)+" colocado correctamente!");
Thread.Sleep(1250);

    }else if(tableroJ1[fila-1,columna-1] == (char)'B'){
if(sonido == true){
player.SoundLocation = ".\\sonido\\PosicionYaDada.wav";
player.Play();
}
menu2();
Console.SetCursorPosition(30, 11);Console.Write("Barquito velero "+(i+1)+"\n\n");
Console.SetCursorPosition(30, 12);Console.Write("-----------------");
Console.SetCursorPosition(30, 14);Console.Write("Fila: "+fila+"\n");
Console.SetCursorPosition(30, 15);Console.Write("Columna: "+columna);
Console.SetCursorPosition(30, 17);Console.Write("Ya has colocado un barco en esta posición.");
Thread.Sleep(1250);
i--;
    }
} // Fin for
} // Fin método

public void colocacionBarcosAutomatJ2(){
for(int i=0;i<barcosIniciales;i++){
Random r = new Random();
int rfila = r.Next(1,6), rcolumna = r.Next(1,8);
fila=rfila; columna=rcolumna;
if(tableroJ2[fila-1,columna-1] != colocarBarco){
tableroJ2[fila-1,columna-1] = colocarBarco;
barcosJ2++;
}else{
i--;
}
}
}

public void menu(){
Console.Clear();
Console.Write("   _      _\n");
Console.Write("  |_| | | |\\ | | \\  | |_|\n");
Console.Write("  | | |_| | \\| |__| | | \\\n");
Console.Write("       _     __      _  ___   __\n");
Console.Write("  |   |_|   |__ |    | |   |   |__|\n");
Console.Write("  |__ | |   | |__  |_|   |   |  |\t\t  _|_\n");
Console.Write("\t\t\t\t\t ___|___\n");
Console.Write("\t\t\t\t\t \\______/\n");
Console.Write("__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\\n");
Console.Write("\n   A B C D E F G H\t\t\n");
Console.Write(" 1 - - - - - - - -\n");
Console.Write(" 2 - - - - - - - -\n");
Console.Write(" 3 - - - - - - - -\n");
Console.Write(" 4 - - - - - - - -\n");
Console.Write(" 5 - - - - - - - -\n");
Console.Write(" 6 - - - - - - - -\n\n\n");
}

public void menu2(){
Console.Clear();
Console.Write("   _      _\n");
Console.Write("  |_| | | |\\ | | \\  | |_|\n");
Console.Write("  | | |_| | \\| |__| | | \\\n");
Console.Write("       _     __      _  ___   __\n");
Console.Write("  |   |_|   |__ |    | |   |   |__|\n");
Console.Write("  |__ | |   | |__  |_|   |   |  |\t\t  _|_\n");
Console.Write("\t\t\t\t\t ___|___\n");
Console.Write("\t\t\t\t\t \\______/\n");
Console.Write("__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\__/\\");
Console.Write("\n\n");
Console.Write("  Mapa de "+nombreJ1+"\n");
Console.Write("  ---------------\n\n");
for(int j=0;j<tableroJ1.GetLength(0);j++){
for(int k=0;k<tableroJ1.GetLength(1);k++){
if(tableroJ1[j,k] == 1){
tableroJ1[j,k] = (char)'B';
}
if(tableroJ1[j,k] == 0){
tableroJ1[j,k] = (char)'-';
}
Console.Write("  "+(char)tableroJ1[j,k]);
}
Console.Write("\n");
}
}
} // Fin clase
} // Fin namespace




Turnos.cs

Código (csharp) [Seleccionar]

using System;
using System.IO;
using System.Threading;

namespace Hundir_la_Flota{
public class Turnos{

Program ppal = new Program();
ColocacionDeBarcos coloc = new ColocacionDeBarcos();
System.Media.SoundPlayer player = new System.Media.SoundPlayer();

private bool validar = false, repetirTirada = true, sonido = false;
private int[,] tableroJ1 = new int[6,8], tableroJ2 = new int[6,8], posJ2 = new int[6,8];
private int fila = 0, columna = 0;
private int barcosJ1 = 0, barcosJ2 = 0, hundidoJ1 = 0, hundidoJ2 = 0, rondasJ1 = 0, rondasJ2 = 0;
private string nombreJ1 = null, nombreJ2 = "Máquina";

public void setNombreJ1(string nombreJ1){
this.nombreJ1 = nombreJ1;
}

public void setNombreJ2(string nombreJ2){
this.nombreJ2 = nombreJ2;
}

public void setTablero1(int[,] tableroJ1){
this.tableroJ1 = tableroJ1;
}

public void setTablero2(int[,] tableroJ2){
this.tableroJ2 = tableroJ2;
}

public void setPosJ2(int[,] posJ2){
this.posJ2 = posJ2;
}

public void setBarcosJ1(int barcosJ1){
this.barcosJ1 = barcosJ1;
}

public void setBarcosJ2(int barcosJ2){
this.barcosJ2 = barcosJ2;
}

public void setSonido(bool sonido){
this.sonido = sonido;
}

public bool getRepetirTirada(){
return repetirTirada;
}

public int getFila(){
return fila;
}

public int getColumna(){
return columna;
}

public int getBarcosJ1(){
return barcosJ1;
}

public int getBarcosJ2(){
return barcosJ2;
}

public void introducirFila(){
do{
Console.Clear();
Console.Write("\n Mapa Jugador 1");
Console.Write("\n ----------------\n\n"); // Muestra los barcos J1
for(int i=0;i<tableroJ1.GetLength(0);i++){
for(int j=0;j<tableroJ1.GetLength(1);j++){  
if(tableroJ1[i,j]==1){
tableroJ1[i,j]=(char)'B';
}
if(tableroJ1[i,j]==0){
tableroJ1[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ1[i,j]);
}
Console.Write("\n");
}
Console.Write("\n\n Mapa Jugador 2");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ2.GetLength(0);i++){ // Muestra los barcos J2
for(int j=0;j<tableroJ2.GetLength(1);j++){
posJ2[i,j]=0;
if(tableroJ2[i,j]==1){   // Si hay un barco
posJ2[i,j]=tableroJ2[i,j];   // Guardo su posición
tableroJ2[i,j]=(char)'-';   // y muestro agua por pantalla
}
if(tableroJ2[i,j]==0){
tableroJ2[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ2[i,j]);
}
Console.Write("\n");
}
//------
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(posJ2[i,j]==1){
tableroJ2[i,j]=posJ2[i,j]; // Revivo los barcos J2 (antes los borré del mapa)
}
}
}
Console.SetCursorPosition(32, 1);Console.Write("Turno J1 - "+nombreJ1);
Console.SetCursorPosition(32, 2);Console.Write("-----------------\n\n");
Console.SetCursorPosition(32, 4);Console.Write("Barcos: "+barcosJ1);
Console.SetCursorPosition(32, 5);Console.Write("Has hundido: "+hundidoJ1);
Console.SetCursorPosition(32, 6);Console.Write("Te han hundido: "+hundidoJ2);
Console.SetCursorPosition(32, 7);Console.Write("Rondas: "+rondasJ1);
Console.SetCursorPosition(32, 9);Console.Write("Atacar J1  ==> Fila: ");
validar = int.TryParse(Console.ReadLine(), out fila);
}while(fila<1 || fila>6);
}

public void introducirColumna(){
do{
Console.Clear();
Console.Write("\n Mapa Jugador 1");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ1.GetLength(0);i++){
for(int j=0;j<tableroJ1.GetLength(1);j++){
if(tableroJ1[i,j]==1){
tableroJ1[i,j]=(char)'B';
}
if(tableroJ1[i,j]==0){
tableroJ1[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ1[i,j]);
}
Console.Write("\n");
}
Console.Write("\n\n Mapa Jugador 2");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(tableroJ2[i,j]==1){   // Si hay un barco
posJ2[i,j]=tableroJ2[i,j];   // Guardo su posición
tableroJ2[i,j]=(char)'-';   // y muestro agua por pantalla
}
if(tableroJ2[i,j]==0){
tableroJ2[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ2[i,j]);
}
Console.Write("\n");
}
//------
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(posJ2[i,j]==1){
tableroJ2[i,j]=posJ2[i,j];
}
}
}
Console.SetCursorPosition(32, 1);Console.Write("Turno J1 - "+nombreJ1);
Console.SetCursorPosition(32, 2);Console.Write("-----------------\n\n");
Console.SetCursorPosition(32, 4);Console.Write("Barcos: "+barcosJ1);
Console.SetCursorPosition(32, 5);Console.Write("Has hundido: "+hundidoJ1);
Console.SetCursorPosition(32, 6);Console.Write("Te han hundido: "+hundidoJ2);
Console.SetCursorPosition(32, 7);Console.Write("Rondas: "+rondasJ1);
Console.SetCursorPosition(32, 9);Console.Write("Atacar J1  ==> Fila: "+fila);
Console.SetCursorPosition(32, 10);Console.Write("           ==> Columna: ");
validar = int.TryParse(Console.ReadLine(), out columna);

}while(columna<1 || columna>8);
Console.Write("\n\n");
}

public void realizarComprobacionesJ1(){
repetirTirada = true;
if(tableroJ2[fila-1,columna-1] == 1){ // Realiza el ataque a la posición indicada
Console.SetCursorPosition(32, 12);Console.Write("Barco Hundido. Vuelves a atacar J1.\n");
tableroJ2[fila-1,columna-1]=(char)'X';
if(sonido == true){
player.SoundLocation = ".\\sonido\\Explosion.wav";
player.Play();
}
hundidoJ1++;
barcosJ2--;
}else if(tableroJ2[fila-1,columna-1] == (char)'A'){
if(sonido == true){
player.SoundLocation = ".\\sonido\\PosicionYaDada.wav";
player.Play();
}
Console.SetCursorPosition(32, 12);Console.Write("Ya has atacado esta posición. Pasas turno.");
}else if(tableroJ2[fila-1,columna-1] == (char)'X'){
if(sonido == true){
player.SoundLocation = ".\\sonido\\PosicionYaDada.wav";
player.Play();
}
Console.SetCursorPosition(32, 12);Console.Write("Ya has hundido este barco. Pasas turno.");
repetirTirada = false;
}else{
if(sonido == true){
player.SoundLocation = ".\\sonido\\NoHayBarco.wav";
player.Play();
}
Console.Clear();
tableroJ2[fila-1,columna-1] = (char)'A';
Console.Write("\n Mapa Jugador 1");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ1.GetLength(0);i++){
for(int j=0;j<tableroJ1.GetLength(1);j++){
Console.Write("  "+(char)tableroJ1[i,j]);
}
Console.Write("\n");
}
Console.Write("\n\n Mapa Jugador 2");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(tableroJ2[i,j]==1){   // Si hay un barco
posJ2[i,j]=tableroJ2[i,j];   // Guardo su posición
tableroJ2[i,j]=(char)'-';   // y muestro agua por pantalla
}
if(tableroJ2[i,j]==0){
tableroJ2[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ2[i,j]);
}
Console.Write("\n");
}
//------
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(posJ2[i,j]==1){
tableroJ2[i,j]=posJ2[i,j];
}
}
}
Console.SetCursorPosition(32, 1);Console.Write("Turno J1 - "+nombreJ1);
Console.SetCursorPosition(32, 2);Console.Write("-----------------\n\n");
Console.SetCursorPosition(32, 4);Console.Write("Barcos: "+barcosJ1);
Console.SetCursorPosition(32, 5);Console.Write("Has hundido: "+hundidoJ1);
Console.SetCursorPosition(32, 6);Console.Write("Te han hundido: "+hundidoJ2);
Console.SetCursorPosition(32, 7);Console.Write("Rondas: "+rondasJ1);
Console.SetCursorPosition(32, 9);Console.Write("Atacar J1  ==> Fila: "+fila);
Console.SetCursorPosition(32, 10);Console.Write("           ==> Columna: "+columna);
Console.SetCursorPosition(32, 12);Console.Write("Has tocado agua. Pasas turno a J2.\n");
}
rondasJ1++;
Thread.Sleep(2000);
}

public void ataqueAlAzarDeJ2(){
Console.Clear();
Random r = new Random(); // elige Fila y Columna AL AZAR EN CADA RONDA pa atacar
int rfila7 = r.Next(1,6), rcolumna7 = r.Next(1,8);
Console.Clear();
Console.Write("\n Mapa Jugador 1");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ1.GetLength(0);i++){
for(int j=0;j<tableroJ1.GetLength(1);j++){
if(tableroJ1[i,j]==1){
tableroJ1[i,j]=(char)'B';
}
if(tableroJ1[i,j]==0){
tableroJ1[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ1[i,j]);
}
Console.Write("\n");
}
Console.Write("\n\n Mapa Jugador 2");
Console.Write("\n ----------------\n\n");
for(int i=0;i<tableroJ2.GetLength(0);i++){ // Muestra los barcos J2
for(int j=0;j<tableroJ2.GetLength(1);j++){
posJ2[i,j]=0;
if(tableroJ2[i,j]==1){   // Si hay un barco
posJ2[i,j]=tableroJ2[i,j];   // Guardo su posición
tableroJ2[i,j]=(char)'-';   // y muestro agua por pantalla
}
if(tableroJ2[i,j]==0){
tableroJ2[i,j]=(char)'-';
}
Console.Write("  "+(char)tableroJ2[i,j]);
}
Console.Write("\n");
}
//------
for(int i=0;i<tableroJ2.GetLength(0);i++){
for(int j=0;j<tableroJ2.GetLength(1);j++){
if(posJ2[i,j]==1){
tableroJ2[i,j]=posJ2[i,j]; // Revivo los barcos J2 (antes los borré del mapa)
}
}
}
Console.SetCursorPosition(32, 1);Console.Write("Turno J2 - "+nombreJ2);
Console.SetCursorPosition(32, 2);Console.Write("------------------\n\n");
Console.SetCursorPosition(32, 4);Console.Write("Barcos: "+barcosJ2);
Console.SetCursorPosition(32, 5);Console.Write("Has hundido: "+hundidoJ2);
Console.SetCursorPosition(32, 6);Console.Write("Te han hundido: "+hundidoJ1);
Console.SetCursorPosition(32, 7);Console.Write("Rondas: "+rondasJ2);
Console.SetCursorPosition(32, 9);Console.Write("Atacar J2  ==> Fila: "); // Atacar J2 a J1
Thread.Sleep(1500);
Console.Write(rfila7);
fila=rfila7;
Console.SetCursorPosition(32, 10);Console.Write("           ==> Columna: ");
Thread.Sleep(1500);
Console.Write(rcolumna7);
columna=rcolumna7;
Thread.Sleep(1000);
Console.Write("\n\n");
}

public void realizarComprobacionesJ2(){
repetirTirada = true;
if(tableroJ1[fila-1,columna-1] == (char)'B'){
Console.SetCursorPosition(32, 12);Console.Write("Barco Hundido. Vuelves a atacar jugador 2.\n");
tableroJ1[fila-1,columna-1] = (char)'X';
if(sonido == true){
player.SoundLocation = ".\\sonido\\Explosion.wav";
player.Play();
}
hundidoJ2++;
barcosJ1--;
}else if(tableroJ1[fila-1,columna-1] == (char)'A'){
if(sonido == true){
player.SoundLocation = ".\\sonido\\PosicionYaDada.wav";
player.Play();
}
Console.SetCursorPosition(32, 12);Console.Write("Ya has atacado esta posición. Pasas turno.");
}else if(tableroJ1[fila-1,columna-1] == (char)'X'){
if(sonido == true){
player.SoundLocation = ".\\sonido\\PosicionYaDada.wav";
player.Play();
}
Console.SetCursorPosition(32, 12);Console.Write("Ya has hundido este barco. Pasas turno.");
repetirTirada = false;
}else{
if(sonido == true){
player.SoundLocation = ".\\sonido\\NoHayBarco.wav";
player.Play();
}
Console.SetCursorPosition(32, 12);Console.Write("Has tocado agua. Pasas turno a J1.\n");
tableroJ1[fila-1,columna-1]=(char)'A';
}
rondasJ2++;
Thread.Sleep(2000);
}
}
}


Lo iré actualizando poquito a poco con el tiempo, así que nada de prisas ya que simplemente lo hago por aprender y el segundo motivo, por aburrimiento. Espero que os guste.

Feliz Navidad gente!  ;)
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

spiritdead

:) podrias crearlo en win-forms o WPF y crearle 1 servidor  con sockets :D para multi-player

es 1 idea

y si alguien es bueno en algoritmia podrias hacerle la (AI) :P
Facilitador De Tareas - Task Simplifier (FDT)

Dryken

La idea me encanta spiritdead, sería una chulada poder juegar en multiplayer pero aún tengo que aprender sobre sockets, me vi un post que hay aquí en el foro pero aún estoy como si no lo hubiera visto, los sockets me cuestan, a ver si poco a poco me entra  ;D

El tema de WFA no es complicado, pero antes que hacerlo a modo gráfico sería bueno que le mrjorará bastantes cosillas. Aún tiene errores que he de solucionar como

-marcar en el mapa donde se haya atacado en agua para no volver a dar en la misma posición

-generar un archivo de texto con los resultados de la partida...rondas

Hay muchas mas cosas pero la lista es interminable jeej xD

Lo de la IA queda en el aire, si alguien supiera quedaría un buen proyecto con todas estas ideas.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

Novlucker

... estructurar mejor el código, necesitas dividir ese largo código en métodos que luego te faciliten el ir añadiendo cosas :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Dryken

No te creas Novlucker que no me he fijado, cuando tengo que cambiar algo tengo que pararme a mirar todo el código a ver que parte es la que tengo que centrarme y es una gran espera mientras lo encuentro y no.

La POO aún no la he tocado, sólo la parte de programación estructurada, a ver si me pongo por mi cuenta cuando tenga un tiempo y lo organizo mejor. Me lío bastante con el tema de métodos, clases, objetos, algo de private, public...tengo un cacao mental increible  :xD
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

spiritdead

Facilitador De Tareas - Task Simplifier (FDT)

Keyen Night

#6
Cita de: Novlucker en  5 Diciembre 2012, 22:50 PM
... estructurar mejor el código, necesitas dividir ese largo código en métodos que luego te faciliten el ir añadiendo cosas :P

Saludos

x2 Opino lo mismo, una buena estructura permite la fácil comprensión del código mas tarde a la hora de agregar mas funciones. La mejor forma de practicar en hacer aplicaciones y la manera excelente es hacer juegos ya que se aplica la máxima expresión de la lógica y el estructuramiento del código ;).
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Dryken

He sacado la v0.2 de Hundir la Flota con algunos cambios. Ya sé que el código a simple vista es un poco lioso pero espero que dentro de poco poder ordenarlo un poco con POO que ya estoy comenzando en el ciclo.

Pd: Según la gente la POO se ama, es muy facil, todo es posititvo...Por ahora lo que sé más que amarla me está confundiendo, espero cambiar dentro de poco de opinión porque si nooo  :xD
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

spiritdead

Cita de: Dryken en 12 Diciembre 2012, 19:20 PM
He sacado la v0.2 de Hundir la Flota con algunos cambios. Ya sé que el código a simple vista es un poco lioso pero espero que dentro de poco poder ordenarlo un poco con POO que ya estoy comenzando en el ciclo.

Pd: Según la gente la POO se ama, es muy facil, todo es posititvo...Por ahora lo que sé más que amarla me está confundiendo, espero cambiar dentro de poco de opinión porque si nooo  :xD

porque la POO es 1 estilo distinto de programacion, pero que te puede ayudar a simplificar el codigo de maneras q ni te imaginas :P y sobre todo cuando comienzas a usar instancias del tipo (class) por ejemplo, te facilita la vida
Facilitador De Tareas - Task Simplifier (FDT)

Dryken

Después de llevarme un tiempo sin tocarlo me ha dado por volver a retomarlo un poco, le he echo algunos cambios importantes en cuanto a bugs, había bastantes, y entre otras cosas lo imprescindible que quería era pasar el código de estructura líneal a orientación a objetos.

Por ahora eson son los principales cambios, más adelante le pondré barcos de más posiciones para poder tocarlos y si vuelves a dar poder hundirlo...y algo más adelante haré multiplayer con sockets (ya tengo la idea medio echa). Por último me quiero dedicar a portarlo a WFA y mezclarlo con GDI+ u OpenTK según vea.

Pues nada, que os cunda gente! ^^
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html