index must refer to a coordinate of a string

0

My code gives error in this EXATA line, I have already re-integered and still gives the same error. it is a game of the gallows:

  

vLetraA = vLetraA.Substring (x, 1);

full code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int vAcertos = 0, vErros = 0, x, vTam, i;
            string vPalavra = "", vLetraD, vLetra, vAtual, vAnterior, vLetraA;
            bool vAcertou;
            string[] Palavra = new string[8];
            Random aleatory = new Random();
            Palavra[0] = "Batman";
            Palavra[1] = "Coringa";
            Palavra[2] = "Penguim";
            Palavra[3] = "Duas Caras";
            Palavra[4] = "Harleyquinn";
            Palavra[5] = "Morcego Humano";
            Palavra[6] = "Drax";
            Palavra[7] = "Robin";

            i = aleatory.Next(0, 8);
            vPalavra = Palavra[i];
            vAnterior = ""; vAtual = ""; //declaração Primária;
            vTam = vPalavra.Length; //vTam é o tamanho do vPalavra
            for (x = 0; x < vTam; x++)
            {
                vAtual = vAtual + "-";
            }
            Console.SetCursorPosition(25, 12);
            Console.Write(vAtual);
            do
            {
                Console.SetCursorPosition(10, 9);
                Console.Write("escreva uma letra: ");
                vLetraD = Console.ReadLine();
                vLetraA = vAtual; vAcertou = false;
                vAtual = "";
                for (x = 0; x < vTam; x++)
                {
                    vLetra = vPalavra.Substring(x, 1);
                    vLetraA = vLetraA.Substring(x, 1);
                    if (vLetraD == vLetra && vLetraA == "-")
                    {
                        vAtual = vAtual + vLetra;
                        vAcertos++;
                        vAcertou = true;
                    }
                    else
                    {
                        if (vLetraA == "-")
                        {
                            vAtual = vAtual + "-";
                        }
                    }
                }
                Console.SetCursorPosition(25, 12);
                Console.Write(vAtual);
                if (vAcertou == false)
                {
                    vErros++;
                    MostraCorpo(vErros);
                    Console.ReadKey();
                }
                Console.ReadKey();
            } while (vErros != 6 && vAcertos != vTam);


        }
        static void janela(int L1, int C1, int L2, int C2)
        {
            int x;
            for (x = L1; x <= L2; x++)
            {
                Console.SetCursorPosition(C1, x); Console.Write("║");
                Console.SetCursorPosition(C2, x); Console.Write("║");
            }
            for (x = C1; x <= C2; x++)
            {
                Console.SetCursorPosition(x, L1); Console.Write("═");
                Console.SetCursorPosition(x, L2); Console.Write("═");
            }
            Console.SetCursorPosition(C1, L1); Console.Write("╔");
            Console.SetCursorPosition(C2, L1); Console.Write("╗");
            Console.SetCursorPosition(C1, L2); Console.Write("╚");
            Console.SetCursorPosition(C2, L2); Console.Write("╝");
        }
        static void MostraCorpo(int p)
        {
            switch (p)
            {
                case 1:
                    Console.SetCursorPosition(13, 7);
                    Console.Write("O");
                    break;
                case 2:
                    Console.SetCursorPosition(13, 8);
                    Console.Write(" /|\ ");
                    break;
                case 3:
                    Console.SetCursorPosition(13, 7);
                    Console.Write(" /\");
                    break;
            }
        }
        static void MostraForca()
        {
            Console.SetCursorPosition(10, 5);
            Console.Write("____");
            Console.SetCursorPosition(10, 6);
            Console.WriteLine("|  |");
            Console.SetCursorPosition(10, 7);
            Console.WriteLine("|");
            Console.SetCursorPosition(10, 8);
            Console.WriteLine("|");
        }
    }
}
    
asked by anonymous 30.11.2018 / 16:54

1 answer

0

Hello, Friend! I believe you need to use StringBuilder . Here is the code with the setting:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
  class Program
{
    static void Main(string[] args)
    {
        int vAcertos = 0, vErros = 0, x, vTam, i;
        string vPalavra = "", vLetra, vAtual, vAnterior, vLetraA;
        char vLetraD;
        bool vAcertou;
        string[] Palavra = new string[8];
        Random aleatory = new Random();
        Palavra[0] = "Batman";
        Palavra[1] = "Coringa";
        Palavra[2] = "Penguim";
        Palavra[3] = "Duas Caras";
        Palavra[4] = "Harleyquinn";
        Palavra[5] = "Morcego Humano";
        Palavra[6] = "Drax";
        Palavra[7] = "Robin";

        i = aleatory.Next(0, 8);
        vPalavra = Palavra[i];
        var PalavraAuxiliar = new StringBuilder(vPalavra);
        vAnterior = ""; vAtual = ""; //declaração Primária;
        vTam = vPalavra.Length; //vTam é o tamanho do vPalavra
        for (x = 0; x < vTam; x++)
        {
            PalavraAuxiliar.Replace(PalavraAuxiliar[x], '-');
        }
        Console.SetCursorPosition(25, 12);
        Console.Write(PalavraAuxiliar);
        do
        {
            Console.SetCursorPosition(10, 9);
            Console.Write("escreva uma letra: ");
            vLetraD =char.Parse( Console.ReadLine());
            vAcertou = false;
            for (int posicao = 0; posicao < vTam; posicao++)
            {

                /*Principal Alteração*/
                if(vLetraD == vPalavra[posicao]){
                    PalavraAuxiliar[posicao] = vLetraD;
                    vAcertou = true;
                }
            }

            Console.SetCursorPosition(25, 12);
            Console.Write(PalavraAuxiliar);
            if (!vAcertou)
            {
                vErros++;
                MostraCorpo(vErros);
                Console.ReadKey();
            }
            Console.ReadKey();
        } while (vErros != 6 && vAcertos != vTam);


    }
    static void janela(int L1, int C1, int L2, int C2)
    {
        int x;
        for (x = L1; x <= L2; x++)
        {
            Console.SetCursorPosition(C1, x); Console.Write("║");
            Console.SetCursorPosition(C2, x); Console.Write("║");
        }
        for (x = C1; x <= C2; x++)
        {
            Console.SetCursorPosition(x, L1); Console.Write("═");
            Console.SetCursorPosition(x, L2); Console.Write("═");
        }
        Console.SetCursorPosition(C1, L1); Console.Write("╔");
        Console.SetCursorPosition(C2, L1); Console.Write("╗");
        Console.SetCursorPosition(C1, L2); Console.Write("╚");
        Console.SetCursorPosition(C2, L2); Console.Write("╝");
    }
    static void MostraCorpo(int p)
    {
        switch (p)
        {
            case 1:
                Console.SetCursorPosition(13, 7);
                Console.Write("O");
                break;
            case 2:
                Console.SetCursorPosition(13, 8);
                Console.Write(" /|\ ");
                break;
            case 3:
                Console.SetCursorPosition(13, 7);
                Console.Write(" /\");
                break;
        }
    }
    static void MostraForca()
    {
        Console.SetCursorPosition(10, 5);
        Console.Write("____");
        Console.SetCursorPosition(10, 6);
        Console.WriteLine("|  |");
        Console.SetCursorPosition(10, 7);
        Console.WriteLine("|");
        Console.SetCursorPosition(10, 8);
        Console.WriteLine("|");
    }
  }
}

I marked the passage using a better way with the comment "Main Change". If possible see diff in an editor of your choice.
Another tip is regarding the use of the ToUpper () method to not bump into uppercase, lowercase errors. I hope I have helped.
Hugs,

    
30.11.2018 / 17:42