index has to refer to a coordinate of a string

Asked

Viewed 22 times

0

My code gives error on this EXACT line, I have already remade whole and even then gives the same error. it is a hangman game:

vLetraA = vLetraA.Substring(x, 1);

complete 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("|");
        }
    }
}

1 answer

0

Hello, Friend!
I believe you need to use the Stringbuilder. Below 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 snippet with the use in a better way with the comment "Main Change". If possible see the diff in an editor of your preference.
Another tip is to use the Toupper() method to avoid bumping into errors with uppercase, lowercase letters.
I hope I’ve helped.
Hugs,

Browser other questions tagged

You are not signed in. Login or sign up in order to post.