Frage zu Tastaturabfrage, bzw. Grafikausgabe



  • Hallo Leute, bin Anfänger und hätte mal zwei Fragen. Ich denke, dass das Forum das richtige ist und mir hier bestimmt jemand weiterhelfen kann.
    Ich sitze seit einigen Tagen an zwei Problemen. Ich benutze Watcom C++, falls jemand diese Info hilft.

    Das erste Problem ist:

    Mit
    _setcolor(9);
    _setpixel(x, y);

    kann man ja einzelne Pixel farbig setzen. Ich würde es aber gerne solch ein Array ausgeben:

    int setpix [10][10] =
    {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    };

    Also, dass jede Null ein schwarzes Pixel ist. Am besten in einer Funktion (drawarray(int x, int y)), die ich nur aufrufen brauche und die x und y Koordinate angebe. Wie bringe ich dieses Array mit setcolor und setpixel unter einen Hut???

    Zweites Problem:

    Ich habe folgenden Code:

    #include <graph.h>
    #include <bios.h>

    void main()
    {
    int x=250, y=250, ende=0, keystate;

    _setvideomode (_VRES256COLOR);

    while (!ende)
    {
    _setcolor(9);
    _rectangle( _GFILLINTERIOR, x, y, x+10, y+10 );

    keystate = _bios_keybrd( _KEYBRD_SHIFTSTATUS );
    switch (keystate)
    {
    case 0x01: //Right Shift
    _setcolor(0);
    _rectangle( _GFILLINTERIOR, x, y, x+10, y+10 );
    x=+5;
    break;

    case 0x04: //ctrl
    _setcolor(0);
    _rectangle( _GFILLINTERIOR, x, y, x+10, y+10 );
    y=-5;
    break;

    case 0x02: //Left Shift
    _setcolor(0);
    _rectangle( _GFILLINTERIOR, x, y, x+10, y+10 );
    x=-5;
    break;

    case 0x08: //alt
    _setcolor(0);
    _rectangle( _GFILLINTERIOR, x, y, x+10, y+10 );
    y=+5;
    break;

    case'q':
    ende=1;
    break;
    }

    }

    _setvideomode( _DEFAULTMODE );
    }

    Das Quadrat hüpft durch den Bildschirm, anstatt sich durch Tastendruck zu bewegen. Warum klappt es nicht? Kann ich mit _bios_keybrd(shiftstatus) auch die Pfeiltastenabfragen? Die Hexzahlen dazu habe ich nirgends gefunden.

    Wäre nicht schlecht, wenn jemand zu einem der Probleme eine Lösung hätte. Bin schon am durchdrehen. Dürfte für einige Leute aber eher kleinkram sein.
    Wäre auch sehr dankbar für professionele Alternativen oder Tipps was dort besser gemacht werden kann. Oder würdet ihr eher MSVC++ nehmen? Geht es da leichter mit einem anderen syntax?

    Ich danke euch schonmal im voraus und hoffe, dass ich endlich weiterkomme.

    Gruß Andi



  • Ich denke, dass das Forum das richtige ist und mir hier bestimmt jemand weiterhelfen kann.

    ... Das richtige Forum ist es leider nicht.... eher "andere Compiler"
    ... Standard C++ kennt kein "setvideomode"



  • Sorry, für die Belästigung. Bin davon ausgegangen, dass die Funktionen in graph.h ziemlich verbreitet sind und nur unter VC++ aus unerklärlichen Gründen (MS halt) fehlen. Dachte auch, dass die Funktionen gar nicht so speziell sind, zumindest teilweise.
    Ich kopier den Eintrag jetzt trotzdem nicht nochmal rüber, es sei den jemand besteht drauf.
    Hatte mich auch mit VC++ beschäftigt. Habe aber extra den Watcom ausgegraben, weil ich nichts gefunden hatte. Werde mir den Borland auch wieder zu legen.
    Wäre trotzdem für nen Tipp dankbar.
    Allerdings würde mich jetzt auchmal interessieren, wie man sowas in VC+ umsetzen soll?



  • hi

    schade daß ich den watcom nicht fahre, der kann ja auch nette sachen..
    sieht ähnlich aus wie der djgpp, aber eben nur ähnlich..

    vielleicht hilft dir dieser pfeiltastencode erstmal...

    #include<stdio.h>
    #include<conio.h>
    #include <ctype.h>
    
    int main(){
        unsigned char chr;
    
    do
        {
        chr=getch();//1.
            if ((chr==224) || (chr==0))
            {
                chr=getch(); //2.
                printf("%i",chr);
    
                switch(chr)
                {
                    case 75:                            
                        printf("<-");
                        break;
    
                    case 77:                           
                        printf("->");
    
                        break;
    
                    case 80:                           
                        printf("pfeil nach unten");
    
                                            break;
    
                                      case 72:  
                                             printf("pfeil nach oben");                           
    
                    break;
                }
            }
        }while(true);
        return 0;
    }
    

    unter dem studio ist alles dann ganz anders, möchtest du dort solche sachen machen, musst du dich auf die konsolenfunktionen der windowsapi begeben-
    siehe dazu im faq der konsole mal nach.

    ich würde erstmal den watcom ausreizen 🙂

    [ Dieser Beitrag wurde am 15.11.2002 um 07:15 Uhr von elise editiert. ]


Anmelden zum Antworten