Stworzenie w outpucie konsoli tablicy z kolumnami i wierszami

0

Stanąłem przed trudnym dla mnie problemem stworzenia w formie tekstowej coś na wzór arkusza, w którym na całej szerokości i długości standardowego wymiaru okna konsoli miałbym wiersze i kolumny, mniej więcej w taki sposób:

   1| 2| 3| 4| 5| 6| 7|
1|  |  |  |  |  |  |  |
2|  |  |  |  |  |  |  |
3|  |  |  |  |  |  |  |
4|  |  |  |  |  |  |  |
5|  |  |  |  |  |  |  |
6|  |  |  |  |  |  |  |
7|  |  |  |  |  |  |  |

W moim późniejszym zakresie, a więc o to was już nie proszę, byłoby dodanie gdzieś losowo znaku X - toteż wychodzi stąd konkluzja że każda kratka musi być odpowiednio zarejestrowana.

0

A może byś tak łaskawie pytanie zadał? Z czym masz problem? Z losowaniem liczby, z wyświetleniem znaku X na ekranie w odpowiednim miejscu?

0

Zbudowanie takiej tablicy poprzez pętle for().

0

Wymyśliłem taki kodzik:

// nie zwracać uwagi na późniejszy brak return, potem wstawię
unsigned draw(unsigned X, unsigned Y) {
    for (int a = 0; a < 10; a++) {
        if (a == 0) cout << "  ";
        cout << a << "|";
    }
    for (int b = 0; b < 10; b++) {
        cout << "\n";
        cout << b << "| ";
        for (int c = 0; c < 10; c++) {
                if (X == c && Y == b) cout << "#";
                else cout << "| ";
        }
    }
}

Jednak output wygląda nieco inaczej niż zamierzałem

user image

0

Wygodnej ci będzie to zrobić jak użyjesz dodatkowej biblioteki do konsoli(ncurses): http://cpp0x.pl/kursy/Kurs-New-Curses-C++/19

0

Źle się za to zabierasz. Do takiego prostego zadania wystarczy ci tablica dwuwymiarowa typu char o wymiarach jak okno konsoli. Wypełnij ją znakami tak jak chcesz, a potem całą wypisz. Nie potrzebujesz do tego żadnej curses czy nawet dodatkowych manipulatorów ostream. Zaletą tego rozwiązania jest to, że wylosowanie i postawienie znaku o dowolnych współrzędnych nie powinno stanowić problemów.

0

Jest świetnie, dzięki! Zarejestrowałbym się, żeby dać ci plusa, ale to chyba nie jest aż taka nobilitacja.

Pomimo tego! chciałbym zauważyć że zaoferowana tablica 2wymiarowa poprawnie wyświetla się w outpucie co najwyżej do liczby kolumn i wierszy 20 i 20. Ponad tymi wartościami program crashuje, a w maksymalnych wspomnianych wymiarach tablica nie zajmuje całej dostępnej przestrzeni szerokości. Cóż więc mam zrobić?

unsigned uKolumny = 20, uWiersze = 20;

    char tMiejsca[uWiersze][uKolumny];
    for (int a = 0; a < uKolumny; a++) {
            for (int b = 0; b < uWiersze; b++) {
                    if (a == Y && b == X) tMiejsca[a][b] = 'X';
                    else tMiejsca[a][b] = '-';
            }
    }

    for (int i = 0; i < uKolumny; i++) {
        for (int j = 0; j < uWiersze; j++) {
            cout << tMiejsca[i][j] << " " ;
        }
        cout << "\n";
    }
    pause();
0

vector<vector<char>>,
wieksza tablice.

0

Przepraszam ale nie rozumiem. Mógłbyś rozszerzyć swój wywód nieco bardziej?

0

w maksymalnych wspomnianych wymiarach tablica nie zajmuje całej dostępnej przestrzeni szerokości. Cóż więc mam zrobić?
Powiekszyc?
+http://www.cplusplus.com/reference/vector/vector/

0

Oto mój ulepszony kod. Problem teraz w tym, że gdy np. chcę X umieścić w kolumnie 1 dowolnego wiersza (bo jest on losowany) to program daje go gdzieś na środkowe miejsce!

unsigned draw(unsigned Y, bool bStrzal, unsigned XS, unsigned YS) {
    clear();
    unsigned X;
    do {
            X = random(uWiersze, 0);
    } while (X < 7 || X > 9);

    char tMiejsca[uKolumny][uWiersze];
    for (int a = 0; a < uKolumny - 1; a++) {
            for (int b = 0; b < uWiersze - 1; b++) {
                    tMiejsca[a][b] = '-';
                    if (a == X) {
                        nLogic = random(100, 0);
                        if (nLogic > 72 && !bStrzal) tMiejsca[a][b] = '1'; 
                        else if (nLogic > 72 && bStrzal) tMiejsca[a][b] = '2'; 
                    }
                    if (a == X && b == Y) tMiejsca[a][b] = 'X'; // target
                    if (a == XS && b == YS) tMiejsca[a][b] = 'S'; // strzal
            }
    }

    for (int i = 0; i < uKolumny - 1; i++) {
        for (int j = 0; j < uWiersze - 1; j++) {
            cout << tMiejsca[i][j] << " ";
        }
    }

    if (bStrzal) {
            nLogic = random(3, 0);
            nLogic2 = random(3, 0);
            unsigned Xtemporary = X - nLogic, Xtemporary2 = X + nLogic2;
            cout << "\n\nCel miedzy kolumnami " << Xtemporary << "-" << Xtemporary2;
            cout << "/n/n";
    }

    return success;
}

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