Wyrażanie nazwy elementu używając zmiennej pętli FOR

0

Czy jest jakiś w miarę prosty sposób aby zamienić:

char bg;

    for (int i=0 ; i<=array_size ; i++) { l1[i] = l2[i] = l3[i] = l4[i] = l5[i] = l6[i] = l7[i] = l8[i] = l9[i] = bg;}

na coś typu:

char bg;

    for (int i=0 ; i<=array_size ; i++) { for (int j=1 ; j<=9 ; j++ ) {l+j.[i] = bg;} }

Chodzi o to aby nazwa tabeli była wyrażona za pomocą zmiennej j, a zatem aby można było wypełnić dowolnym znakiem, dowolną ilość tablic. Dzięki z góry za pomoc

1

Tak jak chcesz się nie da, ale możesz np. zapełnić jedną tablicę a potem kopiować wartości do innych tablic tak jak tutaj.
Do czego są te tablice l1...l9? Być może źle podchodzisz do problemu.

I prośba - nie nazywaj używaj tak l, bardzo ciężko rozróżnić potem np. l4 od 14.

0
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

using namespace std;

const int g_width = 11;
string    sign = "^";
string    obst = "#";
string    bg = "+";

bool      status = true;
int       check, mid_pos = (g_width / 2) + 1, score = -80;
char      key, random;
const int array_size = g_width + 1;
string    l1[array_size], l2[array_size],
          l3[array_size], l4[array_size],
          l5[array_size], l6[array_size],
          l7[array_size], l8[array_size],
          l9[array_size], l_hidden[array_size];

void gotoxy(int x,int y)
{
    COORD coord;
    coord.X = x - 1;
    coord.Y = y - 1;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void logic() {
        for (int i=1; i <= (array_size - 1) ; i++) {
            l_hidden[i] = l8[i];
            l8[i] = l7[i];
            l7[i] = l6[i];
            l6[i] = l5[i];
            l5[i] = l4[i];
            l4[i] = l3[i];
            l3[i] = l2[i];
            l2[i] = l1[i];

            random = (rand() % 3 + 1);
            if (random == 1) {l1[i] = obst;} else {l1[i] = bg;}
        }

    for (int i=0 ; i<=(array_size) ; i++) { if (l9[i] == sign) {check = i;} }
    if (l_hidden[check] == obst) {status = false; }

    system("cls");
}

void game() {

    for (int i=0 ; i<=array_size ; i++) { l1[i] = l2[i] = l3[i] = l4[i] = l5[i] = l6[i] = l7[i] = l8[i] = l9[i] = bg;}
    l9[mid_pos] = sign;

    while(status) {

    for (int i=0 ; i<=(array_size) ; i++) {cout << l1[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l2[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l3[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l4[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l5[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l6[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l7[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l8[i];} cout << endl;
    for (int i=0 ; i<=(array_size) ; i++) {cout << l9[i];} cout << endl;

    cout <<"SCORE: " << score << endl;
    score = score + 10;

        key = _getch();
        switch (key)
        {
        case 'a':
            for (int i=1 ; i<= (array_size - 1) ; i++) {
                if (l9[i] == bg) { if (l9[i+1] == sign) {l9[i] = sign ; l9[i+1] = bg;} }
            }
            break;
        case 'd':
            for (int i=(array_size - 1) ; i>= 1 ; i--) {
                if (l9[i] == bg) { if (l9[i-1] == sign) {l9[i] = sign ; l9[i-1] = bg;} }
            }
            break;
        case 'x':
            status = false;
            break;
        default:
            break;
        }
        logic();
    }
}

int main() {
    game();
    return 0;
}

Próbowałem sobie zrobić jakąś prostą gierkę i wyszło mi właśnie coś takiego. Wiem że pewnie jest jakiś o wiele lepszy sposób na jej napisanie, ale z moją obecną wiedzą umiałem to zrobić tylko w ten sposób. Pytałem o tą pętlę, ponieważ chciałem umożliwić utworzenie dowolnie długiej planszy. Moim następnym pytaniem miało być jak stworzyć dowolną liczbę tablic o nazwie uzależnionej od zmiennej pętli, ale wracając do pytania pierwszego to patrząc na ten kod, dałoby się zrobić to inaczej ?

1

wyjscia są dwa

std::fill( array, array + sizeof( array ), 0 );

albo przejść od razu na std::array i http://www.cplusplus.com/reference/array/array/fill/

Albo po prostu użyć już nawet std::vector.(najlepsza opcja)

2

Jeżeli to ma być jakaś plansza to zamiast tych wszystkich tablic powinieneś mieć jedną tablicę dwuwymiarową.

0

W sumie to nie wiem czemu nie pomyślałem o tablicy dwuwymiarowej, dzięki wszystkim za odpowiedzi, będę dalej kombinował

1 użytkowników online, w tym zalogowanych: 0, gości: 1