2 Fragen (Text markieren & Farbe in Array ersetzen)



  • Hi, ich bins wieder!

    Ich habe 2 Fragen.

    Folgendes:

    Ich habe ein Spielfeld (15x15), welches nur Nullen in verschiedenen Farben ausgibt, die in arrays festgelegt wurden.

    Ich habe einen Cursor gesetzt, den man mit den Tasten 4,5,6 und 8 bewegen kann. Jetzt ist die Frage, wie ich per Knopfdruck die Zahl an der Stelle des Cursors markieren und mit einem 2. Knopfdruck mit einer anderen ersetzen kann(Im normalfall die darüber).

    Das sollte so aussehen:

    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOORGROOOOO
    OOOOOOODGDOOOOO
    OOOOOOOBBBOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    

    => Der Cursor sitzt bei den 3 B's
    => Knopfdruck, die 3 B's werden markiert
    => Knopfdruck, die 3 B's werden mit den Ziffern darüber ersetzt und das geschieht auch mit den Ziffern drüber etc.

    Die Buchstaben R,G,D und B sollen Farben darstellen. Im Programm stehen in Wahrheit nur ein Haufen x' in verschiedenen Farben dran.

    Es sollte also danach so aussehen:

    OOOOOOO   OOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOORGROOOOO
    OOOOOOODGDOOOOO
    OOOOOOOOOOOOOOO
    OOOOOOOOOOOOOOO
    

    Mein Code sieht bisher so aus:

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        HANDLE textfarbe;
        COORD pos;
    
        textfarbe = GetStdHandle(STD_OUTPUT_HANDLE);
    
        int ifeld[15][15];
        int ilaenge,ihoehe,ifarben;
        unsigned char ipos;
    
        printf("Wieviele Farben sollen benutzt werden? ");
        scanf("%i",&ifarben);
    
        system("cls");
    
        for(ihoehe=0; ihoehe<15; ihoehe++)
        {
                  for(ilaenge=0; ilaenge<15; ilaenge++)
                  {
                            ifeld[ihoehe][ilaenge]=rand()%ifarben+1;
                            SetConsoleTextAttribute(textfarbe, ifeld[ihoehe][ilaenge]);
                            printf("x");
                  }
        printf("\n"); 
        } 
    
        pos.X = 0; // x-Position
        pos.Y = 0; // y-Position
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    
        SetConsoleTextAttribute(textfarbe, 7);
    
        ipos = getch();
    
        do
        {
        ipos = getch();    
        switch(ipos)
        {
                    case '8':
                             pos.X = pos.X; // x-Position
                             pos.Y = pos.Y-1; // y-Position 
                             SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
                             break;
                    case '4':
                             pos.X = pos.X-1; // x-Position
                             pos.Y = pos.Y; // y-Position 
                             SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
                             break;
                    case '5':
                             pos.X = pos.X; // x-Position
                             pos.Y = pos.Y+1; // y-Position 
                             SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
                             break;
                    case '6':
                             pos.X = pos.X+1; // x-Position
                             pos.Y = pos.Y; // y-Position 
                             SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
                             break;                                        
        }
    
    }while(true);
    }
    


  • Ist mit Markierung eine optische Hervorhebung gemeint oder soll das so markiert (= selektiert) sein, dass der Benutzer das dann Copy&Pasten kann?

    Wenn dir ersteres reicht dann mach nach dem Setzen der Cursor-Position einfach die Hintergrundfarbe an der Stelle anders.

    Naja und bei zweiterem schreibst du einfach den Wert aus dem Array von eins drüber in dein Feld.

    MfG SideWinder



  • zu 1: Geht eigentlich beides.

    zu 2: Das ist das Problem. Weil wenn ich es dann ersetzen will, dann sucht er sich nur irgendeine zufällige Farbe raus. Weil vorher im Code für jedes Feld ein rand() befehl verwendet wurde.

    ifeld[ihoehe][ilaenge]=rand()%ifarben+1;
    

    Wenn i gedrückt wird, um die Farbe mit der Farbe im Kästchen drüber zu ersetzen, würde das so aussehen:

    case 'i':
                             {
                             SetConsoleTextAttribute(textfarbe,ifeld[pos.X][pos.Y-1]);
                             printf("O");
                             }
    


  • Verstehe ich nicht ... erstens könntest Du die Farbe des darüberliegenden Zeichens ja erst mal auslesen und dann an der gewünschten Stelle setzen, zweitens könntest Du - wenn ich Dein oa Bild richtig verstehe - auch den ganzen Block auf einmal runterscrollen:
    http://msdn.microsoft.com/en-us/library/ms685107(v=vs.85).aspx

    Edit: Die printf - Anweisung brauchst Du gar nicht, wenn da sowieso schon das richtige Zeichen steht ...


Anmelden zum Antworten