Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Dryken

#1
Os cuento, el lunes comienzo las prácticas en una empresa en la cual yo y otro compañero crearemos una app en android para dicha empresa.

...y me pregunto como podríamos trabajar ambos al mismo tiempo sobre el mismo proyecto.

¿Puede alguien orientarme? Gracias de antemano.
#2
Estoy haciendo la v0.4 de mi juego de hundir la flota, la novedad es el modo online, por ahora va bien, he conseguido pasar cosas básicas como valores de variables pero me he quedado pillado en pasar el array de la posiciones de los barcos en el tablero lo cual no me deja por sockets.

Me preguntaba si habría otra forma por sockets de pasar un array.

Tengo en mente otra solución más cutre...pasar todas las posiciones del array una a una pero el array tiene 6 filas y 8 columnas...no es plan pasar 48 variables de un tablero y 48 de otro.
#3
He creado por modo consola 2 app que se comunican entre ellas, cliente y servidor. Lo típico, en el cliente escribes algo y el servidor lo recibe.

Funciona correctamente, pero el único "problema" si es que puede llamarse así es que en el servidor se muestra lo enviado desde el cliente pero con un salto de línea. Creo que el problema es que al pulsar la tecla intro para enviar, dicha tecla también se envía.

Llevo bastante tiempo intentando averiguar como solucionarlo pero ya tengo la mente quemada, ojalá algunos tenga la mente más fresca.

Servidor

Código (csharp) [Seleccionar]
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System;
using System.Net.Sockets;
using System.Net;

namespace socket_servidor{
class Program{

public static void Main(string[] args){

Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1238);
           
          try {
              s.Bind (ep);
              s.Listen (25);
  Socket accepted = s.Accept();
 
                  Console.WriteLine("Conexion recibida\n");  
                 
                  while(true){
  byte[] buffer = new Byte[255];
                  int rec = accepted.Receive(buffer,0,buffer.Length,0);
                  string strData = Encoding.ASCII.GetString(buffer);
Console.Write(">>> "+strData+"\n");
                  }

            }catch {
                  Console.WriteLine ("Error iniciando conexion");
                  Console.ReadKey();
               }
}
}
}



Cliente

Código (csharp) [Seleccionar]
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System;
using System.Net.Sockets;
using System.Net;

namespace sockets{
class Program{

public static void Main(string[] args){

Console.WriteLine ("Conectandose al servidor...");
           Socket _S = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Socket de tipo TCP.
           IPEndPoint ep = new IPEndPoint (IPAddress.Parse ("127.0.0.1"), 1238); // Ip - Puerto

          try {
               _S.Connect (ep);
                   Console.WriteLine ("Conectado correctamente.\n");
                   
                   while(true){
                    Console.Write(">>> ");
            string text = Console.ReadLine();
            byte[] data = Encoding.ASCII.GetBytes(text);
            _S.Send(data);                  
                   }
           
          }catch(Exception ex) {
                Console.WriteLine (ex.Message);
                Console.ReadKey();
               }

}
}
}



Vamos, solucionar el salto de línea que produce la lectura de la tecla intro.


#4
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!  ;)
#5
Buenas, vengo de C/C++ y llevo solo cosa de 2 semanas en C# y me esta gustando mucho, son todo ventajas.

Pues eso, me preguntaba como podría evitar el error de que un usuario al acceder a un menú pulse por ejemplo la letra a y se quede pillado.

Si solo acepto variables enteras...¿que forma hay de que no ocurra nada y te vuelva a pedir introducir el valor?

He probado a poner un string para que acepte cualquier valor y funciona, pero únicamente acepta un caracter por pulsación de intro. Cuando pulsas más de uno se bloquea la app.
#6
Pretendo que al ejecutar el programa, éste se autocopie a la ruta system32, detectando por sí mismo en que ruta se ha ejecutado.

El código a simple vista parece que funciona, lo llamas copiar.exe y debería de copiarse pero surge un problema a la hora de ejecutarse.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
main(){

char path[256];
char nombre[60]="copiar";
char* ruta=getenv("windir"); //obtiene la ruta de la instalacion de windows

strcat(ruta,"\\System32\\"); //agrega System32 a la ruta
strcat(nombre,".exe"); //agrega .exe a wnws
strcat(ruta,nombre); //agrega wnws.exe a C:\WINDOWS\System32
HMODULE exe = GetModuleHandle(0); //nos retornara un handle al archivo usado para crear el proceso de llamada
GetModuleFileName(exe, path, 256); //obtien la ruta de si mismo
CopyFile(path,ruta,false); //se copia a la carpeta System32
}
#7
Estaba probando hacer un simple automatizador de netcat cuando me ha surgido un problema. Trata de que strcat concatena funciones y te devuelve la función final con la suma de todo, pero quiero que en dicha suma haya 2 espacios.

Quiero pasar de ncIPPuerto ---->    nc IP Puerto

El código que tengo es este.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main(){
char puerto[25], ip[25];
char netcat[]="nc";

printf("Introduce la IP:\t");
scanf("%s",&ip);
printf("Introduce el puerto:\t");
scanf("%s",&puerto);
strcat(netcat,ip);
strcat(netcat,puerto);

system(netcat);
while(getchar() !='\n');  
getchar();

}
#8
Resulta que al ejecutar el exploit con su payload me salta un error que a simple vista parece que es porque no tengo los permisos necesarios para poder ejecutarlo.

