[ Foro de C# ]
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
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.)