Gå till innehållet

Hela programmet - Sänka Skepp

int kartBredd = 6;
int kartHöjd = 4;
string[,] spelarensKarta = new string[kartBredd, kartHöjd];
string[,] datornsKarta = new string[kartBredd, kartHöjd];
bool[,] spelarensSkott = new bool[kartBredd, kartHöjd];
bool[,] datornsSkott = new bool[kartBredd, kartHöjd];

Random slump = new Random();

SkapaKartorna();
PlaceraSkepp();
SpelaSänkaSkepp();


// Fyller spelarens och datorns kartor med tomma rutor
void SkapaKartorna()
{
    for (int y = 0; y < kartHöjd; y++)
    {
        for (int x = 0; x < kartBredd; x++)
        {
            spelarensKarta[x, y] = "O";
            datornsKarta[x, y] = "O";
            spelarensSkott[x, y] = false;
            datornsSkott[x, y] = false;
        }
    }
}


// Placerar X på några av spelarens och datorns platser
void PlaceraSkepp()
{
    spelarensKarta[1, 3] = "X";
    spelarensKarta[2, 0] = "X";
    datornsKarta[3, 2] = "X";
    datornsKarta[1, 3] = "X";
}

// Spelets huvudloop
void SpelaSänkaSkepp()
{
    bool harNågonVunnit = false;
    while (harNågonVunnit == false)
    {
        Console.Clear();
        RitaSpelplanen();
        Console.WriteLine("Var vill du skjuta? (X)");
        int x = ReadInt();
        Console.WriteLine("Var vill du skjuta? (Y)");
        int y = ReadInt();
        spelarensSkott[x - 1, y - 1] = true;
        datornsSkott[slump.Next(kartBredd), slump.Next(kartHöjd)] = true;

        if (HarSpelarenVunnit())
        {
            Console.Clear();
            RitaSpelplanen();
            Console.WriteLine("Spelaren vann");
            Console.ReadKey();
            harNågonVunnit = true;
        }
        else if (HarDatornVunnit())
        {
            Console.Clear();
            RitaSpelplanen();
            Console.WriteLine("Datorn vann");
            Console.ReadKey();
            harNågonVunnit = true;
        }
    }
}


// Ritar ut spelarens och datorns kartor
void RitaSpelplanen()
{
    Console.WriteLine("Spelarens karta");
    for (int y = 0; y < kartHöjd; y++)
    {
        for (int x = 0; x < kartBredd; x++)
        {
            if (datornsSkott[x, y] == true)
            {
                Console.ForegroundColor = ConsoleColor.Red;
            }
            Console.Write(spelarensKarta[x,y]);

            // Återställ färgen till grå
            Console.ForegroundColor = ConsoleColor.Gray;
        }
        Console.WriteLine();
    }

    Console.WriteLine();

    // Rita datorns karta
    Console.WriteLine("Datorns karta");
    for (int y = 0; y < kartHöjd; y++)
    {
        for (int x = 0; x < kartBredd; x++)
        {
            // Endast rutor som spelaren har skjutit på syns
            if (spelarensSkott[x, y] == true)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write(datornsKarta[x, y]);
            }
            else
            {
                Console.Write("-");
            }


            // Återställ färgen till grå
            Console.ForegroundColor = ConsoleColor.Gray;
        }
        Console.WriteLine();
    }
}

// Kollat om spelaren har vunnit
bool HarSpelarenVunnit()
{
    for (int y = 0; y < kartHöjd; y++)
    {
        for (int x = 0; x < kartBredd; x++)
        {
            if (datornsKarta[x, y] == "X" && spelarensSkott[x, y] == false)
            {
                return false;
            }
        }
    }

    return true;
}

// Kollar om datorn har vunnit
bool HarDatornVunnit()
{
    for (int y = 0; y < kartHöjd; y++)
    {
        for (int x = 0; x < kartBredd; x++)
        {
            if (spelarensKarta[x, y] == "X" && datornsSkott[x, y] == false)
            {
                return false;
            }
        }
    }

    return true;
}

// Läser in ett heltal från användaren
int ReadInt()
{
    int heltal;
    while (int.TryParse(Console.ReadLine(), out heltal) == false)
    {
        Console.WriteLine("Du skrev inte in ett heltal. Försök igen.");
    }
    return heltal;
}