Citarexploit failed: Errno::EACCES permission denied - bind(2)

El exploit y el payload que uso son para tomar el control de la shell de windows 7, son estos.

Citaruse windows/browser/ms10_046_shortcut_icon_dllloader
set payload windows/meterpreter/reverse_tcp

No sé cúal es el motivo exacto ni como podría solucionarlo, espero que podáis echarme una mano.
#9
En mis ratos libres me he puesto a hacer una calculadora algo simple. Tiene las siguientes funciones:

-Suma                     -Seno               -Conocer multiplos
-Resta                     -Coseno            -Teorema Binomio
-Multiplicacion          -Tangente          -Calcular un descuento
-Division                  -Cosecante        -Multiplicar 2 matrices
-Raiz                       -Secante            -Area de un triangulo
-Potencia                 -Cotangente
-Logaritmo               -Conversor

Por ejemplo, el conversor nos permite transformar el valor de distintos tipos de monedas. Tambien permite pasar de decimal a binario.

Espero que con el tiempo esta calculadora mejore y tengas mas funciones y sea mas compleja.

PD: Hay algunas cosas como el teorema del binomio y el conversor de decimal a binario que no es mio, lo he incrustado en el code para abarcar mas.

PD2: Lo siento pero el goto no hay manera de reemplazarlo por otra funcion  :huh:

Versión 0.2


  • Code simplificado, suprimida la libreria iostream
  • Mejorada la limpieza del buffer
  • Solucionada la ausencia de un break en los case del switch
  • Eliminado el goto y sustituido
  • Corregidos pequeños errores

Versión 0.3


  • Ahora se utilizan menos variables
  • Codigo mas comprimido.
  • El codigo es portable, multiplataforma
  • Agregado nombre del programa a la consola (solo aparece en Win32)
  • Diseñada nueva interfaz y nuevo menu
  • Corregidas tildes en textos
  • Varios bugs menores

Versión 0.4


  • Codigo mas ordenado y limpio
  • Agregada Barra de transicion al menu
  • Añadida la funcion Angulos de un triangulo
  • Añadida la funcion Conversor de segundos a minutos y horas
  • Añadida la funcion Factorial
  • Añadida la funcion Conocer numeros primos
  • Añadido el Teorema de Pitagoras
  • Añadida la Serie de Fibonacci

Versión 0.5


  • Ahora se almacenan los resultados de las operaciones automaticamente en un archivo de texto (localizado en la misma raiz que la calc)
  • Pequeño bug al volver al menu
  • Solucionado problema con el buffer en saltos de linea
  • Agregadas tildes a las palabras

Versión 0.6 - 8/8/12


  • Corrección de tildes en archivo de texto generado
  • Pequeña mejora en la GUI
  • Añadida la funcion Binario a decimal
  • Añadida la funcion Decimal a Hexadecimal
  • Añadida la funcion Hexadecimal a Decimal
  • Añadida la funcion MCD y MCM
  • Añadida la funcion Área de un círculo
  • Añadida la funcion Longitud de un circulo

Versión 0.7 -20/10/12


  • Solucionado importante bug (ingreso de caracteres en variables enteras)
  • Arreglados bastantes bugs menores
  • Compatible con 64 bits
  • Cambios en la GUI
  • Optimizado el código de la Serie de Fibonacci y el del conversor de Decimal a Binario
  • Añadido conversión de Decimal a Octal y viceversa

Código v0.7
http://pastebin.com/Bz2x1ZS3
#10
Estoy tratando de hacer un simple código que te pida cuantas veces quieres crear un carpeta en C:// y posteriormente estas se creen con nombres aleatorios pero salta un problema.

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

main(){

int num,cifra;
char azar[] = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z";

srand (time(NULL));   
azar=rand();

printf("Veces a abrir:\t");
scanf("%i",&cifra);

for(num=0;num<=cifra;num++)
system("mkdir c:\\%d",azar);
getchar();

}


Sé que no está bien meter la variable azar dentro de la función system(); ya que da error pero no se me ocurre como podría hacerlo.
#11
Hace poco me infectó un virus. En primer lugar lo que hizo fue...

1-Desactivar Firewall.
2-Copiarse al registro.
3-No deja acceder al usuario al registro (dice que el admin lo ha desabilitado).
4-Desactivar el Restaurar Sistema

El problema con este virus ya lo he solucionado parcialmente, me persiste la acción 3 y 4. Ahora como soy curioso me gustaría saber como ha podido hacer estas cosas en C.

Por ejemplo, la acción de copiarse al registro me parece que es esta:

CitarHKEY registro;    
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&registro );
RegSetValueEx(registro, "Windows Update",0,REG_SZ,(const unsigned char*)system,40);
RegCloseKey(registro);

Pero sigo sin saber que código ha utilizado para llevar a cabo las otras acciones. Espero que vosotros sepáis como hacerlo.
#12
He visto en una aplicación ya compilada que nada más entrar aparece un menú...hasta aquí todo bien.

Lo que me llama la atención es que cuando pulsas el número que corresponde con dicha opción...solo pulsando el número ya avanza cuando lo normal sería pulsar el número y luego pulsar la tecla intro para poder avanzar.

¿Alguno sabéis como es posible hacerlo? Eso si se puede hacer...  :-\