[ Foro de C# ]

Convertir c en c#

24-Jan-2019 17:11
Invitado (MdeMarcos)
1 Respuestas

Hice un programa en c pero lo tengo que 'convertir' a un programa que funcione en c#, hay cosas que no se el equivalente de c en c# por lo que no se como hacerlo exactamente, os dejo el programa en c y lo que llevo de c#:


-c:

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

#define Jugador1 1
#define Jugador2 2

// Cabecera de funciones
void imprimirEstado(int pilas[], int player);
void checkGanador(int pilas[], int player);


//Mientras el ganador = 0 el juego continua
int ganador = 0;

int main(){
int pilas[] = {6, 6, 6, 6};

//Comienza el jugador 1
int jugador = Jugador1;
int fila, n;

//Pantalla de bienvenida
printf("Juego de retirar piedrecitas\n");
printf("\nREGLAS:\n");
printf("--> Intenta que tu rival retire la última piedra \n");
printf("--> ¡Suerte!\n\n");

//Bucle principal
while(1){
if(ganador == 0) {
//Alternamos el jugador
jugador = (jugador % 2) ? 1 : 2;

imprimirEstado(pilas, jugador);

printf("\nIntroduce la fila de dónde quieras retirar piedras (0-3): ");
        scanf("%d", &fila);

printf("Introduce el número de piedras que quieres retirar: ");
        scanf("%d", &n);

printf("\n");

/* Si el numero de piedras que tratamos de
retirar el mayor del que hay lanzamos
un error */
if(pilas[fila] - n < 0) {
printf("------------------------------\n");
printf("Movimiento ilegal, no puedes retirar más piedras de las que hay.\n");
continue;
} else {
/* En caso de poder realizarse la retirada,
restamos el numero que queremos quitar
a la posicion del array de la que queremos quitar */
pilas[fila] = pilas[fila] - n;
}

checkGanador(pilas, jugador);
jugador++;
} else {
//En caso de que el ganador != 0 alguien ha ganado el juego

jugador--; //Porque justo despues de checkGanador() hacemos jugador++
printf("El jugador %d ha ganado\n", ganador);
return 0; //Finalizamos el juego
}
}
}

void checkGanador(int pilas[], int jugador){
int i;
int suma = 0;
/* Sumamos el numero de piedras de cada fila
y si solo queda 1 piedra entre todas las filas
el jugador que haya realizado el turno anterior ha
ganado */
for(i = 0; i < 4; i++){
suma += pilas[i];
}
if (suma == 1) {
ganador = jugador;
}
}

void imprimirEstado(int pilas[], int jugador){
int i, n;

printf("------------------------------\n");
printf("\nTurno del jugador %d \n", jugador);
for(i = 0; i < 4; i++){
printf("%d: ", i);
for(n = 0; n < pilas[i]; n++) {
printf("o ");
}
printf("\n");
}
}


c#:

-Main:


           int [] pilas = { 6, 6, 6, 6 };
           int fila, n;

           Console.Write("Juego de retirar piedrecitas\n");
           Console.Write("\nREGLAS:\n");
           Console.Write("--> Intenta que tu rival retire la última piedra \n");
           Console.Write("--> ¡Suerte!\n\n");

           while (1)
           {
               if (ganador == 0)
               {
                   
                   jugador = (jugador % 2) ? 1 : 2; //Alternamos el jugador

                   ImprimirEstado(pilas, jugador);

                   Console.Write("\nIntroduce la fila de donde quieras retirar piedras (0-3): ");
                   scanf("%d", &fila);

                   Console.Write("Introduce el número de piedras que quieres retirar: ");
                   scanf("%d", &n);

                   Console.Write("\n");

                   /* Si el numero de piedras que tratamos de
                   retirar el mayor del que hay lanzamos
                   un error */
                   if (pilas[fila] - n < 0)
                   {
                       Console.Write("------------------------------\n");
                       Console.Write("Movimiento ilegal, no puedes retirar más piedras de las que hay.\n");
                       continue;
                   }
                   else
                   {
                       /* En caso de poder realizarse la retirada,
                       restamos el numero que queremos quitar
                       a la posicion del array de la que queremos quitar */
                       pilas[fila] = pilas[fila] - n;
                   }

                   checkGanador(pilas, jugador);
                   jugador++;
               }
               else
               {
                   //En caso de que el ganador != 0 alguien ha ganado el juego

                   jugador--; //Porque justo despues de checkGanador() hacemos jugador++
                   Console.Write("El jugador %d ha ganado\n", ganador);
                   return 0; //Finalizamos el juego
               }
           }


-Funcion 1:



       public static void checkGanador(int [] pilas, int jugador)
       {
           int ganador = 0;
           int i;
           int suma = 0;
           /* Sumamos el numero de piedras de cada fila
           y si solo queda 1 piedra entre todas las filas
           el jugador que haya realizado el turno anterior ha
           ganado */
           for (i = 0; i < 4; ++i)
           {
               suma += pilas[i];
           }
           if (suma == 1)
           {
               ganador = jugador;
           }
       }



-Funcion 2:


       public static void ImprimirEstado(int [] pilas, int jugador)
       {
           int i, n;

           Console.Write("------------------------------\n");
           Console.Write("\nTurno del jugador %d \n", jugador);
           for (i = 0; i < 4; i++)
           {
               Console.Write("%d: ", i);
               for (n = 0; n < pilas[i]; ++n)
               {
                   Console.Write("o ");
               }
               Console.Write("\n");
           }
       }


Espero haberme explicado bien y gracias de antemano


06-Feb-2019 00:06
Nacho Cabanes (+84)

Quizá sea más fácil si detallas qué cosas no sabrías hacer en C#.

En un primer vistazo rápido, he notado cosas que fallarán, como

scanf("%d", &fila);

que debería ser

fila = Convert.ToInt32( Console.ReadLine() );

o como

Console.Write("\nTurno del jugador %d \n", jugador);

que debería ser

Console.Write("\nTurno del jugador {0}\n", jugador);

y mejoras que no todas las versiones de C permiten y que son deseables en C#, como declarar las variables "i" y "n" dentro de los bucles "for". Los "\n" son específicos de una plataforma concreta, y por eso en C# se suele preferir

Console.WriteLine();

en vez de

Console.Write("\n");






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)