Giải thích giúp đoạn code bắt phím

    void luachon(void)
{
    unsigned char nut='a',nutgia='a';
    int tlc,maxlc,i,manglc[40];
    fflush(stdin);
    switch (ct)
    {
    case 0:maxlc=5;for (i=1;i<=7;i++) manglc[i]=i;break;
    case 4:maxlc=2;manglc[1]=98;manglc[2]=99;oldlc=1;break;
    case 1:case 2:case 3:
    case 9:maxlc=3;manglc[1]=97;manglc[2]=98;manglc[3]=99;break;
    }


    //ban dau
    tlc=lc=oldlc;
    if (ct==9) tlc=lc=1;
    textcolor(WHITE);
    ten(manglc[lc]);




    while (nutgia!=0xD)
    {
        // bat phim
        nutgia=getch();
        if (nutgia==224) nut=getch();


        if (nutgia==0x1B)
            switch (ct)
        {
            case 0:exit(0);
        }

        switch (ct)
        {
        case 0: switch (nut)
                {

                    case 0x4B:case 0x48: lc--;if (flag==0&&(lc==2||lc==3)) lc=1;  break;
                    case 0x4D:case 0x50: lc++;if (flag==0&&(lc==2||lc==3)) lc=4;  break;
                }
                break;
        case 4:    switch(nut)
                {case 0x50:case 0x4D:case 0x48:case 0x4B:lc++;break;}
                break;
        case 1:case 2:case 3:case 9: switch(nut)
                {
                    case 0x50:
                    case 0x4D: if(lc==1)lc=3;else if(lc==3)lc=2;else lc=1;break;
                    case 0x48:
                    case 0x4B: if(lc==1)lc=2;else if(lc==3)lc=1;else lc=3;break;
                }
                break;

        }

        // gioi han bien lc
        if (lc>maxlc) lc=1;
        if (lc<1) lc=maxlc;

        //doi mau chu
        textcolor(GREEN);ten(manglc[tlc]);
        textcolor(WHITE);ten(manglc[lc]);

        //chuan bi cho vong lap sau - khoi tao lai gia tri
        tlc=lc;
        nut=0x61;
    }
}

Cái này em nhặt của bác langman bên condongcviet, code di chuyển phía up,down để lựa chọn. Em thử tìm mã ASCII của 0x4B, 0x48,… rồi mà nó ra kí tự K,H. Em không hiểu làm sao mà có thể bắt được phím up,down bằng đoạn code trên nữa.

Xem phần Remarks: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-getwch?view=msvc-160

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?